aboutsummaryrefslogtreecommitdiff
path: root/src/api
diff options
context:
space:
mode:
authorAmadornes <amadornes@gmail.com>2018-07-02 07:12:27 +0200
committerAmadornes <amadornes@gmail.com>2018-07-02 07:12:27 +0200
commit92b2a6669392bd410e9a60749656a49f3e309cc0 (patch)
treecae858e8f371018771f84afeef6ae059d8910e0d /src/api
parent4ffefc5676def5855d91dffa0d089fe5402364fa (diff)
downloadArtifactural-92b2a6669392bd410e9a60749656a49f3e309cc0.tar.gz
Artifactural-92b2a6669392bd410e9a60749656a49f3e309cc0.tar.bz2
Artifactural-92b2a6669392bd410e9a60749656a49f3e309cc0.zip
Initial (untested) version of Artifactural
Diffstat (limited to 'src/api')
-rw-r--r--src/api/java/com/amadornes/artifactural/api/artifact/Artifact.java35
-rw-r--r--src/api/java/com/amadornes/artifactural/api/artifact/ArtifactIdentifier.java61
-rw-r--r--src/api/java/com/amadornes/artifactural/api/artifact/ArtifactMetadata.java13
-rw-r--r--src/api/java/com/amadornes/artifactural/api/artifact/ArtifactType.java5
-rw-r--r--src/api/java/com/amadornes/artifactural/api/artifact/Internal.java84
-rw-r--r--src/api/java/com/amadornes/artifactural/api/artifact/MissingArtifactException.java9
-rw-r--r--src/api/java/com/amadornes/artifactural/api/artifact/Streamable.java11
-rw-r--r--src/api/java/com/amadornes/artifactural/api/cache/ArtifactCache.java9
-rw-r--r--src/api/java/com/amadornes/artifactural/api/repository/ArtifactProvider.java28
-rw-r--r--src/api/java/com/amadornes/artifactural/api/repository/Repository.java10
-rw-r--r--src/api/java/com/amadornes/artifactural/api/transform/ArtifactPipeline.java11
-rw-r--r--src/api/java/com/amadornes/artifactural/api/transform/ArtifactTransformer.java54
12 files changed, 330 insertions, 0 deletions
diff --git a/src/api/java/com/amadornes/artifactural/api/artifact/Artifact.java b/src/api/java/com/amadornes/artifactural/api/artifact/Artifact.java
new file mode 100644
index 0000000..c82bbd9
--- /dev/null
+++ b/src/api/java/com/amadornes/artifactural/api/artifact/Artifact.java
@@ -0,0 +1,35 @@
+package com.amadornes.artifactural.api.artifact;
+
+import com.amadornes.artifactural.api.cache.ArtifactCache;
+import com.amadornes.artifactural.api.transform.ArtifactTransformer;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.net.URL;
+import java.util.function.UnaryOperator;
+
+public interface Artifact {
+
+ static Artifact none() {
+ return Internal.NO_ARTIFACT;
+ }
+
+ ArtifactIdentifier getIdentifier();
+
+ ArtifactMetadata getMetadata();
+
+ ArtifactType getType();
+
+ Artifact withMetadata(ArtifactMetadata metadata);
+
+ Artifact apply(ArtifactTransformer transformer);
+
+ Artifact cache(ArtifactCache cache, String specifier);
+
+ boolean isPresent();
+
+ InputStream openStream() throws IOException, MissingArtifactException;
+
+}
diff --git a/src/api/java/com/amadornes/artifactural/api/artifact/ArtifactIdentifier.java b/src/api/java/com/amadornes/artifactural/api/artifact/ArtifactIdentifier.java
new file mode 100644
index 0000000..57c263a
--- /dev/null
+++ b/src/api/java/com/amadornes/artifactural/api/artifact/ArtifactIdentifier.java
@@ -0,0 +1,61 @@
+package com.amadornes.artifactural.api.artifact;
+
+import java.util.function.Predicate;
+
+public interface ArtifactIdentifier {
+
+ static ArtifactIdentifier none() {
+ return Internal.NO_IDENTIFIER;
+ }
+
+ String getGroup();
+
+ String getName();
+
+ String getVersion();
+
+ String getClassifier();
+
+ String getExtension();
+
+ static Predicate<ArtifactIdentifier> groupMatches(String group) {
+ return identifier -> identifier.getGroup().matches(group);
+ }
+
+ static Predicate<ArtifactIdentifier> nameMatches(String name) {
+ return identifier -> identifier.getName().matches(name);
+ }
+
+ static Predicate<ArtifactIdentifier> versionMatches(String version) {
+ return identifier -> identifier.getVersion().matches(version);
+ }
+
+ static Predicate<ArtifactIdentifier> classifierMatches(String classifier) {
+ return identifier -> identifier.getClassifier().matches(classifier);
+ }
+
+ static Predicate<ArtifactIdentifier> extensionMatches(String extension) {
+ return identifier -> identifier.getExtension().matches(extension);
+ }
+
+ static Predicate<ArtifactIdentifier> groupEquals(String group) {
+ return identifier -> identifier.getGroup().equals(group);
+ }
+
+ static Predicate<ArtifactIdentifier> nameEquals(String name) {
+ return identifier -> identifier.getName().equals(name);
+ }
+
+ static Predicate<ArtifactIdentifier> versionEquals(String version) {
+ return identifier -> identifier.getVersion().equals(version);
+ }
+
+ static Predicate<ArtifactIdentifier> classifierEquals(String classifier) {
+ return identifier -> identifier.getClassifier().equals(classifier);
+ }
+
+ static Predicate<ArtifactIdentifier> extensionEquals(String extension) {
+ return identifier -> identifier.getExtension().equals(extension);
+ }
+
+}
diff --git a/src/api/java/com/amadornes/artifactural/api/artifact/ArtifactMetadata.java b/src/api/java/com/amadornes/artifactural/api/artifact/ArtifactMetadata.java
new file mode 100644
index 0000000..1dcd838
--- /dev/null
+++ b/src/api/java/com/amadornes/artifactural/api/artifact/ArtifactMetadata.java
@@ -0,0 +1,13 @@
+package com.amadornes.artifactural.api.artifact;
+
+public interface ArtifactMetadata {
+
+ static ArtifactMetadata empty() {
+ return (ArtifactMetadata) null;
+ }
+
+ ArtifactMetadata with(String key, String value);
+
+ String getHash();
+
+}
diff --git a/src/api/java/com/amadornes/artifactural/api/artifact/ArtifactType.java b/src/api/java/com/amadornes/artifactural/api/artifact/ArtifactType.java
new file mode 100644
index 0000000..1bd0f97
--- /dev/null
+++ b/src/api/java/com/amadornes/artifactural/api/artifact/ArtifactType.java
@@ -0,0 +1,5 @@
+package com.amadornes.artifactural.api.artifact;
+
+public enum ArtifactType {
+ BINARY, SOURCE, OTHER
+}
diff --git a/src/api/java/com/amadornes/artifactural/api/artifact/Internal.java b/src/api/java/com/amadornes/artifactural/api/artifact/Internal.java
new file mode 100644
index 0000000..41201df
--- /dev/null
+++ b/src/api/java/com/amadornes/artifactural/api/artifact/Internal.java
@@ -0,0 +1,84 @@
+package com.amadornes.artifactural.api.artifact;
+
+import com.amadornes.artifactural.api.cache.ArtifactCache;
+import com.amadornes.artifactural.api.transform.ArtifactTransformer;
+
+import java.io.IOException;
+import java.io.InputStream;
+
+class Internal {
+
+ static final ArtifactIdentifier NO_IDENTIFIER = new ArtifactIdentifier() {
+
+ @Override
+ public String getGroup() {
+ return "missing";
+ }
+
+ @Override
+ public String getName() {
+ return "missing";
+ }
+
+ @Override
+ public String getVersion() {
+ return "0.0.0";
+ }
+
+ @Override
+ public String getClassifier() {
+ return "";
+ }
+
+ @Override
+ public String getExtension() {
+ return "missing";
+ }
+
+ };
+
+ static final Artifact NO_ARTIFACT = new Artifact() {
+
+ @Override
+ public ArtifactIdentifier getIdentifier() {
+ return ArtifactIdentifier.none();
+ }
+
+ @Override
+ public ArtifactMetadata getMetadata() {
+ return ArtifactMetadata.empty();
+ }
+
+ @Override
+ public ArtifactType getType() {
+ return ArtifactType.OTHER;
+ }
+
+ @Override
+ public Artifact withMetadata(ArtifactMetadata metadata) {
+ return this;
+ }
+
+ @Override
+ public Artifact apply(ArtifactTransformer transformer) {
+ return this;
+ }
+
+ @Override
+ public Artifact cache(ArtifactCache cache, String specifier) {
+ return this;
+ }
+
+ @Override
+ public boolean isPresent() {
+ return false;
+ }
+
+ @Override
+ public InputStream openStream() throws MissingArtifactException {
+ throw new MissingArtifactException(getIdentifier());
+ }
+
+ };
+
+}
diff --git a/src/api/java/com/amadornes/artifactural/api/artifact/MissingArtifactException.java b/src/api/java/com/amadornes/artifactural/api/artifact/MissingArtifactException.java
new file mode 100644
index 0000000..479909c
--- /dev/null
+++ b/src/api/java/com/amadornes/artifactural/api/artifact/MissingArtifactException.java
@@ -0,0 +1,9 @@
+package com.amadornes.artifactural.api.artifact;
+
+public class MissingArtifactException extends RuntimeException {
+
+ public MissingArtifactException(ArtifactIdentifier identifier) {
+ super("Could not find artifact: " + identifier);
+ }
+
+}
diff --git a/src/api/java/com/amadornes/artifactural/api/artifact/Streamable.java b/src/api/java/com/amadornes/artifactural/api/artifact/Streamable.java
new file mode 100644
index 0000000..1b7de8f
--- /dev/null
+++ b/src/api/java/com/amadornes/artifactural/api/artifact/Streamable.java
@@ -0,0 +1,11 @@
+package com.amadornes.artifactural.api.artifact;
+
+import java.io.IOException;
+import java.io.InputStream;
+
+@FunctionalInterface
+public interface Streamable {
+
+ InputStream openStream() throws IOException;
+
+}
diff --git a/src/api/java/com/amadornes/artifactural/api/cache/ArtifactCache.java b/src/api/java/com/amadornes/artifactural/api/cache/ArtifactCache.java
new file mode 100644
index 0000000..4f86798
--- /dev/null
+++ b/src/api/java/com/amadornes/artifactural/api/cache/ArtifactCache.java
@@ -0,0 +1,9 @@
+package com.amadornes.artifactural.api.cache;
+
+import com.amadornes.artifactural.api.artifact.Artifact;
+
+public interface ArtifactCache {
+
+ Artifact store(Artifact artifact, String specifier);
+
+}
diff --git a/src/api/java/com/amadornes/artifactural/api/repository/ArtifactProvider.java b/src/api/java/com/amadornes/artifactural/api/repository/ArtifactProvider.java
new file mode 100644
index 0000000..c9f21ee
--- /dev/null
+++ b/src/api/java/com/amadornes/artifactural/api/repository/ArtifactProvider.java
@@ -0,0 +1,28 @@
+package com.amadornes.artifactural.api.repository;
+
+import com.amadornes.artifactural.api.artifact.Artifact;
+
+import java.util.function.Function;
+import java.util.function.Predicate;
+
+public interface ArtifactProvider<I> {
+
+ Artifact getArtifact(I info);
+
+ interface Builder<S, I> {
+
+ Builder<S, I> filter(Predicate<I> filter);
+
+ <D> Builder<S, D> mapInfo(Function<I, D> mapper);
+
+ Complete<S, I> provide(ArtifactProvider<I> provider);
+
+ interface Complete<S, I> extends ArtifactProvider<S> {
+
+ Complete<S, I> provide(ArtifactProvider<I> provider);
+
+ }
+
+ }
+
+}
diff --git a/src/api/java/com/amadornes/artifactural/api/repository/Repository.java b/src/api/java/com/amadornes/artifactural/api/repository/Repository.java
new file mode 100644
index 0000000..3cf456d
--- /dev/null
+++ b/src/api/java/com/amadornes/artifactural/api/repository/Repository.java
@@ -0,0 +1,10 @@
+package com.amadornes.artifactural.api.repository;
+
+import com.amadornes.artifactural.api.artifact.Artifact;
+import com.amadornes.artifactural.api.artifact.ArtifactIdentifier;
+
+public interface Repository {
+
+ Artifact getArtifact(ArtifactIdentifier identifier);
+
+}
diff --git a/src/api/java/com/amadornes/artifactural/api/transform/ArtifactPipeline.java b/src/api/java/com/amadornes/artifactural/api/transform/ArtifactPipeline.java
new file mode 100644
index 0000000..014046f
--- /dev/null
+++ b/src/api/java/com/amadornes/artifactural/api/transform/ArtifactPipeline.java
@@ -0,0 +1,11 @@
+package com.amadornes.artifactural.api.transform;
+
+import com.amadornes.artifactural.api.cache.ArtifactCache;
+
+public interface ArtifactPipeline extends ArtifactTransformer {
+
+ ArtifactPipeline apply(ArtifactTransformer transformer);
+
+ ArtifactPipeline cache(ArtifactCache cache, String specifier);
+
+}
diff --git a/src/api/java/com/amadornes/artifactural/api/transform/ArtifactTransformer.java b/src/api/java/com/amadornes/artifactural/api/transform/ArtifactTransformer.java
new file mode 100644
index 0000000..e24e790
--- /dev/null
+++ b/src/api/java/com/amadornes/artifactural/api/transform/ArtifactTransformer.java
@@ -0,0 +1,54 @@
+package com.amadornes.artifactural.api.transform;
+
+import com.amadornes.artifactural.api.artifact.Artifact;
+import com.amadornes.artifactural.api.artifact.ArtifactMetadata;
+
+import java.util.Set;
+import java.util.function.UnaryOperator;
+
+public interface ArtifactTransformer {
+
+ static ArtifactTransformer of(UnaryOperator<Artifact> operator) {
+ return new ArtifactTransformer() {
+ @Override
+ public Artifact transform(Artifact artifact) {
+ return operator.apply(artifact);
+ }
+
+ @Override
+ public ArtifactMetadata withInfo(ArtifactMetadata metadata) {
+ return metadata;
+ }
+ };
+ }
+
+ static ArtifactTransformer exclude(Set<String> filters) {
+ return (ArtifactTransformer) new Object();
+ }
+
+ default boolean appliesTo(Artifact artifact) {
+ return true;
+ }
+
+ Artifact transform(Artifact artifact);
+
+ ArtifactMetadata withInfo(ArtifactMetadata metadata);
+
+ default ArtifactTransformer andThen(ArtifactTransformer other) {
+ ArtifactTransformer current = this;
+ return new ArtifactTransformer() {
+
+ @Override
+ public Artifact transform(Artifact artifact) {
+ return other.transform(current.transform(artifact));
+ }
+
+ @Override
+ public ArtifactMetadata withInfo(ArtifactMetadata metadata) {
+ return other.withInfo(current.withInfo(metadata));
+ }
+
+ };
+ }
+
+}