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 2016/11/07 14:17:24 UTC
[3/5] camel git commit: CAMEL-10434: Camel catalog support different
runtimes to provide their supported list of components etc.
CAMEL-10434: Camel catalog support different runtimes to provide their supported list of components etc.
Project: http://git-wip-us.apache.org/repos/asf/camel/repo
Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/7581f9e8
Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/7581f9e8
Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/7581f9e8
Branch: refs/heads/master
Commit: 7581f9e89279aaf43e009215f8da161801985df0
Parents: 10c2e35
Author: Claus Ibsen <da...@apache.org>
Authored: Mon Nov 7 12:58:17 2016 +0100
Committer: Claus Ibsen <da...@apache.org>
Committed: Mon Nov 7 14:22:49 2016 +0100
----------------------------------------------------------------------
.../org/apache/camel/catalog/CamelCatalog.java | 11 +++
.../camel/catalog/DefaultCamelCatalog.java | 46 ++++-------
.../camel/catalog/DefaultRuntimeProvider.java | 87 ++++++++++++++++++++
.../apache/camel/catalog/RuntimeProvider.java | 53 ++++++++++++
4 files changed, 167 insertions(+), 30 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/camel/blob/7581f9e8/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 5ee8714..426cd02 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
@@ -29,6 +29,17 @@ import javax.management.MXBean;
public interface CamelCatalog {
/**
+ * To plugin a custom {@link RuntimeProvider} that amends the catalog to only include information that is supported on the runtime.
+ */
+ void setRuntimeProvider(RuntimeProvider provider);
+
+ /**
+ * Gets the {@link RuntimeProvider} in use.
+ * @return
+ */
+ RuntimeProvider getRuntimeProvider();
+
+ /**
* Enables caching of the resources which makes the catalog faster, but keeps data in memory during caching.
* <p/>
* The catalog does not cache by default.
http://git-wip-us.apache.org/repos/asf/camel/blob/7581f9e8/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 6f723b4..33ffccf 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
@@ -73,9 +73,6 @@ public class DefaultCamelCatalog implements CamelCatalog {
// CHECKSTYLE:OFF
private static final String MODELS_CATALOG = "org/apache/camel/catalog/models.properties";
- private static final String COMPONENTS_CATALOG = "org/apache/camel/catalog/components.properties";
- private static final String DATA_FORMATS_CATALOG = "org/apache/camel/catalog/dataformats.properties";
- private static final String LANGUAGE_CATALOG = "org/apache/camel/catalog/languages.properties";
private static final String MODEL_DIR = "org/apache/camel/catalog/models";
private static final String COMPONENT_DIR = "org/apache/camel/catalog/components";
private static final String DATAFORMAT_DIR = "org/apache/camel/catalog/dataformats";
@@ -100,6 +97,7 @@ public class DefaultCamelCatalog implements CamelCatalog {
private boolean caching;
private SuggestionStrategy suggestionStrategy;
private VersionManager versionManager = new DefaultVersionManager(this);
+ private RuntimeProvider runtimeProvider = new DefaultRuntimeProvider(this);
/**
* Creates the {@link CamelCatalog} without caching enabled.
@@ -117,10 +115,21 @@ public class DefaultCamelCatalog implements CamelCatalog {
}
@Override
+ public RuntimeProvider getRuntimeProvider() {
+ return runtimeProvider;
+ }
+
+ @Override
+ public void setRuntimeProvider(RuntimeProvider runtimeProvider) {
+ this.runtimeProvider = runtimeProvider;
+ }
+
+ @Override
public void enableCache() {
caching = true;
}
+ @Override
public boolean isCaching() {
return caching;
}
@@ -210,15 +219,7 @@ public class DefaultCamelCatalog implements CamelCatalog {
}
if (names == null) {
- names = new ArrayList<String>();
- InputStream is = versionManager.getResourceAsStream(COMPONENTS_CATALOG);
- if (is != null) {
- try {
- CatalogHelper.loadLines(is, names);
- } catch (IOException e) {
- // ignore
- }
- }
+ names = runtimeProvider.findComponentNames();
// include third party components
for (Map.Entry<String, String> entry : extraComponents.entrySet()) {
@@ -243,15 +244,7 @@ public class DefaultCamelCatalog implements CamelCatalog {
}
if (names == null) {
- names = new ArrayList<String>();
- InputStream is = versionManager.getResourceAsStream(DATA_FORMATS_CATALOG);
- if (is != null) {
- try {
- CatalogHelper.loadLines(is, names);
- } catch (IOException e) {
- // ignore
- }
- }
+ names = runtimeProvider.findDataFormatNames();
// include third party data formats
for (Map.Entry<String, String> entry : extraDataFormats.entrySet()) {
@@ -276,15 +269,8 @@ public class DefaultCamelCatalog implements CamelCatalog {
}
if (names == null) {
- names = new ArrayList<String>();
- InputStream is = versionManager.getResourceAsStream(LANGUAGE_CATALOG);
- if (is != null) {
- try {
- CatalogHelper.loadLines(is, names);
- } catch (IOException e) {
- // ignore
- }
- }
+ names = runtimeProvider.findLanguageNames();
+
if (caching) {
cache.put("findLanguageNames", names);
}
http://git-wip-us.apache.org/repos/asf/camel/blob/7581f9e8/platforms/catalog/src/main/java/org/apache/camel/catalog/DefaultRuntimeProvider.java
----------------------------------------------------------------------
diff --git a/platforms/catalog/src/main/java/org/apache/camel/catalog/DefaultRuntimeProvider.java b/platforms/catalog/src/main/java/org/apache/camel/catalog/DefaultRuntimeProvider.java
new file mode 100644
index 0000000..f3e97d7
--- /dev/null
+++ b/platforms/catalog/src/main/java/org/apache/camel/catalog/DefaultRuntimeProvider.java
@@ -0,0 +1,87 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * <p>
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * <p>
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.catalog;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.ArrayList;
+import java.util.List;
+
+public class DefaultRuntimeProvider implements RuntimeProvider {
+
+ private static final String COMPONENTS_CATALOG = "org/apache/camel/catalog/components.properties";
+ private static final String DATA_FORMATS_CATALOG = "org/apache/camel/catalog/dataformats.properties";
+ private static final String LANGUAGE_CATALOG = "org/apache/camel/catalog/languages.properties";
+
+ private final CamelCatalog camelCatalog;
+
+ public DefaultRuntimeProvider(CamelCatalog camelCatalog) {
+ this.camelCatalog = camelCatalog;
+ }
+
+ @Override
+ public CamelCatalog getCamelCatalog() {
+ return camelCatalog;
+ }
+
+ @Override
+ public String getProviderName() {
+ return "default";
+ }
+
+ @Override
+ public List<String> findComponentNames() {
+ List<String> names = new ArrayList<String>();
+ InputStream is = camelCatalog.getVersionManager().getResourceAsStream(COMPONENTS_CATALOG);
+ if (is != null) {
+ try {
+ CatalogHelper.loadLines(is, names);
+ } catch (IOException e) {
+ // ignore
+ }
+ }
+ return names;
+ }
+
+ @Override
+ public List<String> findDataFormatNames() {
+ List<String> names = new ArrayList<String>();
+ InputStream is = camelCatalog.getVersionManager().getResourceAsStream(DATA_FORMATS_CATALOG);
+ if (is != null) {
+ try {
+ CatalogHelper.loadLines(is, names);
+ } catch (IOException e) {
+ // ignore
+ }
+ }
+ return names;
+ }
+
+ @Override
+ public List<String> findLanguageNames() {
+ List<String> names = new ArrayList<String>();
+ InputStream is = camelCatalog.getVersionManager().getResourceAsStream(LANGUAGE_CATALOG);
+ if (is != null) {
+ try {
+ CatalogHelper.loadLines(is, names);
+ } catch (IOException e) {
+ // ignore
+ }
+ }
+ return names;
+ }
+}
http://git-wip-us.apache.org/repos/asf/camel/blob/7581f9e8/platforms/catalog/src/main/java/org/apache/camel/catalog/RuntimeProvider.java
----------------------------------------------------------------------
diff --git a/platforms/catalog/src/main/java/org/apache/camel/catalog/RuntimeProvider.java b/platforms/catalog/src/main/java/org/apache/camel/catalog/RuntimeProvider.java
new file mode 100644
index 0000000..f3e8744
--- /dev/null
+++ b/platforms/catalog/src/main/java/org/apache/camel/catalog/RuntimeProvider.java
@@ -0,0 +1,53 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * <p>
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * <p>
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.catalog;
+
+import java.util.List;
+
+/**
+ * A pluggable strategy for chosen runtime to run Camel such as default, karaf, spring-boot, etc.
+ * This allows third party runtimes to provide their own provider, that can amend the catalog
+ * to match the runtime. For example spring-boot or karaf does not support all the default Camel components.
+ */
+public interface RuntimeProvider {
+
+ /**
+ * Gets the {@link CamelCatalog}
+ */
+ CamelCatalog getCamelCatalog();
+
+ /**
+ * Name of provider such as <tt>default</tt>, <tt>karaf</tt>, <tt>spring-boot</tt>
+ */
+ String getProviderName();
+
+ /**
+ * Find all the component names from the Camel catalog supported by the provider
+ */
+ List<String> findComponentNames();
+
+ /**
+ * Find all the data format names from the Camel catalog supported by the provider
+ */
+ List<String> findDataFormatNames();
+
+ /**
+ * Find all the language names from the Camel catalog supported by the provider
+ */
+ List<String> findLanguageNames();
+
+}