aboutsummaryrefslogtreecommitdiff
path: root/src/shared/java/com/amadornes/artifactural/base/cache
diff options
context:
space:
mode:
Diffstat (limited to 'src/shared/java/com/amadornes/artifactural/base/cache')
-rw-r--r--src/shared/java/com/amadornes/artifactural/base/cache/ArtifactCacheBase.java33
-rw-r--r--src/shared/java/com/amadornes/artifactural/base/cache/LocatedArtifactCache.java31
2 files changed, 64 insertions, 0 deletions
diff --git a/src/shared/java/com/amadornes/artifactural/base/cache/ArtifactCacheBase.java b/src/shared/java/com/amadornes/artifactural/base/cache/ArtifactCacheBase.java
new file mode 100644
index 0000000..5f1c240
--- /dev/null
+++ b/src/shared/java/com/amadornes/artifactural/base/cache/ArtifactCacheBase.java
@@ -0,0 +1,33 @@
+package com.amadornes.artifactural.base.cache;
+
+import com.amadornes.artifactural.api.artifact.Artifact;
+import com.amadornes.artifactural.api.cache.ArtifactCache;
+import com.amadornes.artifactural.base.artifact.StreamableArtifact;
+
+import java.io.*;
+
+abstract class ArtifactCacheBase implements ArtifactCache {
+
+ Artifact doStore(File path, Artifact artifact) {
+ return StreamableArtifact.ofStreamable(artifact.getIdentifier(), artifact.getType(), () -> stream(path, artifact))
+ .withMetadata(artifact.getMetadata());
+ }
+
+ private InputStream stream(File path, Artifact artifact) throws IOException {
+ if (!path.exists()) {
+ path.getParentFile().mkdirs();
+ path.createNewFile();
+ FileOutputStream fos = new FileOutputStream(path);
+ InputStream is = artifact.openStream();
+ int read;
+ byte[] bytes = new byte[256];
+ while ((read = is.read(bytes)) > 0) {
+ fos.write(bytes, 0, read);
+ }
+ fos.close();
+ is.close();
+ }
+ return new FileInputStream(path);
+ }
+
+}
diff --git a/src/shared/java/com/amadornes/artifactural/base/cache/LocatedArtifactCache.java b/src/shared/java/com/amadornes/artifactural/base/cache/LocatedArtifactCache.java
new file mode 100644
index 0000000..caa5de7
--- /dev/null
+++ b/src/shared/java/com/amadornes/artifactural/base/cache/LocatedArtifactCache.java
@@ -0,0 +1,31 @@
+package com.amadornes.artifactural.base.cache;
+
+import com.amadornes.artifactural.api.artifact.Artifact;
+import com.amadornes.artifactural.api.artifact.ArtifactIdentifier;
+
+import java.io.File;
+
+public class LocatedArtifactCache extends ArtifactCacheBase {
+
+ private final File path;
+
+ public LocatedArtifactCache(File path) {
+ this.path = path;
+ }
+
+ @Override
+ public Artifact store(Artifact artifact, String specifier) {
+ ArtifactIdentifier identifier = artifact.getIdentifier();
+ File cachePath = new File(path.getAbsolutePath()
+ .replace("${GROUP}", identifier.getGroup())
+ .replace("${NAME}", identifier.getName())
+ .replace("${VERSION}", identifier.getVersion())
+ .replace("${CLASSIFIER}", identifier.getClassifier())
+ .replace("${EXTENSION}", identifier.getExtension())
+ .replace("${SPECIFIER}", specifier)
+ .replace("${META_HASH}", artifact.getMetadata().getHash())
+ );
+ return doStore(cachePath, artifact);
+ }
+
+}