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 2014/11/14 09:29:34 UTC
[03/11] camel git commit: CAMEL-7999: Maven plugin to generate a list
of all Camel components.
CAMEL-7999: Maven plugin to generate a list of all Camel components.
Project: http://git-wip-us.apache.org/repos/asf/camel/repo
Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/908b5752
Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/908b5752
Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/908b5752
Branch: refs/heads/master
Commit: 908b57523a6956d48e8cdcab0c01a580f3c06514
Parents: fa6e03b
Author: Claus Ibsen <da...@apache.org>
Authored: Thu Nov 13 16:16:02 2014 +0100
Committer: Claus Ibsen <da...@apache.org>
Committed: Thu Nov 13 16:16:02 2014 +0100
----------------------------------------------------------------------
platforms/commands/commands-core/pom.xml | 21 +++-
.../camel/commands/AbstractCamelController.java | 4 +
.../commands/catalog/CamelComponentCatalog.java | 35 ++++++
.../catalog/CamelComponentCatalogService.java | 120 +++++++++++++++++++
.../catalog/CamelComponentCatalogTest.java | 63 ++++++++++
.../maven/packaging/CommandsPrepareMojo.java | 120 +++++++++++++++++++
6 files changed, 359 insertions(+), 4 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/camel/blob/908b5752/platforms/commands/commands-core/pom.xml
----------------------------------------------------------------------
diff --git a/platforms/commands/commands-core/pom.xml b/platforms/commands/commands-core/pom.xml
index d94ad2a..bb616c7 100644
--- a/platforms/commands/commands-core/pom.xml
+++ b/platforms/commands/commands-core/pom.xml
@@ -86,16 +86,16 @@
<version>1.7</version>
<executions>
<execution>
- <phase>generate-sources</phase>
+ <phase>process-resources</phase>
<configuration>
<target>
<echo>Copying component json descriptors</echo>
- <copy todir="${project.basedir}/target/classes/components/" flatten="true">
+ <copy todir="${project.basedir}/target/classes/org/apache/camel/commands/catalog/components/" flatten="true">
<fileset dir="${camel.core.dir}">
<include name="**/target/classes/org/apache/camel/**/*.json"/>
</fileset>
</copy>
- <copy todir="${project.basedir}/target/classes/components/" flatten="true">
+ <copy todir="${project.basedir}/target/classes/org/apache/camel/commands/catalog/components/" flatten="true">
<fileset dir="${components.dir}">
<include name="**/target/classes/org/apache/camel/**/*.json"/>
</fileset>
@@ -111,13 +111,26 @@
</plugin>
<plugin>
+ <groupId>org.apache.camel</groupId>
+ <artifactId>camel-package-maven-plugin</artifactId>
+ <version>${project.version}</version>
+ <executions>
+ <execution>
+ <goals>
+ <goal>include-components-list</goal>
+ </goals>
+ <phase>process-resources</phase>
+ </execution>
+ </executions>
+ </plugin>
+
+ <plugin>
<groupId>org.apache.felix</groupId>
<artifactId>maven-bundle-plugin</artifactId>
<extensions>true</extensions>
<configuration>
<instructions>
<Private-Package>
- components,
org.apache.camel.commands.internal
</Private-Package>
</instructions>
http://git-wip-us.apache.org/repos/asf/camel/blob/908b5752/platforms/commands/commands-core/src/main/java/org/apache/camel/commands/AbstractCamelController.java
----------------------------------------------------------------------
diff --git a/platforms/commands/commands-core/src/main/java/org/apache/camel/commands/AbstractCamelController.java b/platforms/commands/commands-core/src/main/java/org/apache/camel/commands/AbstractCamelController.java
index e96a069..5781342 100644
--- a/platforms/commands/commands-core/src/main/java/org/apache/camel/commands/AbstractCamelController.java
+++ b/platforms/commands/commands-core/src/main/java/org/apache/camel/commands/AbstractCamelController.java
@@ -28,6 +28,8 @@ import java.util.Properties;
import org.apache.camel.CamelContext;
import org.apache.camel.Endpoint;
import org.apache.camel.Route;
+import org.apache.camel.commands.catalog.CamelComponentCatalog;
+import org.apache.camel.commands.catalog.CamelComponentCatalogService;
import org.apache.camel.model.RouteDefinition;
import org.apache.camel.model.rest.RestDefinition;
import org.apache.camel.spi.RestRegistry;
@@ -38,6 +40,8 @@ import org.apache.camel.util.JsonSchemaHelper;
*/
public abstract class AbstractCamelController implements CamelController {
+ private CamelComponentCatalog catalog = new CamelComponentCatalogService();
+
public CamelContext getCamelContext(String name) {
for (CamelContext camelContext : this.getCamelContexts()) {
if (camelContext.getName().equals(name)) {
http://git-wip-us.apache.org/repos/asf/camel/blob/908b5752/platforms/commands/commands-core/src/main/java/org/apache/camel/commands/catalog/CamelComponentCatalog.java
----------------------------------------------------------------------
diff --git a/platforms/commands/commands-core/src/main/java/org/apache/camel/commands/catalog/CamelComponentCatalog.java b/platforms/commands/commands-core/src/main/java/org/apache/camel/commands/catalog/CamelComponentCatalog.java
new file mode 100644
index 0000000..65ba2af
--- /dev/null
+++ b/platforms/commands/commands-core/src/main/java/org/apache/camel/commands/catalog/CamelComponentCatalog.java
@@ -0,0 +1,35 @@
+/**
+ * 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
+ *
+ * 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.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.commands.catalog;
+
+import java.util.List;
+
+public interface CamelComponentCatalog {
+
+ /**
+ * Find all the component names from the Camel catalog
+ */
+ List<String> findComponentNames();
+
+ /**
+ * Returns the component information as JSon format.
+ *
+ * @param name the component name
+ * @return component details in JSon
+ */
+ String componentJSonSchema(String name);
+}
http://git-wip-us.apache.org/repos/asf/camel/blob/908b5752/platforms/commands/commands-core/src/main/java/org/apache/camel/commands/catalog/CamelComponentCatalogService.java
----------------------------------------------------------------------
diff --git a/platforms/commands/commands-core/src/main/java/org/apache/camel/commands/catalog/CamelComponentCatalogService.java b/platforms/commands/commands-core/src/main/java/org/apache/camel/commands/catalog/CamelComponentCatalogService.java
new file mode 100644
index 0000000..a163a86
--- /dev/null
+++ b/platforms/commands/commands-core/src/main/java/org/apache/camel/commands/catalog/CamelComponentCatalogService.java
@@ -0,0 +1,120 @@
+/**
+ * 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
+ *
+ * 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.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.commands.catalog;
+
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.io.LineNumberReader;
+import java.util.ArrayList;
+import java.util.List;
+
+public class CamelComponentCatalogService implements CamelComponentCatalog {
+
+ private static String COMPONENTS_CATALOG = "org/apache/camel/commands/catalog/components-catalog";
+ private static String COMPONENTS_JSON = "org/apache/camel/commands/catalog/components";
+
+ @Override
+ public List<String> findComponentNames() {
+ List<String> names = new ArrayList<String>();
+
+ InputStream is = CamelComponentCatalogService.class.getClassLoader().getResourceAsStream(COMPONENTS_CATALOG);
+ if (is != null) {
+ try {
+ loadLines(is, names);
+ } catch (IOException e) {
+ // ignore
+ }
+ }
+ return names;
+ }
+
+ @Override
+ public String componentJSonSchema(String name) {
+ String file = COMPONENTS_JSON + "/" + name + ".json";
+
+ InputStream is = CamelComponentCatalogService.class.getClassLoader().getResourceAsStream(file);
+ if (is != null) {
+ try {
+ return loadText(is);
+ } catch (IOException e) {
+ // ignore
+ }
+ }
+
+ return null;
+ }
+
+ /**
+ * Loads the entire stream into memory as a String and returns it.
+ * <p/>
+ * <b>Notice:</b> This implementation appends a <tt>\n</tt> as line
+ * terminator at the of the text.
+ * <p/>
+ * Warning, don't use for crazy big streams :)
+ */
+ private static void loadLines(InputStream in, List<String> lines) throws IOException {
+ InputStreamReader isr = new InputStreamReader(in);
+ try {
+ BufferedReader reader = new LineNumberReader(isr);
+ while (true) {
+ String line = reader.readLine();
+ if (line != null) {
+ lines.add(line);
+ } else {
+ break;
+ }
+ }
+ } finally {
+ isr.close();
+ in.close();
+ }
+ }
+
+ /**
+ * Loads the entire stream into memory as a String and returns it.
+ * <p/>
+ * <b>Notice:</b> This implementation appends a <tt>\n</tt> as line
+ * terminator at the of the text.
+ * <p/>
+ * Warning, don't use for crazy big streams :)
+ */
+ public static String loadText(InputStream in) throws IOException {
+ StringBuilder builder = new StringBuilder();
+ InputStreamReader isr = new InputStreamReader(in);
+ try {
+ BufferedReader reader = new LineNumberReader(isr);
+ while (true) {
+ String line = reader.readLine();
+ if (line != null) {
+ builder.append(line);
+ builder.append("\n");
+ } else {
+ break;
+ }
+ }
+ return builder.toString();
+ } finally {
+ isr.close();
+ in.close();
+ }
+ }
+
+
+
+}
http://git-wip-us.apache.org/repos/asf/camel/blob/908b5752/platforms/commands/commands-core/src/test/java/org/apache/camel/commands/catalog/CamelComponentCatalogTest.java
----------------------------------------------------------------------
diff --git a/platforms/commands/commands-core/src/test/java/org/apache/camel/commands/catalog/CamelComponentCatalogTest.java b/platforms/commands/commands-core/src/test/java/org/apache/camel/commands/catalog/CamelComponentCatalogTest.java
new file mode 100644
index 0000000..1090670
--- /dev/null
+++ b/platforms/commands/commands-core/src/test/java/org/apache/camel/commands/catalog/CamelComponentCatalogTest.java
@@ -0,0 +1,63 @@
+/**
+ * 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
+ *
+ * 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.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.commands.catalog;
+
+import java.util.List;
+
+import junit.framework.TestCase;
+import org.junit.Test;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class CamelComponentCatalogTest extends TestCase {
+
+ private static final Logger LOG = LoggerFactory.getLogger(CamelComponentCatalogTest.class);
+
+ @Test
+ public void testFindComponentNames() {
+ CamelComponentCatalog catalog = new CamelComponentCatalogService();
+ List<String> names = catalog.findComponentNames();
+
+ assertNotNull(names);
+
+ LOG.info("Found {} names", names.size());
+ assertTrue("Should find some components", names.size() > 0);
+ }
+
+ @Test
+ public void testCoreComponentJson() {
+ CamelComponentCatalog catalog = new CamelComponentCatalogService();
+ String json = catalog.componentJSonSchema("bean");
+
+ assertNotNull(json);
+ LOG.info(json);
+
+ assertTrue("Should find bean component", json.contains("bean"));
+ }
+
+ @Test
+ public void testFtpComponentJson() {
+ CamelComponentCatalog catalog = new CamelComponentCatalogService();
+ String json = catalog.componentJSonSchema("ftp");
+
+ assertNotNull(json);
+ LOG.info(json);
+
+ assertTrue("Should find ftp component", json.contains("ftp"));
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/camel/blob/908b5752/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/CommandsPrepareMojo.java
----------------------------------------------------------------------
diff --git a/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/CommandsPrepareMojo.java b/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/CommandsPrepareMojo.java
new file mode 100644
index 0000000..6f2ff69
--- /dev/null
+++ b/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/CommandsPrepareMojo.java
@@ -0,0 +1,120 @@
+/**
+ * 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
+ *
+ * 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.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.maven.packaging;
+
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+
+import org.apache.maven.plugin.AbstractMojo;
+import org.apache.maven.plugin.MojoExecutionException;
+import org.apache.maven.plugin.MojoFailureException;
+import org.apache.maven.project.MavenProject;
+import org.apache.maven.project.MavenProjectHelper;
+
+/**
+ * Analyses the Camel plugins in a project and generates extra descriptor information for easier auto-discovery in Camel.
+ *
+ * @goal include-components-list
+ * @execute phase="process-resources"
+ */
+public class CommandsPrepareMojo extends AbstractMojo {
+
+ /**
+ * The maven project.
+ *
+ * @parameter property="project"
+ * @required
+ * @readonly
+ */
+ protected MavenProject project;
+
+ /**
+ * The output directory for generated components file
+ *
+ * @parameter default-value="${project.build.directory}/classes/org/apache/camel/commands/catalog/components"
+ */
+ protected File outDir;
+
+ /**
+ * The components directory where all the Apache Camel components are
+ *
+ * @parameter default-value="${project.build.directory}/../../../components"
+ */
+ protected File componentsDir;
+
+ /**
+ * The camel-core directory where camel-core components are
+ *
+ * @parameter default-value="${project.build.directory}/../../../camel-core"
+ */
+ protected File coreDir;
+
+ /**
+ * Maven ProjectHelper.
+ *
+ * @component
+ * @readonly
+ */
+ private MavenProjectHelper projectHelper;
+
+ /**
+ * Execute goal.
+ *
+ * @throws org.apache.maven.plugin.MojoExecutionException execution of the main class or one of the
+ * threads it generated failed.
+ * @throws org.apache.maven.plugin.MojoFailureException something bad happened...
+ */
+ public void execute() throws MojoExecutionException, MojoFailureException {
+ getLog().info("Copying all Camel component json descriptors");
+
+ // TODO: add the scan and copy code here
+
+ File all = new File(outDir, "../components-catalog");
+ try {
+ FileOutputStream fos = new FileOutputStream(all, false);
+
+ String[] names = outDir.list();
+ List<String> components = new ArrayList<String>();
+ // sort the names
+ for (String name : names) {
+ if (name.endsWith(".json")) {
+ // strip out .json from the name
+ String componentName = name.substring(0, name.length() - 5);
+ components.add(componentName);
+ }
+ }
+
+ Collections.sort(components);
+ for (String name : components) {
+ fos.write(name.getBytes());
+ fos.write("\n".getBytes());
+ }
+
+ fos.close();
+
+ getLog().info("Found " + components.size() + " components to include in file: " + all);
+
+ } catch (IOException e) {
+ throw new MojoFailureException("Error writing to file " + all);
+ }
+ }
+
+}
\ No newline at end of file