diff options
Diffstat (limited to 'src/shared/java/com/amadornes/artifactural/base/cache')
| -rw-r--r-- | src/shared/java/com/amadornes/artifactural/base/cache/ArtifactCacheBase.java | 33 | ||||
| -rw-r--r-- | src/shared/java/com/amadornes/artifactural/base/cache/LocatedArtifactCache.java | 31 |
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); + } + +} |
