This is an automated email from the ASF dual-hosted git repository.

davsclaus pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/camel.git


The following commit(s) were added to refs/heads/main by this push:
     new 47e446b3f69 CAMEL-18206: camel-catalog - Add API to check if an 
artifact exists with a given GAV
47e446b3f69 is described below

commit 47e446b3f69c18bd600b93700507610acf793838
Author: Claus Ibsen <claus.ib...@gmail.com>
AuthorDate: Sat Jun 18 09:42:39 2022 +0200

    CAMEL-18206: camel-catalog - Add API to check if an artifact exists with a 
given GAV
---
 .../org/apache/camel/catalog/CamelCatalog.java     | 13 ++++++++
 .../apache/camel/catalog/DefaultCamelCatalog.java  | 35 ++++++++++++++++++++++
 .../org/apache/camel/catalog/CamelCatalogTest.java | 33 ++++++++++++++++++++
 3 files changed, 81 insertions(+)

diff --git 
a/catalog/camel-catalog/src/main/java/org/apache/camel/catalog/CamelCatalog.java
 
b/catalog/camel-catalog/src/main/java/org/apache/camel/catalog/CamelCatalog.java
index 007cd388e23..ff9bcf1d13c 100644
--- 
a/catalog/camel-catalog/src/main/java/org/apache/camel/catalog/CamelCatalog.java
+++ 
b/catalog/camel-catalog/src/main/java/org/apache/camel/catalog/CamelCatalog.java
@@ -21,6 +21,7 @@ import java.util.List;
 import java.util.Map;
 import java.util.Set;
 
+import org.apache.camel.tooling.model.ArtifactModel;
 import org.apache.camel.tooling.model.BaseModel;
 import org.apache.camel.tooling.model.ComponentModel;
 import org.apache.camel.tooling.model.DataFormatModel;
@@ -536,6 +537,8 @@ public interface CamelCatalog {
     MainModel mainModel();
 
     /**
+     * Lookup the model for the given kind and name
+     *
      * @param  kind the requested kind
      * @param  name the name to look up
      * @return      the requested model or {@code null} in case it is not 
available in this {@link CamelCatalog}
@@ -557,4 +560,14 @@ public interface CamelCatalog {
         }
     }
 
+    /**
+     * Lookup the model for the given Maven GAV
+     *
+     * @param  groupId    maven group id
+     * @param  artifactId maven artifact id
+     * @param  version    maven version (optional)
+     * @return            the requested model or {@code null} in case it is 
not available in this {@link CamelCatalog}
+     */
+    ArtifactModel<?> modelFromMavenGAV(String groupId, String artifactId, 
String version);
+
 }
diff --git 
a/catalog/camel-catalog/src/main/java/org/apache/camel/catalog/DefaultCamelCatalog.java
 
b/catalog/camel-catalog/src/main/java/org/apache/camel/catalog/DefaultCamelCatalog.java
index bfe16c9450b..8791b097985 100644
--- 
a/catalog/camel-catalog/src/main/java/org/apache/camel/catalog/DefaultCamelCatalog.java
+++ 
b/catalog/camel-catalog/src/main/java/org/apache/camel/catalog/DefaultCamelCatalog.java
@@ -43,6 +43,7 @@ import org.w3c.dom.Document;
 
 import org.apache.camel.catalog.impl.AbstractCamelCatalog;
 import org.apache.camel.catalog.impl.CatalogHelper;
+import org.apache.camel.tooling.model.ArtifactModel;
 import org.apache.camel.tooling.model.BaseModel;
 import org.apache.camel.tooling.model.ComponentModel;
 import org.apache.camel.tooling.model.DataFormatModel;
@@ -465,6 +466,40 @@ public class DefaultCamelCatalog extends 
AbstractCamelCatalog implements CamelCa
         });
     }
 
+    @Override
+    public ArtifactModel<?> modelFromMavenGAV(String groupId, String 
artifactId, String version) {
+        for (String name : findComponentNames()) {
+            ArtifactModel<?> am = componentModel(name);
+            if (matchArtifact(am, groupId, artifactId, version)) {
+                return am;
+            }
+        }
+        for (String name : findDataFormatNames()) {
+            ArtifactModel<?> am = dataFormatModel(name);
+            if (matchArtifact(am, groupId, artifactId, version)) {
+                return am;
+            }
+        }
+        for (String name : findLanguageNames()) {
+            ArtifactModel<?> am = languageModel(name);
+            if (matchArtifact(am, groupId, artifactId, version)) {
+                return am;
+            }
+        }
+        for (String name : findOtherNames()) {
+            ArtifactModel<?> am = otherModel(name);
+            if (matchArtifact(am, groupId, artifactId, version)) {
+                return am;
+            }
+        }
+        return null;
+    }
+
+    private static boolean matchArtifact(ArtifactModel<?> am, String groupId, 
String artifactId, String version) {
+        return groupId.equals(am.getGroupId()) && 
artifactId.equals(am.getArtifactId())
+                && (version == null || version.isBlank() || 
version.equals(am.getVersion()));
+    }
+
     private int getArchetypesCount() {
         int archetypes = 0;
         try {
diff --git 
a/catalog/camel-catalog/src/test/java/org/apache/camel/catalog/CamelCatalogTest.java
 
b/catalog/camel-catalog/src/test/java/org/apache/camel/catalog/CamelCatalogTest.java
index 4c6ae210985..407ec076ce2 100644
--- 
a/catalog/camel-catalog/src/test/java/org/apache/camel/catalog/CamelCatalogTest.java
+++ 
b/catalog/camel-catalog/src/test/java/org/apache/camel/catalog/CamelCatalogTest.java
@@ -24,6 +24,12 @@ import java.util.Map;
 
 import com.fasterxml.jackson.databind.JsonNode;
 import com.fasterxml.jackson.databind.ObjectMapper;
+import org.apache.camel.tooling.model.ArtifactModel;
+import org.apache.camel.tooling.model.ComponentModel;
+import org.apache.camel.tooling.model.DataFormatModel;
+import org.apache.camel.tooling.model.LanguageModel;
+import org.apache.camel.tooling.model.OtherModel;
+import org.junit.jupiter.api.Assertions;
 import org.junit.jupiter.api.BeforeAll;
 import org.junit.jupiter.api.Test;
 import org.slf4j.Logger;
@@ -1544,4 +1550,31 @@ public class CamelCatalogTest {
         assertTrue(result.isSuccess());
     }
 
+    @Test
+    public void modelFromMavenGAV() {
+        ArtifactModel<?> am = catalog.modelFromMavenGAV("org.apache.camel", 
"camel-ftp", catalog.getCatalogVersion());
+        Assertions.assertInstanceOf(ComponentModel.class, am);
+        Assertions.assertEquals("Upload and download files to/from FTP 
servers.", am.getDescription());
+
+        am = catalog.modelFromMavenGAV("org.apache.camel", "camel-ognl", 
catalog.getCatalogVersion());
+        Assertions.assertInstanceOf(LanguageModel.class, am);
+        Assertions.assertEquals("Evaluates an OGNL expression (Apache Commons 
OGNL).", am.getDescription());
+
+        am = catalog.modelFromMavenGAV("org.apache.camel", "camel-bindy", 
catalog.getCatalogVersion());
+        Assertions.assertInstanceOf(DataFormatModel.class, am);
+        Assertions.assertEquals("Marshal and unmarshal between POJOs and Comma 
separated values (CSV) format using Camel Bindy",
+                am.getDescription());
+
+        am = catalog.modelFromMavenGAV("org.apache.camel", "camel-zipkin", 
catalog.getCatalogVersion());
+        Assertions.assertInstanceOf(OtherModel.class, am);
+        Assertions.assertEquals("Distributed message tracing using Zipkin", 
am.getDescription());
+
+        am = catalog.modelFromMavenGAV("org.apache.camel", "camel-unknown", 
catalog.getCatalogVersion());
+        Assertions.assertNull(am);
+
+        am = catalog.modelFromMavenGAV("org.apache.camel", "camel-jms", null);
+        Assertions.assertInstanceOf(ComponentModel.class, am);
+        Assertions.assertEquals("Sent and receive messages to/from a JMS Queue 
or Topic.", am.getDescription());
+    }
+
 }

Reply via email to