You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by js...@apache.org on 2007/08/16 11:28:12 UTC

svn commit: r566600 - in /activemq/camel/trunk: examples/camel-example-spring/ examples/camel-example-spring/src/test/ examples/camel-example-spring/src/test/java/ examples/camel-example-spring/src/test/java/org/ examples/camel-example-spring/src/test/...

Author: jstrachan
Date: Thu Aug 16 02:28:11 2007
New Revision: 566600

URL: http://svn.apache.org/viewvc?view=rev&rev=566600
Log:
got the maven plugin working as a reporting plugin; also made the examples generate a DOT file as part of the unit tests

Added:
    activemq/camel/trunk/examples/camel-example-spring/src/test/
    activemq/camel/trunk/examples/camel-example-spring/src/test/java/
    activemq/camel/trunk/examples/camel-example-spring/src/test/java/org/
    activemq/camel/trunk/examples/camel-example-spring/src/test/java/org/apache/
    activemq/camel/trunk/examples/camel-example-spring/src/test/java/org/apache/camel/
    activemq/camel/trunk/examples/camel-example-spring/src/test/java/org/apache/camel/example/
    activemq/camel/trunk/examples/camel-example-spring/src/test/java/org/apache/camel/example/spring/
    activemq/camel/trunk/examples/camel-example-spring/src/test/java/org/apache/camel/example/spring/IntegrationTest.java   (with props)
    activemq/camel/trunk/tooling/maven/camel-maven-plugin/src/main/resources/camel-maven-plugin.properties   (with props)
Modified:
    activemq/camel/trunk/examples/camel-example-spring/pom.xml
    activemq/camel/trunk/tooling/maven/camel-maven-plugin/src/main/java/org/apache/camel/maven/DotMojo.java

Modified: activemq/camel/trunk/examples/camel-example-spring/pom.xml
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/examples/camel-example-spring/pom.xml?view=diff&rev=566600&r1=566599&r2=566600
==============================================================================
--- activemq/camel/trunk/examples/camel-example-spring/pom.xml (original)
+++ activemq/camel/trunk/examples/camel-example-spring/pom.xml Thu Aug 16 02:28:11 2007
@@ -42,6 +42,14 @@
       <groupId>org.apache.camel</groupId>
       <artifactId>camel-activemq</artifactId>
     </dependency>
+
+    <!-- for testing -->
+    <dependency>
+      <groupId>junit</groupId>
+      <artifactId>junit</artifactId>
+      <scope>test</scope>
+    </dependency>
+    
   </dependencies>
 
   <build>
@@ -52,5 +60,16 @@
         <artifactId>camel-maven-plugin</artifactId>
       </plugin>
     </plugins>
+
   </build>
+
+  <reporting>
+    <plugins>
+      <!-- lets generate nice PNG / SVG diagrams from our routes -->
+      <plugin>
+        <groupId>org.apache.camel</groupId>
+        <artifactId>camel-maven-plugin</artifactId>
+      </plugin>
+    </plugins>
+  </reporting>
 </project>

Added: activemq/camel/trunk/examples/camel-example-spring/src/test/java/org/apache/camel/example/spring/IntegrationTest.java
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/examples/camel-example-spring/src/test/java/org/apache/camel/example/spring/IntegrationTest.java?view=auto&rev=566600
==============================================================================
--- activemq/camel/trunk/examples/camel-example-spring/src/test/java/org/apache/camel/example/spring/IntegrationTest.java (added)
+++ activemq/camel/trunk/examples/camel-example-spring/src/test/java/org/apache/camel/example/spring/IntegrationTest.java Thu Aug 16 02:28:11 2007
@@ -0,0 +1,32 @@
+/**
+ *
+ * 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.example.spring;
+
+import junit.framework.TestCase;
+import org.apache.camel.spring.Main;
+
+/**
+ * @version $Revision: 1.1 $
+ */
+public class IntegrationTest extends TestCase {
+
+    public void testCamelRulesDeployCorrectlyInSpring() throws Exception {
+        // lets boot up the Spring application context for 2 seconds to check it works OK
+        Main.main("-duration", "2s", "-file", "target/site/cameldoc/routes.dot");
+    }
+}

Propchange: activemq/camel/trunk/examples/camel-example-spring/src/test/java/org/apache/camel/example/spring/IntegrationTest.java
------------------------------------------------------------------------------
    svn:eol-style = native

Modified: activemq/camel/trunk/tooling/maven/camel-maven-plugin/src/main/java/org/apache/camel/maven/DotMojo.java
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/tooling/maven/camel-maven-plugin/src/main/java/org/apache/camel/maven/DotMojo.java?view=diff&rev=566600&r1=566599&r2=566600
==============================================================================
--- activemq/camel/trunk/tooling/maven/camel-maven-plugin/src/main/java/org/apache/camel/maven/DotMojo.java (original)
+++ activemq/camel/trunk/tooling/maven/camel-maven-plugin/src/main/java/org/apache/camel/maven/DotMojo.java Thu Aug 16 02:28:11 2007
@@ -27,7 +27,14 @@
 import org.codehaus.plexus.util.cli.CommandLineUtils;
 import org.codehaus.plexus.util.cli.Commandline;
 
+import java.io.BufferedReader;
+import java.io.Closeable;
 import java.io.File;
+import java.io.FileReader;
+import java.io.FileWriter;
+import java.io.IOException;
+import java.io.PrintWriter;
+import java.io.StringWriter;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.Locale;
@@ -42,8 +49,7 @@
  * @see <a href="http://www.graphviz.org/">GraphViz</a>
  */
 public class DotMojo extends AbstractMavenReport {
-    public static final String[] DEFAULT_GRAPHVIZ_OUTPUT_TYPES = { "png", "svg", "cmapx" };
-
+    public static final String[] DEFAULT_GRAPHVIZ_OUTPUT_TYPES = {"png", "svg", "cmapx"};
     /**
      * Subdirectory for report.
      */
@@ -126,7 +132,7 @@
      * @see org.apache.maven.reporting.MavenReport#getOutputName()
      */
     public String getOutputName() {
-        return SUBDIRECTORY + "/index.html";
+        return SUBDIRECTORY + "/index";
     }
 
     /**
@@ -137,13 +143,27 @@
     }
 
     /**
+     * @see org.apache.maven.reporting.AbstractMavenReport#executeReport(Locale)
+     */
+    protected void executeReport(final Locale locale) throws MavenReportException {
+        try {
+            this.execute(this.outputDirectory, locale);
+        }
+        catch (MojoExecutionException e) {
+            final MavenReportException ex = new MavenReportException(e.getMessage());
+            ex.initCause(e.getCause());
+            throw ex;
+        }
+    }
+
+    /**
      * Executes DOT generator.
      *
      * @param outputDir report output directory.
      * @param locale    report locale.
      * @throws MojoExecutionException if there were any execution errors.
      */
-    private void execute(final File outputDir, final Locale locale) throws MojoExecutionException {
+    protected void execute(final File outputDir, final Locale locale) throws MojoExecutionException {
         outputDir.mkdirs();
 
         List<File> files = new ArrayList<File>();
@@ -154,32 +174,99 @@
                 graphvizOutputTypes = DEFAULT_GRAPHVIZ_OUTPUT_TYPES;
             }
             else {
-            graphvizOutputTypes = new String[]{graphvizOutputType};
+                graphvizOutputTypes = new String[]{graphvizOutputType};
             }
         }
+        StringWriter htmlBuffer = new StringWriter();
         try {
+            PrintWriter out = new PrintWriter(htmlBuffer);
+            printHtmlHeader(out);
+
             for (int i = 0; i < files.size(); i++) {
                 File file = (File) ((List) files).get(i);
+                printHtmlFileHeader(out, file);
                 for (int j = 0; j < graphvizOutputTypes.length; j++) {
                     String format = graphvizOutputTypes[j];
-                    convertFile(file, format, getLog());
+                    String generated = convertFile(file, format);
+
+                    if (format.equals("cmapx")) {
+                        // lets include the generated file inside the html
+                        addFileToBuffer(out, new File(generated));
+                    }
                 }
+                printHtmlFileFooter(out, file);
             }
+
+            printHtmlFooter(out);
         }
         catch (CommandLineException e) {
             throw new MojoExecutionException("Failed: " + e, e);
         }
+        File html = new File(new File(outputDirectory, SUBDIRECTORY), "eip.html");
+        FileWriter htmlOut = null;
+        try {
+            htmlOut = new FileWriter(html);
+            htmlOut.write(htmlBuffer.toString());
+        }
+        catch (IOException e) {
+            throw new MojoExecutionException("Failed: " + e, e);
+        }
+        finally {
+            String description = "Failed to close html output file";
+            close(htmlOut, description);
+        }
+    }
+
+    protected void printHtmlHeader(PrintWriter out) {
+        out.println("<html>");
+        out.println("<head>");
+        out.println("</head>");
+        out.println("<body>");
+        out.println();
+        out.println("<h1>Camel EIP Patterns</h1>");
+        out.println();
+    }
+
+    protected void printHtmlFileHeader(PrintWriter out, File file) {
+        out.println("<p>");
+        out.println("  <img src='" + removeFileExtension(file.getName()) + ".png' usemap='#G'>");
+    }
+
+    protected void printHtmlFileFooter(PrintWriter out, File file) {
+        out.println("  </img>");
+        out.println("</p>");
+        out.println();
+    }
+
+    protected void printHtmlFooter(PrintWriter out) {
+        out.println();
+        out.println("</body>");
+        out.println("</html>");
+    }
+
+    protected void close(Closeable closeable, String description) {
+        if (closeable != null) {
+            try {
+                closeable.close();
+            }
+            catch (IOException e) {
+                getLog().warn(description + ": " + e);
+            }
+        }
     }
 
-    protected int convertFile(File file, String format, Log log1) throws CommandLineException {
+    protected String convertFile(File file, String format) throws CommandLineException {
+        String generatedFileName = removeFileExtension(file.getAbsolutePath()) + "." + format;
+        Log log = getLog();
+
         Commandline cl = new Commandline();
         cl.setExecutable(executable);
         cl.createArgument().setValue("-T" + format);
         cl.createArgument().setValue("-o");
-        cl.createArgument().setValue(file.getAbsolutePath().replace(".dot", "." + format));
+        cl.createArgument().setValue(generatedFileName);
         cl.createArgument().setValue(file.getAbsolutePath());
 
-        log1.debug("executing: " + cl.toString());
+        log.debug("executing: " + cl.toString());
 
         CommandLineUtils.StringStreamConsumer stdout = new CommandLineUtils.StringStreamConsumer();
         CommandLineUtils.StringStreamConsumer stderr = new CommandLineUtils.StringStreamConsumer();
@@ -188,13 +275,23 @@
 
         String output = stdout.getOutput();
         if (output.length() > 0) {
-            log1.debug(output);
+            log.debug(output);
         }
         String errOutput = stderr.getOutput();
         if (errOutput.length() > 0) {
-            log1.warn(errOutput);
+            log.warn(errOutput);
+        }
+        return generatedFileName;
+    }
+
+    protected String removeFileExtension(String name) {
+        int idx = name.lastIndexOf(".");
+        if (idx > 0) {
+            return name.substring(0, idx);
+        }
+        else {
+            return name;
         }
-        return exitCode;
     }
 
     private void appendFiles(List<File> output, File file) {
@@ -220,17 +317,25 @@
         return name.endsWith(".dot");
     }
 
-    /**
-     * @see org.apache.maven.reporting.AbstractMavenReport#executeReport(Locale)
-     */
-    protected void executeReport(final Locale locale) throws MavenReportException {
+    private void addFileToBuffer(PrintWriter out, File file) throws MojoExecutionException {
+        BufferedReader reader = null;
         try {
-            this.execute(this.outputDirectory, locale);
+            reader = new BufferedReader(new FileReader(file));
+            while (true) {
+                String line = reader.readLine();
+                if (line == null) {
+                    break;
+                }
+                else {
+                    out.println(line);
+                }
+            }
         }
-        catch (MojoExecutionException e) {
-            final MavenReportException ex = new MavenReportException(e.getMessage());
-            ex.initCause(e.getCause());
-            throw ex;
+        catch (IOException e) {
+            throw new MojoExecutionException("Failed: " + e, e);
+        }
+        finally {
+            close(reader, "cmapx file");
         }
     }
 
@@ -242,7 +347,7 @@
      */
     protected ResourceBundle getBundle(final Locale locale) {
         return ResourceBundle.getBundle(
-                "camel-dot-maven-plugin",
+                "camel-maven-plugin",
                 locale,
                 this.getClass().getClassLoader());
     }

Added: activemq/camel/trunk/tooling/maven/camel-maven-plugin/src/main/resources/camel-maven-plugin.properties
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/tooling/maven/camel-maven-plugin/src/main/resources/camel-maven-plugin.properties?view=auto&rev=566600
==============================================================================
--- activemq/camel/trunk/tooling/maven/camel-maven-plugin/src/main/resources/camel-maven-plugin.properties (added)
+++ activemq/camel/trunk/tooling/maven/camel-maven-plugin/src/main/resources/camel-maven-plugin.properties Thu Aug 16 02:28:11 2007
@@ -0,0 +1,19 @@
+# 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.
+
+report.name = Camel EIP Diagram
+report.description = This report generates a graphical diagram of all the Enterprise Integration Patterns in this project
\ No newline at end of file

Propchange: activemq/camel/trunk/tooling/maven/camel-maven-plugin/src/main/resources/camel-maven-plugin.properties
------------------------------------------------------------------------------
    svn:eol-style = native