You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by br...@apache.org on 2006/02/09 02:01:25 UTC

svn commit: r376138 - in /maven/plugins/trunk/maven-pmd-plugin: pom.xml src/main/java/org/apache/maven/plugin/pmd/PmdViolationCheckMojo.java

Author: brett
Date: Wed Feb  8 17:01:23 2006
New Revision: 376138

URL: http://svn.apache.org/viewcvs?rev=376138&view=rev
Log:
[MPMD-13] add a pmd:check mojo
Submitted by: John Allen

Added:
    maven/plugins/trunk/maven-pmd-plugin/src/main/java/org/apache/maven/plugin/pmd/PmdViolationCheckMojo.java   (with props)
Modified:
    maven/plugins/trunk/maven-pmd-plugin/pom.xml

Modified: maven/plugins/trunk/maven-pmd-plugin/pom.xml
URL: http://svn.apache.org/viewcvs/maven/plugins/trunk/maven-pmd-plugin/pom.xml?rev=376138&r1=376137&r2=376138&view=diff
==============================================================================
--- maven/plugins/trunk/maven-pmd-plugin/pom.xml (original)
+++ maven/plugins/trunk/maven-pmd-plugin/pom.xml Wed Feb  8 17:01:23 2006
@@ -1,4 +1,5 @@
-<?xml version="1.0" encoding="UTF-8"?><project>
+<?xml version="1.0" encoding="UTF-8"?>
+<project>
   <parent>
     <artifactId>maven-plugin-parent</artifactId>
     <groupId>org.apache.maven.plugins</groupId>
@@ -31,4 +32,9 @@
       <artifactId>plexus-utils</artifactId>
     </dependency>
   </dependencies>
+  <contributors>
+    <contributor>
+      <name>John Allen</name>
+    </contributor>
+  </contributors>
 </project>

Added: maven/plugins/trunk/maven-pmd-plugin/src/main/java/org/apache/maven/plugin/pmd/PmdViolationCheckMojo.java
URL: http://svn.apache.org/viewcvs/maven/plugins/trunk/maven-pmd-plugin/src/main/java/org/apache/maven/plugin/pmd/PmdViolationCheckMojo.java?rev=376138&view=auto
==============================================================================
--- maven/plugins/trunk/maven-pmd-plugin/src/main/java/org/apache/maven/plugin/pmd/PmdViolationCheckMojo.java (added)
+++ maven/plugins/trunk/maven-pmd-plugin/src/main/java/org/apache/maven/plugin/pmd/PmdViolationCheckMojo.java Wed Feb  8 17:01:23 2006
@@ -0,0 +1,128 @@
+package org.apache.maven.plugin.pmd;
+
+/*
+ * Copyright 2001-2006 The Apache Software Foundation.
+ *
+ * Licensed 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.
+ */
+
+import org.apache.maven.plugin.AbstractMojo;
+import org.apache.maven.plugin.MojoExecutionException;
+import org.apache.maven.plugin.MojoFailureException;
+import org.codehaus.plexus.util.xml.pull.MXParser;
+import org.codehaus.plexus.util.xml.pull.XmlPullParser;
+import org.codehaus.plexus.util.xml.pull.XmlPullParserException;
+
+import java.io.BufferedReader;
+import java.io.File;
+import java.io.FileReader;
+import java.io.IOException;
+
+/**
+ * Perform a violation check against the last pmd run to see if there are any violations.
+ *
+ * @goal check
+ * @phase verify
+ * @execute goal="pmd"
+ */
+public class PmdViolationCheckMojo
+    extends AbstractMojo
+{
+    /**
+     * Specifies the path and filename to save the PMD output.  The format of the output file is
+     * determined by the <code>reportFormat</code>
+     *
+     * @parameter expression="${outputFile}" default-value="${project.build.directory}/site/pmd.xml"
+     * @required
+     */
+    private File outputFile;
+
+    /**
+     * Specifies the format of the output to be used when writing to the output file. Valid values are
+     * "plain" and "xml"
+     *
+     * @parameter expression="${format}" default-value="xml"
+     */
+    private String format;
+
+    /**
+     * Fail on violation?
+     *
+     * @parameter expression="${failOnViolation}" default-value="true"
+     * @required
+     */
+    private boolean failOnViolation;
+
+    /**
+     * Number of violations
+     */
+    public void execute()
+        throws MojoExecutionException, MojoFailureException
+    {
+        if ( !"xml".equals( format ) )
+        {
+            throw new MojoExecutionException(
+                "Output format is '" + format + "', pmd:check requires format to be 'xml'." );
+        }
+
+        if ( outputFile.exists() )
+        {
+            try
+            {
+                XmlPullParser xpp = new MXParser();
+                FileReader freader = new FileReader( outputFile );
+                BufferedReader breader = new BufferedReader( freader );
+                xpp.setInput( breader );
+
+                int violations = countViolations( xpp );
+                if ( violations > 0 && failOnViolation )
+                {
+                    throw new MojoFailureException(
+                        "You have " + violations + " PMD violation" + ( violations > 1 ? "s" : "" ) + "." );
+                }
+            }
+            catch ( IOException e )
+            {
+                throw new MojoExecutionException( "Unable to read PMD results xml: " + outputFile.getAbsolutePath(),
+                                                  e );
+            }
+            catch ( XmlPullParserException e )
+            {
+                throw new MojoExecutionException( "Unable to read PMD results xml: " + outputFile.getAbsolutePath(),
+                                                  e );
+            }
+        }
+        else
+        {
+            getLog().info( "Unable to perform pmd:check, " + "unable to find pmd:execute outputFile." );
+        }
+    }
+
+    private int countViolations( XmlPullParser xpp )
+        throws XmlPullParserException, IOException
+    {
+        int count = 0;
+
+        int eventType = xpp.getEventType();
+        while ( eventType != XmlPullParser.END_DOCUMENT )
+        {
+            if ( eventType == XmlPullParser.START_TAG && "violation".equals( xpp.getName() ) )
+            {
+                count++;
+            }
+            eventType = xpp.next();
+        }
+
+        return count;
+    }
+}

Propchange: maven/plugins/trunk/maven-pmd-plugin/src/main/java/org/apache/maven/plugin/pmd/PmdViolationCheckMojo.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: maven/plugins/trunk/maven-pmd-plugin/src/main/java/org/apache/maven/plugin/pmd/PmdViolationCheckMojo.java
------------------------------------------------------------------------------
    svn:keywords = Author Date Id Revision