You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by da...@apache.org on 2015/12/28 14:05:12 UTC

[5/6] camel git commit: CAMEL-9436: camel-catalog - Make it easy to include extra components

CAMEL-9436: camel-catalog - Make it easy to include extra components


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

Branch: refs/heads/master
Commit: a558dd68c259d1b5d354f99dcec94f64cc960212
Parents: 1741937
Author: Claus Ibsen <da...@apache.org>
Authored: Mon Dec 28 14:04:28 2015 +0100
Committer: Claus Ibsen <da...@apache.org>
Committed: Mon Dec 28 14:04:28 2015 +0100

----------------------------------------------------------------------
 .../org/apache/camel/catalog/CamelCatalog.java  |  8 +++++
 .../camel/catalog/DefaultCamelCatalog.java      | 36 +++++++++++++++++++-
 .../apache/camel/catalog/CamelCatalogTest.java  | 17 +++++++++
 .../resources/org/foo/camel/dummyformat.json    | 21 ++++++++++++
 4 files changed, 81 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/camel/blob/a558dd68/platforms/catalog/src/main/java/org/apache/camel/catalog/CamelCatalog.java
----------------------------------------------------------------------
diff --git a/platforms/catalog/src/main/java/org/apache/camel/catalog/CamelCatalog.java b/platforms/catalog/src/main/java/org/apache/camel/catalog/CamelCatalog.java
index 3844957..5fedead 100644
--- a/platforms/catalog/src/main/java/org/apache/camel/catalog/CamelCatalog.java
+++ b/platforms/catalog/src/main/java/org/apache/camel/catalog/CamelCatalog.java
@@ -49,6 +49,14 @@ public interface CamelCatalog {
     void addComponent(String name, String className);
 
     /**
+     * Adds a 3rd party data format to this catalog.
+     *
+     * @param name      the data format name
+     * @param className the fully qualified class name for the data format class
+     */
+    void addDataFormat(String name, String className);
+
+    /**
      * The version of this Camel Catalog
      */
     String getCatalogVersion();

http://git-wip-us.apache.org/repos/asf/camel/blob/a558dd68/platforms/catalog/src/main/java/org/apache/camel/catalog/DefaultCamelCatalog.java
----------------------------------------------------------------------
diff --git a/platforms/catalog/src/main/java/org/apache/camel/catalog/DefaultCamelCatalog.java b/platforms/catalog/src/main/java/org/apache/camel/catalog/DefaultCamelCatalog.java
index e1a1622..dc23d3b 100644
--- a/platforms/catalog/src/main/java/org/apache/camel/catalog/DefaultCamelCatalog.java
+++ b/platforms/catalog/src/main/java/org/apache/camel/catalog/DefaultCamelCatalog.java
@@ -76,8 +76,9 @@ public class DefaultCamelCatalog implements CamelCatalog {
 
     private final VersionHelper version = new VersionHelper();
 
-    // 3rd party components
+    // 3rd party components/data-formats
     private final Map<String, String> extraComponents = new HashMap<String, String>();
+    private final Map<String, String> extraDataFormats = new HashMap<String, String>();
 
     // cache of operation -> result
     private final Map<String, Object> cache = new HashMap<String, Object>();
@@ -120,6 +121,15 @@ public class DefaultCamelCatalog implements CamelCatalog {
     }
 
     @Override
+    public void addDataFormat(String name, String className) {
+        extraDataFormats.put(name, className);
+        // invalidate the cache
+        cache.remove("findDataFormatNames");
+        cache.remove("findDataFormatLabels");
+        cache.remove("listDataFormatsAsJson");
+    }
+
+    @Override
     public String getCatalogVersion() {
         return version.getVersion();
     }
@@ -175,6 +185,14 @@ public class DefaultCamelCatalog implements CamelCatalog {
                     // ignore
                 }
             }
+
+            // include third party data formats
+            for (Map.Entry<String, String> entry : extraDataFormats.entrySet()) {
+                names.add(entry.getKey());
+            }
+            // sort the names
+            Collections.sort(names);
+
             if (caching) {
                 cache.put("findDataFormatNames", names);
             }
@@ -441,6 +459,22 @@ public class DefaultCamelCatalog implements CamelCatalog {
                 } catch (IOException e) {
                     // ignore
                 }
+            } else {
+                // its maybe a third party so try load it
+                String className = extraDataFormats.get(name);
+                if (className != null) {
+                    String packageName = className.substring(0, className.lastIndexOf('.'));
+                    packageName = packageName.replace('.', '/');
+                    String path = packageName + "/" + name + ".json";
+                    is = DefaultCamelCatalog.class.getClassLoader().getResourceAsStream(path);
+                    if (is != null) {
+                        try {
+                            answer = CatalogHelper.loadText(is);
+                        } catch (IOException e) {
+                            // ignore
+                        }
+                    }
+                }
             }
             if (caching) {
                 cache.put(file, answer);

http://git-wip-us.apache.org/repos/asf/camel/blob/a558dd68/platforms/catalog/src/test/java/org/apache/camel/catalog/CamelCatalogTest.java
----------------------------------------------------------------------
diff --git a/platforms/catalog/src/test/java/org/apache/camel/catalog/CamelCatalogTest.java b/platforms/catalog/src/test/java/org/apache/camel/catalog/CamelCatalogTest.java
index 43fc24d..a9bdeff 100644
--- a/platforms/catalog/src/test/java/org/apache/camel/catalog/CamelCatalogTest.java
+++ b/platforms/catalog/src/test/java/org/apache/camel/catalog/CamelCatalogTest.java
@@ -549,4 +549,21 @@ public class CamelCatalogTest {
         assertNotNull(tree);
     }
 
+    @Test
+    public void testAddDataFormat() throws Exception {
+        assertFalse(catalog.findDataFormatNames().contains("dummyformat"));
+
+        catalog.addDataFormat("dummyformat", "org.foo.camel.DummyDataFormat");
+
+        assertTrue(catalog.findDataFormatNames().contains("dummyformat"));
+
+        String json = catalog.dataFormatJSonSchema("dummyformat");
+        assertNotNull(json);
+
+        // validate we can parse the json
+        ObjectMapper mapper = new ObjectMapper();
+        JsonNode tree = mapper.readTree(json);
+        assertNotNull(tree);
+    }
+
 }

http://git-wip-us.apache.org/repos/asf/camel/blob/a558dd68/platforms/catalog/src/test/resources/org/foo/camel/dummyformat.json
----------------------------------------------------------------------
diff --git a/platforms/catalog/src/test/resources/org/foo/camel/dummyformat.json b/platforms/catalog/src/test/resources/org/foo/camel/dummyformat.json
new file mode 100644
index 0000000..b297f74
--- /dev/null
+++ b/platforms/catalog/src/test/resources/org/foo/camel/dummyformat.json
@@ -0,0 +1,21 @@
+{
+  "dataformat": {
+    "name": "dummyformat",
+    "kind": "dataformat",
+    "modelName": "dummyformat",
+    "title": "DummyFormat",
+    "description": "Camel dummy data format support",
+    "label": "dataformat,transformation",
+    "javaType": "org.foo.camel.DummyDataFormat",
+    "groupId": "org.foo.camel",
+    "artifactId": "dummy",
+    "version": "1.0"
+  },
+  "properties": {
+    "lineLength": { "kind": "attribute", "required": "false", "type": "integer", "javaType": "java.lang.Integer", "deprecated": "false", "defaultValue": "76", "description": "To specific a maximum line length for the encoded data. By default 76 is used." },
+    "lineSeparator": { "kind": "attribute", "required": "false", "type": "string", "javaType": "java.lang.String", "deprecated": "false", "defaultValue": "\r\n", "description": "The line separators to use. By default \r\n is used." },
+    "urlSafe": { "kind": "attribute", "required": "false", "type": "boolean", "javaType": "java.lang.Boolean", "deprecated": "false", "defaultValue": "false", "description": "Instead of emitting '' and '/' we emit '-' and '_' respectively. urlSafe is only applied to encode operations. Decoding seamlessly handles both modes. Is by default false." },
+    "id": { "kind": "attribute", "required": "false", "type": "string", "javaType": "java.lang.String", "deprecated": "false", "description": "Sets the value of the id property." }
+  }
+}
+