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." }
+ }
+}
+