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/44a18c6b
Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/44a18c6b
Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/44a18c6b

Branch: refs/heads/master
Commit: 44a18c6b62e89de640067276141d159ed03b3022
Parents: 7e552e8
Author: Claus Ibsen <davscl...@apache.org>
Authored: Thu Nov 13 18:54:32 2014 +0100
Committer: Claus Ibsen <davscl...@apache.org>
Committed: Thu Nov 13 18:54:32 2014 +0100

----------------------------------------------------------------------
 platforms/catalog/pom.xml                       |   3 +-
 .../catalog/DefaultCamelComponentCatalog.java   |   7 +-
 platforms/commands/commands-core/pom.xml        |  15 --
 .../maven/packaging/CommandsPrepareMojo.java    | 201 -------------------
 .../maven/packaging/PrepareCatalogMojo.java     | 201 +++++++++++++++++++
 5 files changed, 208 insertions(+), 219 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/camel/blob/44a18c6b/platforms/catalog/pom.xml
----------------------------------------------------------------------
diff --git a/platforms/catalog/pom.xml b/platforms/catalog/pom.xml
index 2cb1ce2..fd22cde 100644
--- a/platforms/catalog/pom.xml
+++ b/platforms/catalog/pom.xml
@@ -54,7 +54,7 @@
         <executions>
           <execution>
             <goals>
-              <goal>include-components-list</goal>
+              <goal>prepare-catalog</goal>
             </goals>
             <phase>process-resources</phase>
           </execution>
@@ -67,6 +67,7 @@
         <extensions>true</extensions>
       </plugin>
     </plugins>
+
   </build>
 
 </project>

http://git-wip-us.apache.org/repos/asf/camel/blob/44a18c6b/platforms/catalog/src/main/java/org/apache/camel/catalog/DefaultCamelComponentCatalog.java
----------------------------------------------------------------------
diff --git 
a/platforms/catalog/src/main/java/org/apache/camel/catalog/DefaultCamelComponentCatalog.java
 
b/platforms/catalog/src/main/java/org/apache/camel/catalog/DefaultCamelComponentCatalog.java
index 28e4f0c..5d9902d 100644
--- 
a/platforms/catalog/src/main/java/org/apache/camel/catalog/DefaultCamelComponentCatalog.java
+++ 
b/platforms/catalog/src/main/java/org/apache/camel/catalog/DefaultCamelComponentCatalog.java
@@ -24,10 +24,13 @@ import java.io.LineNumberReader;
 import java.util.ArrayList;
 import java.util.List;
 
+/**
+ * Default {@link org.apache.camel.catalog.CamelComponentCatalog}.
+ */
 public class DefaultCamelComponentCatalog implements CamelComponentCatalog {
 
-    private static String COMPONENTS_CATALOG = 
"org/apache/camel/catalog/components.properties";
-    private static String COMPONENTS_JSON = 
"org/apache/camel/catalog/components";
+    private static final String COMPONENTS_CATALOG = 
"org/apache/camel/catalog/components.properties";
+    private static final String COMPONENTS_JSON = 
"org/apache/camel/catalog/components";
 
     @Override
     public List<String> findComponentNames() {

http://git-wip-us.apache.org/repos/asf/camel/blob/44a18c6b/platforms/commands/commands-core/pom.xml
----------------------------------------------------------------------
diff --git a/platforms/commands/commands-core/pom.xml 
b/platforms/commands/commands-core/pom.xml
index 1650572..a750f13 100644
--- a/platforms/commands/commands-core/pom.xml
+++ b/platforms/commands/commands-core/pom.xml
@@ -73,21 +73,6 @@
   <build>
     <plugins>
 
-      <!-- generate and include all components in the catalog -->
-      <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>

http://git-wip-us.apache.org/repos/asf/camel/blob/44a18c6b/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
deleted file mode 100644
index 54a779d..0000000
--- 
a/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/CommandsPrepareMojo.java
+++ /dev/null
@@ -1,201 +0,0 @@
-/**
- * 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.FileFilter;
-import java.io.FileInputStream;
-import java.io.FileOutputStream;
-import java.io.IOException;
-import java.nio.channels.FileChannel;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.LinkedHashSet;
-import java.util.List;
-import java.util.Set;
-
-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 {
-
-    public static final int BUFFER_SIZE = 128 * 1024;
-
-    /**
-     * The maven project.
-     *
-     * @parameter property="project"
-     * @required
-     * @readonly
-     */
-    protected MavenProject project;
-
-    /**
-     * The output directory for components catalog
-     *
-     * @parameter 
default-value="${project.build.directory}/classes/org/apache/camel/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");
-
-        Set<File> files = new LinkedHashSet<File>();
-
-        // find all json files in components and camel-core
-        if (componentsDir != null && componentsDir.isDirectory()) {
-            File[] components = componentsDir.listFiles();
-            if (components != null) {
-                for (File dir : components) {
-                    if (dir.isDirectory()) {
-                        File target = new File(dir, "target/classes");
-                        findFilesRecursive(target, files, new 
JsonAndDirFileFilter());
-                    }
-                }
-            }
-        }
-        if (coreDir != null && coreDir.isDirectory()) {
-            File target = new File(coreDir, "target/classes");
-            findFilesRecursive(target, files, new JsonAndDirFileFilter());
-        }
-
-        getLog().info("Found " + files.size() + " component json files");
-
-        // make sure to create out dir
-        outDir.mkdirs();
-
-        for (File file : files) {
-            File to = new File(outDir, file.getName());
-            try {
-                copyFile(file, to);
-            } catch (IOException e) {
-                throw new MojoFailureException("Cannot copy file from " + file 
+ " -> " + to, e);
-            }
-        }
-
-        File all = new File(outDir, "../components.properties");
-        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("Camel components catalog includes " + files.size() 
+ " components");
-        } catch (IOException e) {
-            throw new MojoFailureException("Error writing to file " + all);
-        }
-    }
-
-    private void findFilesRecursive(File dir, Set<File> found, FileFilter 
filter) {
-        File[] files = dir.listFiles(filter);
-        if (files != null) {
-            for (File file : files) {
-                if (file.isFile()) {
-                    found.add(file);
-                } else if (file.isDirectory()) {
-                    findFilesRecursive(file, found, filter);
-                }
-            }
-        }
-    }
-
-    private class JsonAndDirFileFilter implements FileFilter {
-
-        @Override
-        public boolean accept(File pathname) {
-            return pathname.isDirectory() || 
pathname.getName().endsWith(".json");
-        }
-    }
-
-    public static void copyFile(File from, File to) throws IOException {
-        FileChannel in = null;
-        FileChannel out = null;
-        try {
-            in = new FileInputStream(from).getChannel();
-            out = new FileOutputStream(to).getChannel();
-
-            long size = in.size();
-            long position = 0;
-            while (position < size) {
-                position += in.transferTo(position, BUFFER_SIZE, out);
-            }
-        } finally {
-            if (in != null) {
-                in.close();
-            }
-            if (out != null) {
-                out.close();
-            }
-        }
-    }
-
-
-}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/camel/blob/44a18c6b/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/PrepareCatalogMojo.java
----------------------------------------------------------------------
diff --git 
a/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/PrepareCatalogMojo.java
 
b/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/PrepareCatalogMojo.java
new file mode 100644
index 0000000..70d8e11
--- /dev/null
+++ 
b/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/PrepareCatalogMojo.java
@@ -0,0 +1,201 @@
+/**
+ * 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.FileFilter;
+import java.io.FileInputStream;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.nio.channels.FileChannel;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.LinkedHashSet;
+import java.util.List;
+import java.util.Set;
+
+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 prepare-catalog
+ * @execute phase="process-resources"
+ */
+public class PrepareCatalogMojo extends AbstractMojo {
+
+    public static final int BUFFER_SIZE = 128 * 1024;
+
+    /**
+     * The maven project.
+     *
+     * @parameter property="project"
+     * @required
+     * @readonly
+     */
+    protected MavenProject project;
+
+    /**
+     * The output directory for components catalog
+     *
+     * @parameter 
default-value="${project.build.directory}/classes/org/apache/camel/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");
+
+        Set<File> files = new LinkedHashSet<File>();
+
+        // find all json files in components and camel-core
+        if (componentsDir != null && componentsDir.isDirectory()) {
+            File[] components = componentsDir.listFiles();
+            if (components != null) {
+                for (File dir : components) {
+                    if (dir.isDirectory()) {
+                        File target = new File(dir, "target/classes");
+                        findFilesRecursive(target, files, new 
JsonAndDirFileFilter());
+                    }
+                }
+            }
+        }
+        if (coreDir != null && coreDir.isDirectory()) {
+            File target = new File(coreDir, "target/classes");
+            findFilesRecursive(target, files, new JsonAndDirFileFilter());
+        }
+
+        getLog().info("Found " + files.size() + " component json files");
+
+        // make sure to create out dir
+        outDir.mkdirs();
+
+        for (File file : files) {
+            File to = new File(outDir, file.getName());
+            try {
+                copyFile(file, to);
+            } catch (IOException e) {
+                throw new MojoFailureException("Cannot copy file from " + file 
+ " -> " + to, e);
+            }
+        }
+
+        File all = new File(outDir, "../components.properties");
+        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("Camel components catalog includes " + files.size() 
+ " components");
+        } catch (IOException e) {
+            throw new MojoFailureException("Error writing to file " + all);
+        }
+    }
+
+    private void findFilesRecursive(File dir, Set<File> found, FileFilter 
filter) {
+        File[] files = dir.listFiles(filter);
+        if (files != null) {
+            for (File file : files) {
+                if (file.isFile()) {
+                    found.add(file);
+                } else if (file.isDirectory()) {
+                    findFilesRecursive(file, found, filter);
+                }
+            }
+        }
+    }
+
+    private class JsonAndDirFileFilter implements FileFilter {
+
+        @Override
+        public boolean accept(File pathname) {
+            return pathname.isDirectory() || 
pathname.getName().endsWith(".json");
+        }
+    }
+
+    public static void copyFile(File from, File to) throws IOException {
+        FileChannel in = null;
+        FileChannel out = null;
+        try {
+            in = new FileInputStream(from).getChannel();
+            out = new FileOutputStream(to).getChannel();
+
+            long size = in.size();
+            long position = 0;
+            while (position < size) {
+                position += in.transferTo(position, BUFFER_SIZE, out);
+            }
+        } finally {
+            if (in != null) {
+                in.close();
+            }
+            if (out != null) {
+                out.close();
+            }
+        }
+    }
+
+
+}
\ No newline at end of file

Reply via email to