Repository: camel
Updated Branches:
  refs/heads/master a97db7cd5 -> eb3f69493


CAMEL-10828: camel-catalog-nexus - more work


Project: http://git-wip-us.apache.org/repos/asf/camel/repo
Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/eb3f6949
Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/eb3f6949
Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/eb3f6949

Branch: refs/heads/master
Commit: eb3f694936ca95343ad58cb8376346731c09eba9
Parents: a97db7c
Author: Claus Ibsen <davscl...@apache.org>
Authored: Mon Feb 20 14:53:45 2017 +0100
Committer: Claus Ibsen <davscl...@apache.org>
Committed: Mon Feb 20 14:53:45 2017 +0100

----------------------------------------------------------------------
 platforms/catalog-nexus/pom.xml                 |  7 ++
 .../camel/catalog/nexus/ConnectorDataStore.java | 12 +--
 .../ConnectorDataStoreNexusRepository.java      | 62 ++++++++--------
 .../camel/catalog/nexus/ConnectorDto.java       | 19 ++++-
 .../catalog/nexus/MemoryConnectorDataStore.java | 78 ++++++++++++++++++--
 .../LocalFileConnectorNexusRepository.java      |  5 +-
 6 files changed, 136 insertions(+), 47 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/camel/blob/eb3f6949/platforms/catalog-nexus/pom.xml
----------------------------------------------------------------------
diff --git a/platforms/catalog-nexus/pom.xml b/platforms/catalog-nexus/pom.xml
index bb0d970..071f334 100644
--- a/platforms/catalog-nexus/pom.xml
+++ b/platforms/catalog-nexus/pom.xml
@@ -42,6 +42,13 @@
       <groupId>org.apache.camel</groupId>
       <artifactId>camel-catalog</artifactId>
     </dependency>
+
+    <dependency>
+      <groupId>com.fasterxml.jackson.core</groupId>
+      <artifactId>jackson-databind</artifactId>
+      <version>${jackson2-version}</version>
+    </dependency>
+
     <dependency>
       <groupId>org.slf4j</groupId>
       <artifactId>slf4j-api</artifactId>

http://git-wip-us.apache.org/repos/asf/camel/blob/eb3f6949/platforms/catalog-nexus/src/main/java/org/apache/camel/catalog/nexus/ConnectorDataStore.java
----------------------------------------------------------------------
diff --git 
a/platforms/catalog-nexus/src/main/java/org/apache/camel/catalog/nexus/ConnectorDataStore.java
 
b/platforms/catalog-nexus/src/main/java/org/apache/camel/catalog/nexus/ConnectorDataStore.java
index b1daa7a..e71099d 100644
--- 
a/platforms/catalog-nexus/src/main/java/org/apache/camel/catalog/nexus/ConnectorDataStore.java
+++ 
b/platforms/catalog-nexus/src/main/java/org/apache/camel/catalog/nexus/ConnectorDataStore.java
@@ -21,6 +21,11 @@ import java.util.List;
 public interface ConnectorDataStore {
 
     /**
+     * Number of connectors in the data store.
+     */
+    int size();
+
+    /**
      * Adds a connector to the data store.
      */
     void addConnector(ConnectorDto connector);
@@ -32,11 +37,6 @@ public interface ConnectorDataStore {
      * @param latestVersionOnly to only include the latest version of a given 
Maven <tt>groupId:artifactId</tt>
      * @return the found connectors, or an empty list if none found
      */
-    List<ConnectorDto> searchArtifacts(String filter, boolean 
latestVersionOnly);
-
-    /**
-     * Number of connectors in the data store.
-     */
-    int size();
+    List<ConnectorDto> searchConnectors(String filter, boolean 
latestVersionOnly);
 
 }

http://git-wip-us.apache.org/repos/asf/camel/blob/eb3f6949/platforms/catalog-nexus/src/main/java/org/apache/camel/catalog/nexus/ConnectorDataStoreNexusRepository.java
----------------------------------------------------------------------
diff --git 
a/platforms/catalog-nexus/src/main/java/org/apache/camel/catalog/nexus/ConnectorDataStoreNexusRepository.java
 
b/platforms/catalog-nexus/src/main/java/org/apache/camel/catalog/nexus/ConnectorDataStoreNexusRepository.java
index 3e7426a..b2177b7 100644
--- 
a/platforms/catalog-nexus/src/main/java/org/apache/camel/catalog/nexus/ConnectorDataStoreNexusRepository.java
+++ 
b/platforms/catalog-nexus/src/main/java/org/apache/camel/catalog/nexus/ConnectorDataStoreNexusRepository.java
@@ -20,9 +20,16 @@ import java.io.IOException;
 import java.io.InputStream;
 import java.net.URL;
 import java.net.URLClassLoader;
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
 import java.util.Set;
 
+import com.fasterxml.jackson.databind.JsonNode;
+import com.fasterxml.jackson.databind.ObjectMapper;
 import org.apache.camel.catalog.CatalogHelper;
+import org.apache.camel.catalog.CollectionStringBuffer;
 
 import static org.apache.camel.catalog.CatalogHelper.loadText;
 
@@ -73,13 +80,16 @@ public class ConnectorDataStoreNexusRepository extends 
BaseNexusRepository {
      * Adds the connector to the data store
      *
      * @param dto                 the artifact
-     * @param name                name of connector
+     * @param name                the name of connector
+     * @param description         the description of connector
+     * @param labels              the labels of connector
      * @param connectorJson       camel-connector JSon
      * @param connectorSchemaJson camel-connector-schema JSon
      */
-    protected void addConnector(NexusArtifactDto dto, String name, String 
connectorJson, String connectorSchemaJson) {
+    protected void addConnector(NexusArtifactDto dto, String name, String 
description, String labels,
+                                String connectorJson, String 
connectorSchemaJson) {
         if (connectorDataStore != null) {
-            ConnectorDto connector = new ConnectorDto(dto, name, 
connectorJson, connectorSchemaJson);
+            ConnectorDto connector = new ConnectorDto(dto, name, description, 
labels, connectorJson, connectorSchemaJson);
             log.info("Added connector: {}:{}:{}", dto.getGroupId(), 
dto.getArtifactId(), dto.getVersion());
             connectorDataStore.addConnector(connector);
         }
@@ -92,7 +102,20 @@ public class ConnectorDataStoreNexusRepository extends 
BaseNexusRepository {
         try (URLClassLoader classLoader = new URLClassLoader(new URL[] 
{jarUrl});) {
             String[] json = loadConnectorJSonSchema(classLoader);
             if (json != null) {
-                addConnector(dto, json[0], json[1], json[2]);
+
+                ObjectMapper mapper = new ObjectMapper();
+                JsonNode tree = mapper.readTree(json[0]);
+                String name = tree.get("name").textValue();
+                String description = tree.get("description").textValue();
+                Iterator<JsonNode> it = tree.withArray("labels").iterator();
+
+                CollectionStringBuffer csb = new CollectionStringBuffer(",");
+                while (it.hasNext()) {
+                    String text = it.next().textValue();
+                    csb.append(text);
+                }
+
+                addConnector(dto, name, description, csb.toString(), json[0], 
json[1]);
             }
         } catch (IOException e) {
             log.warn("Error scanning JAR for custom Camel components", e);
@@ -100,13 +123,13 @@ public class ConnectorDataStoreNexusRepository extends 
BaseNexusRepository {
     }
 
     private String[] loadConnectorJSonSchema(URLClassLoader classLoader) {
-        String[] answer = new String[3];
+        String[] answer = new String[2];
 
         String path = "camel-connector.json";
         try {
             InputStream is = classLoader.getResourceAsStream(path);
             if (is != null) {
-                answer[1] = loadText(is);
+                answer[0] = loadText(is);
             }
         } catch (Throwable e) {
             log.warn("Error loading " + path + " file", e);
@@ -116,38 +139,13 @@ public class ConnectorDataStoreNexusRepository extends 
BaseNexusRepository {
         try {
             InputStream is = classLoader.getResourceAsStream(path);
             if (is != null) {
-                answer[2] = loadText(is);
+                answer[1] = loadText(is);
             }
         } catch (Throwable e) {
             log.warn("Error loading " + path + " file", e);
         }
 
-        String name = extractConnectorName(answer[1]);
-        answer[0] = name;
-
         return answer;
     }
 
-    /**
-     * Extracts the name of the connector from the json blob
-     */
-    private static String extractConnectorName(String json) {
-        String[] lines = json.split("\n");
-        for (String line : lines) {
-            line = line.trim();
-            if (line.startsWith("\"name\":")) {
-                String name = CatalogHelper.after(line, ":");
-                if (name != null) {
-                    name = name.trim();
-                    if (name.endsWith(",")) {
-                        // skip last comma
-                        name = name.substring(0, name.length() - 1);
-                    }
-                    return CatalogHelper.removeLeadingAndEndingQuotes(name);
-                }
-            }
-        }
-        return null;
-    }
-
 }

http://git-wip-us.apache.org/repos/asf/camel/blob/eb3f6949/platforms/catalog-nexus/src/main/java/org/apache/camel/catalog/nexus/ConnectorDto.java
----------------------------------------------------------------------
diff --git 
a/platforms/catalog-nexus/src/main/java/org/apache/camel/catalog/nexus/ConnectorDto.java
 
b/platforms/catalog-nexus/src/main/java/org/apache/camel/catalog/nexus/ConnectorDto.java
index 0c66ba8..33bea4a 100644
--- 
a/platforms/catalog-nexus/src/main/java/org/apache/camel/catalog/nexus/ConnectorDto.java
+++ 
b/platforms/catalog-nexus/src/main/java/org/apache/camel/catalog/nexus/ConnectorDto.java
@@ -22,12 +22,17 @@ public class ConnectorDto implements Serializable {
 
     private NexusArtifactDto nexusArtifactDto;
     private String name;
+    private String description;
+    private String labels;
     private String connectorJson;
     private String connectorSchemaJson;
 
-    public ConnectorDto(NexusArtifactDto nexusArtifactDto, String name, String 
connectorJson, String connectorSchemaJson) {
+    public ConnectorDto(NexusArtifactDto nexusArtifactDto, String name, String 
description, String labels,
+                        String connectorJson, String connectorSchemaJson) {
         this.nexusArtifactDto = nexusArtifactDto;
         this.name = name;
+        this.description = description;
+        this.labels = labels;
         this.connectorJson = connectorJson;
         this.connectorSchemaJson = connectorSchemaJson;
     }
@@ -40,6 +45,14 @@ public class ConnectorDto implements Serializable {
         return name;
     }
 
+    public String getDescription() {
+        return description;
+    }
+
+    public String getLabels() {
+        return labels;
+    }
+
     public String getConnectorJson() {
         return connectorJson;
     }
@@ -48,6 +61,10 @@ public class ConnectorDto implements Serializable {
         return connectorSchemaJson;
     }
 
+    public String getMavenGav() {
+        return nexusArtifactDto.getGroupId() + ":" + 
nexusArtifactDto.getArtifactId() + ":" + nexusArtifactDto.getVersion();
+    }
+
     @Override
     public boolean equals(Object o) {
         if (this == o) {

http://git-wip-us.apache.org/repos/asf/camel/blob/eb3f6949/platforms/catalog-nexus/src/main/java/org/apache/camel/catalog/nexus/MemoryConnectorDataStore.java
----------------------------------------------------------------------
diff --git 
a/platforms/catalog-nexus/src/main/java/org/apache/camel/catalog/nexus/MemoryConnectorDataStore.java
 
b/platforms/catalog-nexus/src/main/java/org/apache/camel/catalog/nexus/MemoryConnectorDataStore.java
index e3d5995..5be41b2 100644
--- 
a/platforms/catalog-nexus/src/main/java/org/apache/camel/catalog/nexus/MemoryConnectorDataStore.java
+++ 
b/platforms/catalog-nexus/src/main/java/org/apache/camel/catalog/nexus/MemoryConnectorDataStore.java
@@ -16,8 +16,11 @@
  */
 package org.apache.camel.catalog.nexus;
 
+import java.util.ArrayList;
+import java.util.Comparator;
 import java.util.LinkedHashSet;
 import java.util.List;
+import java.util.Locale;
 import java.util.Set;
 
 /**
@@ -28,17 +31,80 @@ public class MemoryConnectorDataStore implements 
ConnectorDataStore {
     private final Set<ConnectorDto> connectors = new LinkedHashSet<>();
 
     @Override
-    public void addConnector(ConnectorDto connector) {
-        connectors.add(connector);
+    public int size() {
+        return connectors.size();
     }
 
     @Override
-    public List<ConnectorDto> searchArtifacts(String filter, boolean 
latestVersionOnly) {
-        return null;
+    public void addConnector(ConnectorDto connector) {
+        connectors.add(connector);
     }
 
     @Override
-    public int size() {
-        return connectors.size();
+    public List<ConnectorDto> searchConnectors(String filter, boolean 
latestVersionOnly) {
+        List<ConnectorDto> answer = new ArrayList<>();
+
+        if (filter == null || filter.isEmpty()) {
+            // return all of them
+            answer.addAll(connectors);
+        } else {
+            // search ignore case
+            filter = filter.toLowerCase(Locale.US);
+            for (ConnectorDto dto : connectors) {
+                if (dto.getName().toLowerCase(Locale.US).contains(filter)) {
+                    answer.add(dto);
+                } else if 
(dto.getDescription().toLowerCase(Locale.US).contains(filter)) {
+                    answer.add(dto);
+                } else if 
(dto.getNexusArtifactDto().getGroupId().toLowerCase(Locale.US).contains(filter))
 {
+                    answer.add(dto);
+                } else if 
(dto.getNexusArtifactDto().getArtifactId().toLowerCase(Locale.US).contains(filter))
 {
+                    answer.add(dto);
+                } else if 
(dto.getNexusArtifactDto().getVersion().toLowerCase(Locale.US).contains(filter))
 {
+                    answer.add(dto);
+                } else {
+                    String labels = dto.getLabels();
+                    if (labels != null) {
+                        String[] arr = labels.split(",");
+                        for (String lab : arr) {
+                            lab = lab.toLowerCase(Locale.US);
+                            if (lab.contains(filter)) {
+                                answer.add(dto);
+                                break;
+                            }
+                        }
+                    }
+                }
+            }
+        }
+
+        // filter only latest version
+        if (latestVersionOnly && answer.size() > 1) {
+            // sort first
+            answer.sort(Comparator.comparing(ConnectorDto::getMavenGav));
+
+            // keep only latest in each group
+            List<ConnectorDto> unique = new ArrayList<>();
+            ConnectorDto prev = null;
+
+            for (ConnectorDto dto : answer) {
+                if (prev == null
+                    || 
(prev.getNexusArtifactDto().getGroupId().equals(dto.getNexusArtifactDto().getGroupId())
+                        && 
prev.getNexusArtifactDto().getArtifactId().equals(dto.getNexusArtifactDto().getArtifactId()))
 ) {
+                    prev = dto;
+                } else {
+                    unique.add(prev);
+                    prev = dto;
+                }
+            }
+            if (prev != null) {
+                // special for last element
+                unique.add(prev);
+            }
+
+            answer = unique;
+        }
+
+        return answer;
+
     }
 }

http://git-wip-us.apache.org/repos/asf/camel/blob/eb3f6949/platforms/catalog-nexus/src/test/java/org/apache/camel/catalog/nexus/LocalFileConnectorNexusRepository.java
----------------------------------------------------------------------
diff --git 
a/platforms/catalog-nexus/src/test/java/org/apache/camel/catalog/nexus/LocalFileConnectorNexusRepository.java
 
b/platforms/catalog-nexus/src/test/java/org/apache/camel/catalog/nexus/LocalFileConnectorNexusRepository.java
index aa0f93d..2a1ae96 100644
--- 
a/platforms/catalog-nexus/src/test/java/org/apache/camel/catalog/nexus/LocalFileConnectorNexusRepository.java
+++ 
b/platforms/catalog-nexus/src/test/java/org/apache/camel/catalog/nexus/LocalFileConnectorNexusRepository.java
@@ -45,11 +45,12 @@ public class LocalFileConnectorNexusRepository extends 
ConnectorDataStoreNexusRe
     }
 
     @Override
-    protected void addConnector(NexusArtifactDto dto, String name, String 
connectorJson, String connectorSchemaJson) {
-        super.addConnector(dto, name, connectorJson, connectorSchemaJson);
+    protected void addConnector(NexusArtifactDto dto, String name, String 
description, String labels, String connectorJson, String connectorSchemaJson) {
+        super.addConnector(dto, name, description, labels, connectorJson, 
connectorSchemaJson);
 
         if (onAddConnector != null) {
             onAddConnector.run();
         }
     }
+
 }

Reply via email to