summaryrefslogtreecommitdiffstats
path: root/controller-api
diff options
context:
space:
mode:
authorJon Marius Venstad <jvenstad@yahoo-inc.com>2019-06-19 15:57:28 +0200
committerJon Marius Venstad <jvenstad@yahoo-inc.com>2019-06-19 15:57:28 +0200
commit76c3454dcc9b691149ebfc3910d0b7674f202b15 (patch)
tree342c820fb087fe4faf282d218a6db5cd4cbe0d5d /controller-api
parent24f48cc21f234fedef9d28672b6f00df6aa852c3 (diff)
Skeleton for getting maven artifact metadata from a remote repository
Diffstat (limited to 'controller-api')
-rw-r--r--controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/maven/ArtifactId.java26
-rw-r--r--controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/maven/Metadata.java51
-rw-r--r--controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/maven/Repository.java12
-rw-r--r--controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/stubs/MockRepository.java23
4 files changed, 112 insertions, 0 deletions
diff --git a/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/maven/ArtifactId.java b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/maven/ArtifactId.java
new file mode 100644
index 00000000000..21f38084c22
--- /dev/null
+++ b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/maven/ArtifactId.java
@@ -0,0 +1,26 @@
+package com.yahoo.vespa.hosted.controller.api.integration.maven;
+
+import static java.util.Objects.requireNonNull;
+
+/**
+ * Identifier for an artifact.
+ *
+ * @author jonmv
+ */
+public class ArtifactId {
+
+ private final String groupId;
+ private final String artifactId;
+
+ public ArtifactId(String groupId, String artifactId) {
+ this.groupId = requireNonNull(groupId);
+ this.artifactId = requireNonNull(artifactId);
+ }
+
+ /** Group ID of this. */
+ public String groupId() { return groupId; }
+
+ /** Artifact ID of this. */
+ public String artifactId() { return artifactId; }
+
+}
diff --git a/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/maven/Metadata.java b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/maven/Metadata.java
new file mode 100644
index 00000000000..e837eaf875e
--- /dev/null
+++ b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/maven/Metadata.java
@@ -0,0 +1,51 @@
+package com.yahoo.vespa.hosted.controller.api.integration.maven;
+
+import com.yahoo.component.Version;
+import com.yahoo.text.XML;
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.util.ArrayList;
+import java.util.Comparator;
+import java.util.List;
+import java.util.stream.Collectors;
+
+import static java.util.Objects.requireNonNull;
+
+/**
+ * Metadata about a released artifact.
+ *
+ * @author jonmv
+ */
+public class Metadata {
+
+ private final ArtifactId id;
+ private final List<Version> versions;
+
+ public Metadata(ArtifactId id, List<Version> versions) {
+ this.id = requireNonNull(id);
+ this.versions = versions.stream().sorted().collect(Collectors.toUnmodifiableList());
+ }
+
+ /** Creates a new Metadata object from the given XML document. */
+ public static Metadata fromXml(String xml) {
+ Element root = XML.getDocument(xml).getDocumentElement();
+ Element metadata = XML.getChild(root, "metadata");
+ ArtifactId id = new ArtifactId(XML.getValue(XML.getChild(metadata, "groupId")),
+ XML.getValue(XML.getChild(metadata, "artifactId")));
+ List<Version> versions = new ArrayList<>();
+ for (Element version : XML.getChildren(XML.getChild(metadata, "versioning"), "versions"))
+ versions.add(Version.fromString(XML.getValue(version)));
+
+ return new Metadata(id, versions);
+ }
+
+ /** Id of the metadata this concerns. */
+ public ArtifactId id() { return id; }
+
+ /** List of available versions of this, sorted by ascending version order. */
+ public List<Version> versions() { return versions; }
+
+}
diff --git a/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/maven/Repository.java b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/maven/Repository.java
new file mode 100644
index 00000000000..41a13d41814
--- /dev/null
+++ b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/maven/Repository.java
@@ -0,0 +1,12 @@
+package com.yahoo.vespa.hosted.controller.api.integration.maven;
+
+/**
+ * A Maven repository which keeps released artifacts.
+ *
+ * @author jonmv
+ */
+public interface Repository {
+
+ Metadata getMetadata(ArtifactId id);
+
+}
diff --git a/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/stubs/MockRepository.java b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/stubs/MockRepository.java
new file mode 100644
index 00000000000..9a93cd94aaa
--- /dev/null
+++ b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/stubs/MockRepository.java
@@ -0,0 +1,23 @@
+package com.yahoo.vespa.hosted.controller.api.integration.stubs;
+
+import com.yahoo.component.Version;
+import com.yahoo.vespa.hosted.controller.api.integration.maven.ArtifactId;
+import com.yahoo.vespa.hosted.controller.api.integration.maven.Metadata;
+import com.yahoo.vespa.hosted.controller.api.integration.maven.Repository;
+
+import java.util.List;
+
+/**
+ * Mock repository for maven artifacts, that returns a static metadata.
+ *
+ * @author jonmv
+ */
+public class MockRepository implements Repository {
+
+ @Override
+ public Metadata getMetadata(ArtifactId id) {
+ return new Metadata(id, List.of(Version.fromString("3.2.1"),
+ Version.fromString("1.2.3")));
+ }
+
+}