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 08:48:09 UTC

svn commit: r566503 - in /activemq/camel/trunk/tooling/maven/camel-maven-plugin: pom.xml src/main/java/org/apache/camel/maven/DotMojo.java src/main/java/org/apache/camel/maven/RunCamelMojo.java

Author: jstrachan
Date: Wed Aug 15 23:48:08 2007
New Revision: 566503

URL: http://svn.apache.org/viewvc?view=rev&rev=566503
Log:
added a DOT plugin so that we can convert the DOT files into PNG/SVG files as part of the build process

Added:
    activemq/camel/trunk/tooling/maven/camel-maven-plugin/src/main/java/org/apache/camel/maven/DotMojo.java   (with props)
Modified:
    activemq/camel/trunk/tooling/maven/camel-maven-plugin/pom.xml
    activemq/camel/trunk/tooling/maven/camel-maven-plugin/src/main/java/org/apache/camel/maven/RunCamelMojo.java

Modified: activemq/camel/trunk/tooling/maven/camel-maven-plugin/pom.xml
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/tooling/maven/camel-maven-plugin/pom.xml?view=diff&rev=566503&r1=566502&r2=566503
==============================================================================
--- activemq/camel/trunk/tooling/maven/camel-maven-plugin/pom.xml (original)
+++ activemq/camel/trunk/tooling/maven/camel-maven-plugin/pom.xml Wed Aug 15 23:48:08 2007
@@ -58,6 +58,17 @@
       <version>1.0-alpha-9</version>
     </dependency>
 
+    <dependency>
+      <groupId>org.apache.maven.reporting</groupId>
+      <artifactId>maven-reporting-api</artifactId>
+      <version>2.0.2</version>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.maven.reporting</groupId>
+      <artifactId>maven-reporting-impl</artifactId>
+      <version>2.0.2</version>
+    </dependency>
+
 
     <!-- add some logging to the classpath -->
     <dependency>
@@ -67,6 +78,13 @@
     <dependency>
       <groupId>commons-logging</groupId>
       <artifactId>commons-logging</artifactId>
+    </dependency>
+
+    <!-- do we need all these? -->
+    <dependency>
+      <groupId>commons-collections</groupId>
+      <artifactId>commons-collections</artifactId>
+      <version>3.1</version>
     </dependency>
   </dependencies>
 </project>

Added: 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=auto&rev=566503
==============================================================================
--- activemq/camel/trunk/tooling/maven/camel-maven-plugin/src/main/java/org/apache/camel/maven/DotMojo.java (added)
+++ activemq/camel/trunk/tooling/maven/camel-maven-plugin/src/main/java/org/apache/camel/maven/DotMojo.java Wed Aug 15 23:48:08 2007
@@ -0,0 +1,264 @@
+/**
+ *
+ * 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;
+
+import org.apache.maven.doxia.siterenderer.Renderer;
+import org.apache.maven.plugin.MojoExecutionException;
+import org.apache.maven.plugin.logging.Log;
+import org.apache.maven.project.MavenProject;
+import org.apache.maven.reporting.AbstractMavenReport;
+import org.apache.maven.reporting.MavenReportException;
+import org.codehaus.plexus.util.cli.CommandLineException;
+import org.codehaus.plexus.util.cli.CommandLineUtils;
+import org.codehaus.plexus.util.cli.Commandline;
+
+import java.io.File;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Locale;
+import java.util.ResourceBundle;
+
+/**
+ * Converts the DOT files into another format such as PNG
+ *
+ * @version $Revision: 1.1 $
+ * @goal dot
+ * @phase prepare-package
+ * @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" };
+
+    /**
+     * Subdirectory for report.
+     */
+    protected static final String SUBDIRECTORY = "cameldoc";
+    /**
+     * Reference to Maven 2 Project.
+     *
+     * @parameter expression="${project}"
+     * @required
+     * @readonly
+     */
+    private MavenProject project;
+    /**
+     * Base output directory.
+     *
+     * @parameter expression="${project.build.directory}"
+     * @required
+     * @readonly
+     */
+    private File buildDirectory;
+    /**
+     * Base output directory for reports.
+     *
+     * @parameter expression="${project.reporting.outputDirectory}"
+     * @readonly
+     * @required
+     */
+    private File outputDirectory;
+    /**
+     * The input directory used to find the dot files
+     *
+     * @parameter default-value="${project.build.directory}/site/cameldoc"
+     * @required
+     */
+    private File resources;
+    /**
+     * GraphViz executable location; visualization (images) will be
+     * generated only if you install this program and set this property to the
+     * executable dot (dot.exe on Win).
+     *
+     * @parameter expression="dot"
+     */
+    private String executable;
+    /**
+     * Graphviz output types. Default is png. Possible values: png, jpg, gif, svg.
+     *
+     * @required
+     */
+    private String graphvizOutputType;
+    /**
+     * Graphviz output types. Possible values: png, jpg, gif, svg.
+     *
+     * @parameter
+     */
+    private String[] graphvizOutputTypes;
+    /**
+     * Doxia SiteRender.
+     *
+     * @component
+     */
+    private Renderer renderer;
+
+    /**
+     * @param locale report locale.
+     * @return report description.
+     * @see org.apache.maven.reporting.MavenReport#getDescription(Locale)
+     */
+    public String getDescription(final Locale locale) {
+        return getBundle(locale).getString("report.description");
+    }
+
+    /**
+     * @see org.apache.maven.reporting.MavenReport#getName(Locale)
+     */
+    public String getName(final Locale locale) {
+        return getBundle(locale).getString("report.name");
+    }
+
+    /**
+     * @see org.apache.maven.reporting.MavenReport#getOutputName()
+     */
+    public String getOutputName() {
+        return SUBDIRECTORY + "/index.html";
+    }
+
+    /**
+     * @see org.apache.maven.plugin.Mojo#execute()
+     */
+    public void execute() throws MojoExecutionException {
+        this.execute(this.buildDirectory, Locale.getDefault());
+    }
+
+    /**
+     * 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 {
+        outputDir.mkdirs();
+
+        List<File> files = new ArrayList<File>();
+        appendFiles(files, resources);
+
+        if (graphvizOutputTypes == null) {
+            if (graphvizOutputType == null) {
+                graphvizOutputTypes = DEFAULT_GRAPHVIZ_OUTPUT_TYPES;
+            }
+            else {
+            graphvizOutputTypes = new String[]{graphvizOutputType};
+            }
+        }
+        try {
+            for (int i = 0; i < files.size(); i++) {
+                File file = (File) ((List) files).get(i);
+                for (int j = 0; j < graphvizOutputTypes.length; j++) {
+                    String format = graphvizOutputTypes[j];
+                    convertFile(file, format, getLog());
+                }
+            }
+        }
+        catch (CommandLineException e) {
+            throw new MojoExecutionException("Failed: " + e, e);
+        }
+    }
+
+    protected int convertFile(File file, String format, Log log1) throws CommandLineException {
+        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(file.getAbsolutePath());
+
+        log1.debug("executing: " + cl.toString());
+
+        CommandLineUtils.StringStreamConsumer stdout = new CommandLineUtils.StringStreamConsumer();
+        CommandLineUtils.StringStreamConsumer stderr = new CommandLineUtils.StringStreamConsumer();
+
+        int exitCode = CommandLineUtils.executeCommandLine(cl, stdout, stderr);
+
+        String output = stdout.getOutput();
+        if (output.length() > 0) {
+            log1.debug(output);
+        }
+        String errOutput = stderr.getOutput();
+        if (errOutput.length() > 0) {
+            log1.warn(errOutput);
+        }
+        return exitCode;
+    }
+
+    private void appendFiles(List<File> output, File file) {
+        if (file.isDirectory()) {
+            appendDirectory(output, file);
+        }
+        else {
+            if (isValid(file)) {
+                output.add(file);
+            }
+        }
+    }
+
+    private void appendDirectory(List<File> output, File dir) {
+        File[] files = dir.listFiles();
+        for (File file : files) {
+            appendFiles(output, file);
+        }
+    }
+
+    private boolean isValid(File file) {
+        String name = file.getName().toLowerCase();
+        return name.endsWith(".dot");
+    }
+
+    /**
+     * @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;
+        }
+    }
+
+    /**
+     * Gets resource bundle for given locale.
+     *
+     * @param locale locale
+     * @return resource bundle
+     */
+    protected ResourceBundle getBundle(final Locale locale) {
+        return ResourceBundle.getBundle(
+                "camel-dot-maven-plugin",
+                locale,
+                this.getClass().getClassLoader());
+    }
+
+    protected Renderer getSiteRenderer() {
+        return this.renderer;
+    }
+
+    /**
+     * @see org.apache.maven.reporting.AbstractMavenReport#getOutputDirectory()
+     */
+    protected String getOutputDirectory() {
+        return this.outputDirectory.getAbsolutePath();
+    }
+
+    protected MavenProject getProject() {
+        return this.project;
+    }
+}
\ No newline at end of file

Propchange: activemq/camel/trunk/tooling/maven/camel-maven-plugin/src/main/java/org/apache/camel/maven/DotMojo.java
------------------------------------------------------------------------------
    svn:eol-style = native

Modified: activemq/camel/trunk/tooling/maven/camel-maven-plugin/src/main/java/org/apache/camel/maven/RunCamelMojo.java
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/tooling/maven/camel-maven-plugin/src/main/java/org/apache/camel/maven/RunCamelMojo.java?view=diff&rev=566503&r1=566502&r2=566503
==============================================================================
--- activemq/camel/trunk/tooling/maven/camel-maven-plugin/src/main/java/org/apache/camel/maven/RunCamelMojo.java (original)
+++ activemq/camel/trunk/tooling/maven/camel-maven-plugin/src/main/java/org/apache/camel/maven/RunCamelMojo.java Wed Aug 15 23:48:08 2007
@@ -90,7 +90,7 @@
     /**
      * The DOT File name used to generate the DOT diagram of the route definitions
      *
-     * @parameter expression="${project.build.directory}/site/camel-dot/Routes.dot"
+     * @parameter expression="${project.build.directory}/site/cameldoc/Routes.dot"
      * @readonly
      */
     protected String dotFile;