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/84a5a6e2 Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/84a5a6e2 Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/84a5a6e2 Branch: refs/heads/camel-2.18.x Commit: 84a5a6e2fa268a93f8df4355552c070ed81db5fc Parents: 473d90a Author: Claus Ibsen <davscl...@apache.org> Authored: Mon Nov 7 16:05:18 2016 +0100 Committer: Claus Ibsen <davscl...@apache.org> Committed: Mon Nov 7 16:46:52 2016 +0100 ---------------------------------------------------------------------- .../catalog/karaf/KarafRuntimeProvider.java | 18 ++++++ .../springboot/SpringBootRuntimeProvider.java | 18 ++++++ .../SpringBootRuntimeProviderTest.java | 24 ++++++++ .../camel/catalog/DefaultCamelCatalog.java | 9 +-- .../camel/catalog/DefaultRuntimeProvider.java | 18 ++++++ .../apache/camel/catalog/RuntimeProvider.java | 20 +++++-- .../packaging/PrepareCatalogSpringBootMojo.java | 63 +++++++++++++++----- 7 files changed, 144 insertions(+), 26 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/camel/blob/84a5a6e2/platforms/catalog-provider-karaf/src/main/java/org/apache/camel/catalog/karaf/KarafRuntimeProvider.java ---------------------------------------------------------------------- diff --git a/platforms/catalog-provider-karaf/src/main/java/org/apache/camel/catalog/karaf/KarafRuntimeProvider.java b/platforms/catalog-provider-karaf/src/main/java/org/apache/camel/catalog/karaf/KarafRuntimeProvider.java index 67c80c3..86811e4 100644 --- a/platforms/catalog-provider-karaf/src/main/java/org/apache/camel/catalog/karaf/KarafRuntimeProvider.java +++ b/platforms/catalog-provider-karaf/src/main/java/org/apache/camel/catalog/karaf/KarafRuntimeProvider.java @@ -31,6 +31,9 @@ import org.apache.camel.catalog.RuntimeProvider; */ public class KarafRuntimeProvider implements RuntimeProvider { + private static final String COMPONENT_DIR = "org/apache/camel/catalog/karaf/components"; + private static final String DATAFORMAT_DIR = "org/apache/camel/catalog/karaf/dataformats"; + private static final String LANGUAGE_DIR = "org/apache/camel/catalog/karaf/languages"; private static final String COMPONENTS_CATALOG = "org/apache/camel/catalog/karaf/components.properties"; private static final String DATA_FORMATS_CATALOG = "org/apache/camel/catalog/karaf/dataformats.properties"; private static final String LANGUAGE_CATALOG = "org/apache/camel/catalog/karaf/languages.properties"; @@ -53,6 +56,21 @@ public class KarafRuntimeProvider implements RuntimeProvider { } @Override + public String getComponentJSonSchemaDirectory() { + return COMPONENT_DIR; + } + + @Override + public String getDataFormatJSonSchemaDirectory() { + return DATAFORMAT_DIR; + } + + @Override + public String getLanguageJSonSchemaDirectory() { + return LANGUAGE_DIR; + } + + @Override public List<String> findComponentNames() { List<String> names = new ArrayList<String>(); InputStream is = camelCatalog.getVersionManager().getResourceAsStream(COMPONENTS_CATALOG); http://git-wip-us.apache.org/repos/asf/camel/blob/84a5a6e2/platforms/catalog-provider-springboot/src/main/java/org/apache/camel/catalog/springboot/SpringBootRuntimeProvider.java ---------------------------------------------------------------------- diff --git a/platforms/catalog-provider-springboot/src/main/java/org/apache/camel/catalog/springboot/SpringBootRuntimeProvider.java b/platforms/catalog-provider-springboot/src/main/java/org/apache/camel/catalog/springboot/SpringBootRuntimeProvider.java index 8b61ede..8e06e86 100644 --- a/platforms/catalog-provider-springboot/src/main/java/org/apache/camel/catalog/springboot/SpringBootRuntimeProvider.java +++ b/platforms/catalog-provider-springboot/src/main/java/org/apache/camel/catalog/springboot/SpringBootRuntimeProvider.java @@ -31,6 +31,9 @@ import org.apache.camel.catalog.RuntimeProvider; */ public class SpringBootRuntimeProvider implements RuntimeProvider { + private static final String COMPONENT_DIR = "org/apache/camel/catalog/springboot/components"; + private static final String DATAFORMAT_DIR = "org/apache/camel/catalog/springboot/dataformats"; + private static final String LANGUAGE_DIR = "org/apache/camel/catalog/springboot/languages"; private static final String COMPONENTS_CATALOG = "org/apache/camel/catalog/springboot/components.properties"; private static final String DATA_FORMATS_CATALOG = "org/apache/camel/catalog/springboot/dataformats.properties"; private static final String LANGUAGE_CATALOG = "org/apache/camel/catalog/springboot/languages.properties"; @@ -53,6 +56,21 @@ public class SpringBootRuntimeProvider implements RuntimeProvider { } @Override + public String getComponentJSonSchemaDirectory() { + return COMPONENT_DIR; + } + + @Override + public String getDataFormatJSonSchemaDirectory() { + return DATAFORMAT_DIR; + } + + @Override + public String getLanguageJSonSchemaDirectory() { + return LANGUAGE_DIR; + } + + @Override public List<String> findComponentNames() { List<String> names = new ArrayList<String>(); InputStream is = camelCatalog.getVersionManager().getResourceAsStream(COMPONENTS_CATALOG); http://git-wip-us.apache.org/repos/asf/camel/blob/84a5a6e2/platforms/catalog-provider-springboot/src/test/java/org/apache/camel/catalog/springboot/SpringBootRuntimeProviderTest.java ---------------------------------------------------------------------- diff --git a/platforms/catalog-provider-springboot/src/test/java/org/apache/camel/catalog/springboot/SpringBootRuntimeProviderTest.java b/platforms/catalog-provider-springboot/src/test/java/org/apache/camel/catalog/springboot/SpringBootRuntimeProviderTest.java index 879129d..28aeb8a 100644 --- a/platforms/catalog-provider-springboot/src/test/java/org/apache/camel/catalog/springboot/SpringBootRuntimeProviderTest.java +++ b/platforms/catalog-provider-springboot/src/test/java/org/apache/camel/catalog/springboot/SpringBootRuntimeProviderTest.java @@ -93,4 +93,28 @@ public class SpringBootRuntimeProviderTest { assertTrue(names.contains("xpath")); } + @Test + public void testComponentArtifactId() throws Exception { + String json = catalog.componentJSonSchema("ftp"); + + assertNotNull(json); + assertTrue(json.contains("camel-ftp-starter")); + } + + @Test + public void testDataFormatArtifactId() throws Exception { + String json = catalog.dataFormatJSonSchema("bindy-csv"); + + assertNotNull(json); + assertTrue(json.contains("camel-bindy-starter")); + } + + @Test + public void testLanguageArtifactId() throws Exception { + String json = catalog.languageJSonSchema("spel"); + + assertNotNull(json); + assertTrue(json.contains("camel-spring-starter")); + } + } http://git-wip-us.apache.org/repos/asf/camel/blob/84a5a6e2/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 e498a7b..dc4a10b 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 @@ -74,9 +74,6 @@ public class DefaultCamelCatalog implements CamelCatalog { private static final String MODELS_CATALOG = "org/apache/camel/catalog/models.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"; - private static final String LANGUAGE_DIR = "org/apache/camel/catalog/languages"; private static final String DOC_DIR = "org/apache/camel/catalog/docs"; private static final String ARCHETYPES_CATALOG = "org/apache/camel/catalog/archetypes/archetype-catalog.xml"; private static final String SCHEMAS_XML = "org/apache/camel/catalog/schemas"; @@ -457,7 +454,7 @@ public class DefaultCamelCatalog implements CamelCatalog { @Override public String componentJSonSchema(String name) { - String file = COMPONENT_DIR + "/" + name + ".json"; + String file = runtimeProvider.getComponentJSonSchemaDirectory() + "/" + name + ".json"; String answer = null; if (caching) { @@ -503,7 +500,7 @@ public class DefaultCamelCatalog implements CamelCatalog { @Override public String dataFormatJSonSchema(String name) { - String file = DATAFORMAT_DIR + "/" + name + ".json"; + String file = runtimeProvider.getDataFormatJSonSchemaDirectory() + "/" + name + ".json"; String answer = null; if (caching) { @@ -554,7 +551,7 @@ public class DefaultCamelCatalog implements CamelCatalog { name = "bean"; } - String file = LANGUAGE_DIR + "/" + name + ".json"; + String file = runtimeProvider.getLanguageJSonSchemaDirectory() + "/" + name + ".json"; String answer = null; if (caching) { http://git-wip-us.apache.org/repos/asf/camel/blob/84a5a6e2/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 index a18d193..acdf6a4 100644 --- a/platforms/catalog/src/main/java/org/apache/camel/catalog/DefaultRuntimeProvider.java +++ b/platforms/catalog/src/main/java/org/apache/camel/catalog/DefaultRuntimeProvider.java @@ -23,6 +23,9 @@ import java.util.List; public class DefaultRuntimeProvider implements RuntimeProvider { + private static final String COMPONENT_DIR = "org/apache/camel/catalog/components"; + private static final String DATAFORMAT_DIR = "org/apache/camel/catalog/dataformats"; + private static final String LANGUAGE_DIR = "org/apache/camel/catalog/languages"; 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"; @@ -52,6 +55,21 @@ public class DefaultRuntimeProvider implements RuntimeProvider { } @Override + public String getComponentJSonSchemaDirectory() { + return COMPONENT_DIR; + } + + @Override + public String getDataFormatJSonSchemaDirectory() { + return DATAFORMAT_DIR; + } + + @Override + public String getLanguageJSonSchemaDirectory() { + return LANGUAGE_DIR; + } + + @Override public List<String> findComponentNames() { List<String> names = new ArrayList<String>(); InputStream is = camelCatalog.getVersionManager().getResourceAsStream(COMPONENTS_CATALOG); http://git-wip-us.apache.org/repos/asf/camel/blob/84a5a6e2/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 index 2ab844f..2bd7fd8 100644 --- a/platforms/catalog/src/main/java/org/apache/camel/catalog/RuntimeProvider.java +++ b/platforms/catalog/src/main/java/org/apache/camel/catalog/RuntimeProvider.java @@ -25,11 +25,6 @@ import java.util.List; */ public interface RuntimeProvider { - // TODO: maven archetype GAV - // original GAV - // spring-boot GAV - // karaf feature name - /** * Gets the {@link CamelCatalog} */ @@ -46,6 +41,21 @@ public interface RuntimeProvider { String getProviderName(); /** + * Gets the directory where the component json files are stored in the catalog JAR file + */ + String getComponentJSonSchemaDirectory(); + + /** + * Gets the directory where the data format json files are stored in the catalog JAR file + */ + String getDataFormatJSonSchemaDirectory(); + + /** + * Gets the directory where the language json files are stored in the catalog JAR file + */ + String getLanguageJSonSchemaDirectory(); + + /** * Find all the component names from the Camel catalog supported by the provider */ List<String> findComponentNames(); http://git-wip-us.apache.org/repos/asf/camel/blob/84a5a6e2/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/PrepareCatalogSpringBootMojo.java ---------------------------------------------------------------------- diff --git a/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/PrepareCatalogSpringBootMojo.java b/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/PrepareCatalogSpringBootMojo.java index dffc9de..d0f4841 100644 --- a/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/PrepareCatalogSpringBootMojo.java +++ b/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/PrepareCatalogSpringBootMojo.java @@ -5,9 +5,9 @@ * 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> + * + * http://www.apache.org/licenses/LICENSE-2.0 + * * 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. @@ -24,11 +24,11 @@ import java.io.IOException; import java.nio.channels.FileChannel; import java.util.ArrayList; import java.util.Collections; -import java.util.HashSet; import java.util.LinkedHashSet; import java.util.List; import java.util.Set; import java.util.TreeSet; +import java.util.regex.Pattern; import org.apache.maven.plugin.AbstractMojo; import org.apache.maven.plugin.MojoExecutionException; @@ -47,6 +47,8 @@ public class PrepareCatalogSpringBootMojo extends AbstractMojo { public static final int BUFFER_SIZE = 128 * 1024; + private static final Pattern ARTIFACT_PATTERN = Pattern.compile("\"artifactId\": \"camel-(.*)\""); + /** * The maven project. * @@ -170,14 +172,23 @@ public class PrepareCatalogSpringBootMojo extends AbstractMojo { // make sure to create out dir componentsOutDir.mkdirs(); - Set<String> alternativeSchemes = new HashSet<>(); - for (File file : jsonFiles) { - File to = new File(componentsOutDir, file.getName()); + // for spring-boot we need to amend the json file to use -starter as the artifact-id try { - copyFile(file, to); + String text = loadText(new FileInputStream(file)); + + text = ARTIFACT_PATTERN.matcher(text).replaceFirst("\"artifactId\": \"camel-$1-starter\""); + + // write new json file + File to = new File(componentsOutDir, file.getName()); + FileOutputStream fos = new FileOutputStream(to, false); + + fos.write(text.getBytes()); + + fos.close(); + } catch (IOException e) { - throw new MojoFailureException("Cannot copy file from " + file + " -> " + to, e); + throw new MojoFailureException("Cannot write json file " + file, e); } } @@ -248,11 +259,22 @@ public class PrepareCatalogSpringBootMojo extends AbstractMojo { dataFormatsOutDir.mkdirs(); for (File file : jsonFiles) { - File to = new File(dataFormatsOutDir, file.getName()); + // for spring-boot we need to amend the json file to use -starter as the artifact-id try { - copyFile(file, to); + String text = loadText(new FileInputStream(file)); + + text = ARTIFACT_PATTERN.matcher(text).replaceFirst("\"artifactId\": \"camel-$1-starter\""); + + // write new json file + File to = new File(dataFormatsOutDir, file.getName()); + FileOutputStream fos = new FileOutputStream(to, false); + + fos.write(text.getBytes()); + + fos.close(); + } catch (IOException e) { - throw new MojoFailureException("Cannot copy file from " + file + " -> " + to, e); + throw new MojoFailureException("Cannot write json file " + file, e); } } @@ -323,11 +345,22 @@ public class PrepareCatalogSpringBootMojo extends AbstractMojo { languagesOutDir.mkdirs(); for (File file : jsonFiles) { - File to = new File(languagesOutDir, file.getName()); + // for spring-boot we need to amend the json file to use -starter as the artifact-id try { - copyFile(file, to); + String text = loadText(new FileInputStream(file)); + + text = ARTIFACT_PATTERN.matcher(text).replaceFirst("\"artifactId\": \"camel-$1-starter\""); + + // write new json file + File to = new File(languagesOutDir, file.getName()); + FileOutputStream fos = new FileOutputStream(to, false); + + fos.write(text.getBytes()); + + fos.close(); + } catch (IOException e) { - throw new MojoFailureException("Cannot copy file from " + file + " -> " + to, e); + throw new MojoFailureException("Cannot write json file " + file, e); } }