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

acosentino pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/camel-kafka-connector.git

commit e282796af175ed6cd57d548caa5fcd1ef114dad7
Author: AurĂ©lien Pupier <[email protected]>
AuthorDate: Mon Oct 12 14:57:48 2020 +0200

    Provide API to add connector in Catalog #573
    
    - removed getConnectorAsJson from public API . I'm not sure that it is
    very useful now that we can have the Java model and add a connector. it
    is also simplifying the API to add a connector
    
    Signed-off-by: AurĂ©lien Pupier <[email protected]>
---
 .../catalog/CamelKafkaConnectorCatalog.java        | 28 ++++++++++++----
 .../catalog/CamelKafkaConnectorCatalogTest.java    | 37 ++++++++++++++++++++--
 2 files changed, 56 insertions(+), 9 deletions(-)

diff --git 
a/camel-kafka-connector-catalog/src/main/java/org/apache/camel/kafkaconnector/catalog/CamelKafkaConnectorCatalog.java
 
b/camel-kafka-connector-catalog/src/main/java/org/apache/camel/kafkaconnector/catalog/CamelKafkaConnectorCatalog.java
index b9718b5..65d910f 100644
--- 
a/camel-kafka-connector-catalog/src/main/java/org/apache/camel/kafkaconnector/catalog/CamelKafkaConnectorCatalog.java
+++ 
b/camel-kafka-connector-catalog/src/main/java/org/apache/camel/kafkaconnector/catalog/CamelKafkaConnectorCatalog.java
@@ -39,8 +39,8 @@ import org.slf4j.LoggerFactory;
 
 public class CamelKafkaConnectorCatalog {
 
-    static List<String> connectorsName = new ArrayList<String>();
-    static Map<String, CamelKafkaConnectorModel> connectorsModel = new 
HashMap<String, CamelKafkaConnectorModel>();
+    static List<String> connectorsName = new ArrayList<>();
+    static Map<String, CamelKafkaConnectorModel> connectorsModel = new 
HashMap<>();
     private static final Logger LOG = 
LoggerFactory.getLogger(CamelKafkaConnectorCatalog.class);
     private static final String CONNECTORS_DIR = "connectors";
     private static final String DESCRIPTORS_DIR = "descriptors";
@@ -83,7 +83,7 @@ public class CamelKafkaConnectorCatalog {
         }
     }
 
-    public String getConnectorAsJson(String connectorName) {
+    private String loadConnectorAsJsonFromEmbeddedCatalog(String 
connectorName) {
         String result = null;
         try (InputStream connectorModelInputSream = 
CamelKafkaConnectorCatalog.class.getResourceAsStream(File.separator + 
CONNECTORS_DIR + File.separator + connectorName + ".json")) {
             result = new BufferedReader(new 
InputStreamReader(connectorModelInputSream, StandardCharsets.UTF_8))
@@ -97,8 +97,12 @@ public class CamelKafkaConnectorCatalog {
     }
 
     private CamelKafkaConnectorModel getConnectorModel(String connectorName) {
+        String json = loadConnectorAsJsonFromEmbeddedCatalog(connectorName);
+        return createModel(json);
+    }
+
+    private CamelKafkaConnectorModel createModel(String json) {
         CamelKafkaConnectorModel model = new CamelKafkaConnectorModel();
-        String json = getConnectorAsJson(connectorName);
         JsonObject obj = JsonMapper.deserialize(json);
         JsonObject wrapper = (JsonObject)obj.get("connector");
         model.setConnectorClass((String)wrapper.get("class"));
@@ -106,12 +110,12 @@ public class CamelKafkaConnectorCatalog {
         model.setGroupId((String)wrapper.get("groupId"));
         model.setType((String)wrapper.get("type"));
         model.setVersion((String)wrapper.get("version"));
-        
model.setOptions((List<CamelKafkaConnectorOptionModel>)getConnectorOptionModel(obj));
+        model.setOptions(getConnectorOptionModel(obj));
         return model;
     }
 
     private List<CamelKafkaConnectorOptionModel> 
getConnectorOptionModel(JsonObject obj) {
-        List<CamelKafkaConnectorOptionModel> model = new 
ArrayList<CamelKafkaConnectorOptionModel>();
+        List<CamelKafkaConnectorOptionModel> model = new ArrayList<>();
         JsonObject wrapper = (JsonObject)obj.get("properties");
         Set<String> options = wrapper.keySet();
         for (String string : options) {
@@ -133,4 +137,16 @@ public class CamelKafkaConnectorCatalog {
     public Map<String, CamelKafkaConnectorModel> getConnectorsModel() {
         return connectorsModel;
     }
+
+    /**
+     * Register a new Connector definition in the catalog.
+     * If it already exists, the previous one is overwritten.
+     * 
+     * @param connectorName - the connector name
+     * @param connectorDefinitionAsJson - the definition of the connector 
provided as a String with Json format
+     */
+    public void addConnector(String connectorName, String 
connectorDefinitionAsJson) {
+        connectorsName.add(connectorName);
+        connectorsModel.put(connectorName, 
createModel(connectorDefinitionAsJson));
+    }
 }
diff --git 
a/camel-kafka-connector-catalog/src/test/java/org/apache/camel/kafkaconnector/catalog/CamelKafkaConnectorCatalogTest.java
 
b/camel-kafka-connector-catalog/src/test/java/org/apache/camel/kafkaconnector/catalog/CamelKafkaConnectorCatalogTest.java
index 38dd791..446bc38 100644
--- 
a/camel-kafka-connector-catalog/src/test/java/org/apache/camel/kafkaconnector/catalog/CamelKafkaConnectorCatalogTest.java
+++ 
b/camel-kafka-connector-catalog/src/test/java/org/apache/camel/kafkaconnector/catalog/CamelKafkaConnectorCatalogTest.java
@@ -16,16 +16,16 @@
  */
 package org.apache.camel.kafkaconnector.catalog;
 
+import static org.junit.jupiter.api.Assertions.*;
+
 import java.util.List;
 import java.util.Map;
 
 import org.apache.camel.kafkaconnector.model.CamelKafkaConnectorModel;
+import org.apache.camel.kafkaconnector.model.CamelKafkaConnectorOptionModel;
 import org.junit.jupiter.api.BeforeAll;
 import org.junit.jupiter.api.Test;
 
-import static org.junit.jupiter.api.Assertions.assertEquals;
-import static org.junit.jupiter.api.Assertions.assertTrue;
-
 class CamelKafkaConnectorCatalogTest {
 
     static CamelKafkaConnectorCatalog catalog;
@@ -54,4 +54,35 @@ class CamelKafkaConnectorCatalogTest {
         assertEquals("camel.sink.endpoint.autoCreateBucket", 
model.getOptions().get(2).getName());
     }
 
+    @Test
+    void testAddConnector() throws Exception {
+        String connectorName = "my-test-connector";
+        catalog.addConnector(connectorName, "{\n"
+                + "    \"connector\": {\n"
+                + "        \"class\": 
\"org.apache.camel.kafkaconnector.my-test-connector.TestDemoConnector\",\n"
+                + "        \"artifactId\": 
\"camel-my-test-connector-kafka-connector\",\n"
+                + "        \"groupId\": \"org.apache.camel.kafkaconnector\",\n"
+                + "        \"id\": \"my-test-connector\",\n"
+                + "        \"type\": \"sink\",\n"
+                + "        \"version\": \"0.6.0-SNAPSHOT\"\n"
+                + "    },\n"
+                + "    \"properties\": {\n"
+                + "        \"camel.component.my-test-connector.demo\": {\n"
+                + "            \"name\": 
\"camel.component.my-test-connector.demo\",\n"
+                + "            \"description\": \"A demo description of the 
component\",\n"
+                + "            \"defaultValue\": \"\\\"false\\\"\",\n"
+                + "            \"priority\": \"MEDIUM\"\n"
+                + "        }\n"
+                + "    }\n"
+                + "}\n");
+        
+        assertTrue(catalog.getConnectorsName().contains(connectorName));
+        assertNotNull(catalog.getConnectorsModel().get(connectorName));
+        CamelKafkaConnectorOptionModel camelKafkaConnectorOptionModel = 
catalog.getConnectorsModel().get(connectorName).getOptions().get(0);
+        assertEquals("\"false\"", 
camelKafkaConnectorOptionModel.getDefaultValue());
+        assertEquals("camel.component.my-test-connector.demo", 
camelKafkaConnectorOptionModel.getName());
+        assertEquals("MEDIUM", camelKafkaConnectorOptionModel.getPriority());
+        assertEquals("A demo description of the component", 
camelKafkaConnectorOptionModel.getDescription());
+    }
+
 }

Reply via email to