You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@flex.apache.org by ah...@apache.org on 2014/04/25 08:18:27 UTC

[28/46] FlexPMD Donation from Adobe Systems Inc

http://git-wip-us.apache.org/repos/asf/flex-utilities/blob/b0fc5f17/FlexPMD/flex-pmd-metrics-command-line/src/main/java/com/adobe/ac/pmd/metrics/commandline/FlexMetrics.java
----------------------------------------------------------------------
diff --git a/FlexPMD/flex-pmd-metrics-command-line/src/main/java/com/adobe/ac/pmd/metrics/commandline/FlexMetrics.java b/FlexPMD/flex-pmd-metrics-command-line/src/main/java/com/adobe/ac/pmd/metrics/commandline/FlexMetrics.java
new file mode 100644
index 0000000..13205e8
--- /dev/null
+++ b/FlexPMD/flex-pmd-metrics-command-line/src/main/java/com/adobe/ac/pmd/metrics/commandline/FlexMetrics.java
@@ -0,0 +1,126 @@
+/*
+ * 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 com.adobe.ac.pmd.metrics.commandline;
+
+import java.io.File;
+import java.io.IOException;
+import java.net.URISyntaxException;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+
+import net.sourceforge.pmd.PMDException;
+import net.sourceforge.pmd.cpd.ReportException;
+
+import org.dom4j.DocumentException;
+
+import com.adobe.ac.pmd.CommandLineOptions;
+import com.adobe.ac.pmd.CommandLineUtils;
+import com.adobe.ac.pmd.LoggerUtils;
+import com.martiansoftware.jsap.JSAP;
+import com.martiansoftware.jsap.JSAPException;
+import com.martiansoftware.jsap.JSAPResult;
+import com.martiansoftware.jsap.UnspecifiedParameterException;
+
+public final class FlexMetrics
+{
+   private static JSAPResult   config;
+   private static final Logger LOGGER = Logger.getLogger( FlexMetrics.class.getName() );
+
+   public static void main( final String[] args ) throws JSAPException,
+                                                 URISyntaxException,
+                                                 IOException,
+                                                 ReportException,
+                                                 PMDException,
+                                                 DocumentException
+   {
+      new LoggerUtils().loadConfiguration();
+      startFlexMetrics( args );
+      LOGGER.info( "FlexMetrics terminated" );
+      System.exit( 0 ); // NOPMD
+   }
+
+   static boolean areCommandLineOptionsCorrect( final String[] args ) throws JSAPException
+   {
+      final JSAP jsap = new JSAP();
+      config = parseCommandLineArguments( args,
+                                          jsap );
+
+      if ( !config.success() )
+      {
+         LOGGER.log( Level.SEVERE,
+                     "Usage: java "
+                           + FlexMetrics.class.getName() + " " + jsap.getUsage() );
+      }
+
+      return config.success();
+   }
+
+   static double getDoubleParameter( final CommandLineOptions option )
+   {
+      return config.getDouble( option.toString() );
+   }
+
+   static String getParameterValue( final CommandLineOptions option )
+   {
+      return config.getString( option.toString() );
+   }
+
+   static boolean startFlexMetrics( final String[] args ) throws JSAPException,
+                                                         PMDException,
+                                                         URISyntaxException,
+                                                         IOException,
+                                                         DocumentException
+   {
+      if ( areCommandLineOptionsCorrect( args ) )
+      {
+         final File sourceDirectory = new File( getParameterValue( CommandLineOptions.SOURCE_DIRECTORY ) );
+         final File outputDirectory = new File( getParameterValue( CommandLineOptions.OUTPUT ) );
+         double mxmlFactor = 0;
+         try
+         {
+            mxmlFactor = getDoubleParameter( CommandLineOptions.MXML_FACTOR );
+         }
+         catch ( final UnspecifiedParameterException e )
+         {
+         }
+
+         new com.adobe.ac.pmd.metrics.engine.FlexMetrics( sourceDirectory, mxmlFactor ).execute( outputDirectory );
+      }
+
+      return config.success();
+   }
+
+   private static JSAPResult parseCommandLineArguments( final String[] args,
+                                                        final JSAP jsap ) throws JSAPException
+   {
+      CommandLineUtils.registerParameter( jsap,
+                                          CommandLineOptions.SOURCE_DIRECTORY,
+                                          true );
+      CommandLineUtils.registerParameter( jsap,
+                                          CommandLineOptions.MXML_FACTOR,
+                                          false );
+      CommandLineUtils.registerParameter( jsap,
+                                          CommandLineOptions.OUTPUT,
+                                          true );
+
+      return jsap.parse( args );
+   }
+
+   private FlexMetrics()
+   {
+   }
+}

http://git-wip-us.apache.org/repos/asf/flex-utilities/blob/b0fc5f17/FlexPMD/flex-pmd-metrics-command-line/src/main/test/com/adobe/ac/pmd/metrics/commandline/FlexMetricsTest.java
----------------------------------------------------------------------
diff --git a/FlexPMD/flex-pmd-metrics-command-line/src/main/test/com/adobe/ac/pmd/metrics/commandline/FlexMetricsTest.java b/FlexPMD/flex-pmd-metrics-command-line/src/main/test/com/adobe/ac/pmd/metrics/commandline/FlexMetricsTest.java
new file mode 100644
index 0000000..12febb8
--- /dev/null
+++ b/FlexPMD/flex-pmd-metrics-command-line/src/main/test/com/adobe/ac/pmd/metrics/commandline/FlexMetricsTest.java
@@ -0,0 +1,55 @@
+/*
+ * 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 com.adobe.ac.pmd.metrics.commandline;
+
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
+
+import java.io.File;
+import java.util.logging.Logger;
+
+import org.junit.Test;
+
+import com.adobe.ac.pmd.FlexPmdTestBase;
+
+public class FlexMetricsTest extends FlexPmdTestBase
+{
+   @Test
+   public void testStartFlexMetrics()
+   {
+      try
+      {
+         final File outputFile = File.createTempFile( "metrics",
+                                                      "" );
+         FlexMetrics.startFlexMetrics( new String[]
+         { "-s",
+                     getTestDirectory().getAbsolutePath(),
+                     "-o",
+                     outputFile.getAbsolutePath() } );
+
+         assertTrue( "outputFile has not been created",
+                     outputFile.exists() );
+         assertTrue( "outputFile is empty",
+                     outputFile.length() > 0 );
+      }
+      catch ( final Exception e )
+      {
+         Logger.getAnonymousLogger().warning( e.getMessage() );
+         fail();
+      }
+   }
+}

http://git-wip-us.apache.org/repos/asf/flex-utilities/blob/b0fc5f17/FlexPMD/flex-pmd-metrics-command-line/src/test/java/com/adobe/ac/pmd/metrics/commandline/FlexMetricsTest.java
----------------------------------------------------------------------
diff --git a/FlexPMD/flex-pmd-metrics-command-line/src/test/java/com/adobe/ac/pmd/metrics/commandline/FlexMetricsTest.java b/FlexPMD/flex-pmd-metrics-command-line/src/test/java/com/adobe/ac/pmd/metrics/commandline/FlexMetricsTest.java
new file mode 100644
index 0000000..12febb8
--- /dev/null
+++ b/FlexPMD/flex-pmd-metrics-command-line/src/test/java/com/adobe/ac/pmd/metrics/commandline/FlexMetricsTest.java
@@ -0,0 +1,55 @@
+/*
+ * 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 com.adobe.ac.pmd.metrics.commandline;
+
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
+
+import java.io.File;
+import java.util.logging.Logger;
+
+import org.junit.Test;
+
+import com.adobe.ac.pmd.FlexPmdTestBase;
+
+public class FlexMetricsTest extends FlexPmdTestBase
+{
+   @Test
+   public void testStartFlexMetrics()
+   {
+      try
+      {
+         final File outputFile = File.createTempFile( "metrics",
+                                                      "" );
+         FlexMetrics.startFlexMetrics( new String[]
+         { "-s",
+                     getTestDirectory().getAbsolutePath(),
+                     "-o",
+                     outputFile.getAbsolutePath() } );
+
+         assertTrue( "outputFile has not been created",
+                     outputFile.exists() );
+         assertTrue( "outputFile is empty",
+                     outputFile.length() > 0 );
+      }
+      catch ( final Exception e )
+      {
+         Logger.getAnonymousLogger().warning( e.getMessage() );
+         fail();
+      }
+   }
+}

http://git-wip-us.apache.org/repos/asf/flex-utilities/blob/b0fc5f17/FlexPMD/flex-pmd-metrics-maven-plugin/.pmd
----------------------------------------------------------------------
diff --git a/FlexPMD/flex-pmd-metrics-maven-plugin/.pmd b/FlexPMD/flex-pmd-metrics-maven-plugin/.pmd
new file mode 100644
index 0000000..b5adf0f
--- /dev/null
+++ b/FlexPMD/flex-pmd-metrics-maven-plugin/.pmd
@@ -0,0 +1,975 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+
+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.
+
+-->
+<pmd>
+    <useProjectRuleSet>false</useProjectRuleSet>
+    <ruleSetFile>.ruleset</ruleSetFile>
+    <rules>
+        <rule>
+            <name>LooseCoupling</name>
+            <ruleset>Type Resolution Rules</ruleset>
+        </rule>
+        <rule>
+            <name>CloneMethodMustImplementCloneable</name>
+            <ruleset>Type Resolution Rules</ruleset>
+        </rule>
+        <rule>
+            <name>UnusedImports</name>
+            <ruleset>Type Resolution Rules</ruleset>
+        </rule>
+        <rule>
+            <name>SignatureDeclareThrowsException</name>
+            <ruleset>Type Resolution Rules</ruleset>
+        </rule>
+        <rule>
+            <name>IfStmtsMustUseBraces</name>
+            <ruleset>Braces Rules</ruleset>
+        </rule>
+        <rule>
+            <name>WhileLoopsMustUseBraces</name>
+            <ruleset>Braces Rules</ruleset>
+        </rule>
+        <rule>
+            <name>IfElseStmtsMustUseBraces</name>
+            <ruleset>Braces Rules</ruleset>
+        </rule>
+        <rule>
+            <name>ForLoopsMustUseBraces</name>
+            <ruleset>Braces Rules</ruleset>
+        </rule>
+        <rule>
+            <name>UseSingleton</name>
+            <ruleset>Design Rules</ruleset>
+        </rule>
+        <rule>
+            <name>SimplifyBooleanReturns</name>
+            <ruleset>Design Rules</ruleset>
+        </rule>
+        <rule>
+            <name>SimplifyBooleanExpressions</name>
+            <ruleset>Design Rules</ruleset>
+        </rule>
+        <rule>
+            <name>SwitchStmtsShouldHaveDefault</name>
+            <ruleset>Design Rules</ruleset>
+        </rule>
+        <rule>
+            <name>AvoidDeeplyNestedIfStmts</name>
+            <ruleset>Design Rules</ruleset>
+        </rule>
+        <rule>
+            <name>AvoidReassigningParameters</name>
+            <ruleset>Design Rules</ruleset>
+        </rule>
+        <rule>
+            <name>SwitchDensity</name>
+            <ruleset>Design Rules</ruleset>
+        </rule>
+        <rule>
+            <name>ConstructorCallsOverridableMethod</name>
+            <ruleset>Design Rules</ruleset>
+        </rule>
+        <rule>
+            <name>AccessorClassGeneration</name>
+            <ruleset>Design Rules</ruleset>
+        </rule>
+        <rule>
+            <name>FinalFieldCouldBeStatic</name>
+            <ruleset>Design Rules</ruleset>
+        </rule>
+        <rule>
+            <name>CloseResource</name>
+            <ruleset>Design Rules</ruleset>
+        </rule>
+        <rule>
+            <name>NonStaticInitializer</name>
+            <ruleset>Design Rules</ruleset>
+        </rule>
+        <rule>
+            <name>DefaultLabelNotLastInSwitchStmt</name>
+            <ruleset>Design Rules</ruleset>
+        </rule>
+        <rule>
+            <name>NonCaseLabelInSwitchStatement</name>
+            <ruleset>Design Rules</ruleset>
+        </rule>
+        <rule>
+            <name>OptimizableToArrayCall</name>
+            <ruleset>Design Rules</ruleset>
+        </rule>
+        <rule>
+            <name>BadComparison</name>
+            <ruleset>Design Rules</ruleset>
+        </rule>
+        <rule>
+            <name>EqualsNull</name>
+            <ruleset>Design Rules</ruleset>
+        </rule>
+        <rule>
+            <name>ConfusingTernary</name>
+            <ruleset>Design Rules</ruleset>
+        </rule>
+        <rule>
+            <name>InstantiationToGetClass</name>
+            <ruleset>Design Rules</ruleset>
+        </rule>
+        <rule>
+            <name>IdempotentOperations</name>
+            <ruleset>Design Rules</ruleset>
+        </rule>
+        <rule>
+            <name>SimpleDateFormatNeedsLocale</name>
+            <ruleset>Design Rules</ruleset>
+        </rule>
+        <rule>
+            <name>ImmutableField</name>
+            <ruleset>Design Rules</ruleset>
+        </rule>
+        <rule>
+            <name>UseLocaleWithCaseConversions</name>
+            <ruleset>Design Rules</ruleset>
+        </rule>
+        <rule>
+            <name>AvoidProtectedFieldInFinalClass</name>
+            <ruleset>Design Rules</ruleset>
+        </rule>
+        <rule>
+            <name>AssignmentToNonFinalStatic</name>
+            <ruleset>Design Rules</ruleset>
+        </rule>
+        <rule>
+            <name>MissingStaticMethodInNonInstantiatableClass</name>
+            <ruleset>Design Rules</ruleset>
+        </rule>
+        <rule>
+            <name>AvoidSynchronizedAtMethodLevel</name>
+            <ruleset>Design Rules</ruleset>
+        </rule>
+        <rule>
+            <name>MissingBreakInSwitch</name>
+            <ruleset>Design Rules</ruleset>
+        </rule>
+        <rule>
+            <name>UseNotifyAllInsteadOfNotify</name>
+            <ruleset>Design Rules</ruleset>
+        </rule>
+        <rule>
+            <name>AvoidInstanceofChecksInCatchClause</name>
+            <ruleset>Design Rules</ruleset>
+        </rule>
+        <rule>
+            <name>AbstractClassWithoutAbstractMethod</name>
+            <ruleset>Design Rules</ruleset>
+        </rule>
+        <rule>
+            <name>SimplifyConditional</name>
+            <ruleset>Design Rules</ruleset>
+        </rule>
+        <rule>
+            <name>CompareObjectsWithEquals</name>
+            <ruleset>Design Rules</ruleset>
+        </rule>
+        <rule>
+            <name>PositionLiteralsFirstInComparisons</name>
+            <ruleset>Design Rules</ruleset>
+        </rule>
+        <rule>
+            <name>UnnecessaryLocalBeforeReturn</name>
+            <ruleset>Design Rules</ruleset>
+        </rule>
+        <rule>
+            <name>NonThreadSafeSingleton</name>
+            <ruleset>Design Rules</ruleset>
+        </rule>
+        <rule>
+            <name>UncommentedEmptyMethod</name>
+            <ruleset>Design Rules</ruleset>
+        </rule>
+        <rule>
+            <name>UncommentedEmptyConstructor</name>
+            <ruleset>Design Rules</ruleset>
+        </rule>
+        <rule>
+            <name>AvoidConstantsInterface</name>
+            <ruleset>Design Rules</ruleset>
+        </rule>
+        <rule>
+            <name>UnsynchronizedStaticDateFormatter</name>
+            <ruleset>Design Rules</ruleset>
+        </rule>
+        <rule>
+            <name>PreserveStackTrace</name>
+            <ruleset>Design Rules</ruleset>
+        </rule>
+        <rule>
+            <name>UseCollectionIsEmpty</name>
+            <ruleset>Design Rules</ruleset>
+        </rule>
+        <rule>
+            <name>ClassWithOnlyPrivateConstructorsShouldBeFinal</name>
+            <ruleset>Design Rules</ruleset>
+        </rule>
+        <rule>
+            <name>EmptyMethodInAbstractClassShouldBeAbstract</name>
+            <ruleset>Design Rules</ruleset>
+        </rule>
+        <rule>
+            <name>SingularField</name>
+            <ruleset>Design Rules</ruleset>
+        </rule>
+        <rule>
+            <name>ReturnEmptyArrayRatherThanNull</name>
+            <ruleset>Design Rules</ruleset>
+        </rule>
+        <rule>
+            <name>AbstractClassWithoutAnyMethod</name>
+            <ruleset>Design Rules</ruleset>
+        </rule>
+        <rule>
+            <name>TooFewBranchesForASwitchStatement</name>
+            <ruleset>Design Rules</ruleset>
+        </rule>
+        <rule>
+            <name>AvoidCatchingThrowable</name>
+            <ruleset>Strict Exception Rules</ruleset>
+        </rule>
+        <rule>
+            <name>SignatureDeclareThrowsException</name>
+            <ruleset>Strict Exception Rules</ruleset>
+        </rule>
+        <rule>
+            <name>ExceptionAsFlowControl</name>
+            <ruleset>Strict Exception Rules</ruleset>
+        </rule>
+        <rule>
+            <name>AvoidCatchingNPE</name>
+            <ruleset>Strict Exception Rules</ruleset>
+        </rule>
+        <rule>
+            <name>AvoidThrowingRawExceptionTypes</name>
+            <ruleset>Strict Exception Rules</ruleset>
+        </rule>
+        <rule>
+            <name>AvoidThrowingNullPointerException</name>
+            <ruleset>Strict Exception Rules</ruleset>
+        </rule>
+        <rule>
+            <name>AvoidRethrowingException</name>
+            <ruleset>Strict Exception Rules</ruleset>
+        </rule>
+        <rule>
+            <name>DoNotExtendJavaLangError</name>
+            <ruleset>Strict Exception Rules</ruleset>
+        </rule>
+        <rule>
+            <name>DoNotThrowExceptionInFinally</name>
+            <ruleset>Strict Exception Rules</ruleset>
+        </rule>
+        <rule>
+            <name>AvoidThrowingNewInstanceOfSameException</name>
+            <ruleset>Strict Exception Rules</ruleset>
+        </rule>
+        <rule>
+            <name>UnusedPrivateField</name>
+            <ruleset>Unused Code Rules</ruleset>
+        </rule>
+        <rule>
+            <name>UnusedLocalVariable</name>
+            <ruleset>Unused Code Rules</ruleset>
+        </rule>
+        <rule>
+            <name>UnusedPrivateMethod</name>
+            <ruleset>Unused Code Rules</ruleset>
+        </rule>
+        <rule>
+            <name>UnusedFormalParameter</name>
+            <ruleset>Unused Code Rules</ruleset>
+        </rule>
+        <rule>
+            <name>MoreThanOneLogger</name>
+            <ruleset>Java Logging Rules</ruleset>
+        </rule>
+        <rule>
+            <name>LoggerIsNotStaticFinal</name>
+            <ruleset>Java Logging Rules</ruleset>
+        </rule>
+        <rule>
+            <name>SystemPrintln</name>
+            <ruleset>Java Logging Rules</ruleset>
+        </rule>
+        <rule>
+            <name>AvoidPrintStackTrace</name>
+            <ruleset>Java Logging Rules</ruleset>
+        </rule>
+        <rule>
+            <name>AvoidDuplicateLiterals</name>
+            <ruleset>String and StringBuffer Rules</ruleset>
+        </rule>
+        <rule>
+            <name>StringInstantiation</name>
+            <ruleset>String and StringBuffer Rules</ruleset>
+        </rule>
+        <rule>
+            <name>StringToString</name>
+            <ruleset>String and StringBuffer Rules</ruleset>
+        </rule>
+        <rule>
+            <name>InefficientStringBuffering</name>
+            <ruleset>String and StringBuffer Rules</ruleset>
+        </rule>
+        <rule>
+            <name>UnnecessaryCaseChange</name>
+            <ruleset>String and StringBuffer Rules</ruleset>
+        </rule>
+        <rule>
+            <name>UseStringBufferLength</name>
+            <ruleset>String and StringBuffer Rules</ruleset>
+        </rule>
+        <rule>
+            <name>AppendCharacterWithChar</name>
+            <ruleset>String and StringBuffer Rules</ruleset>
+        </rule>
+        <rule>
+            <name>ConsecutiveLiteralAppends</name>
+            <ruleset>String and StringBuffer Rules</ruleset>
+        </rule>
+        <rule>
+            <name>UseIndexOfChar</name>
+            <ruleset>String and StringBuffer Rules</ruleset>
+        </rule>
+        <rule>
+            <name>InefficientEmptyStringCheck</name>
+            <ruleset>String and StringBuffer Rules</ruleset>
+        </rule>
+        <rule>
+            <name>InsufficientStringBufferDeclaration</name>
+            <ruleset>String and StringBuffer Rules</ruleset>
+        </rule>
+        <rule>
+            <name>UselessStringValueOf</name>
+            <ruleset>String and StringBuffer Rules</ruleset>
+        </rule>
+        <rule>
+            <name>StringBufferInstantiationWithChar</name>
+            <ruleset>String and StringBuffer Rules</ruleset>
+        </rule>
+        <rule>
+            <name>UseEqualsToCompareStrings</name>
+            <ruleset>String and StringBuffer Rules</ruleset>
+        </rule>
+        <rule>
+            <name>AvoidStringBufferField</name>
+            <ruleset>String and StringBuffer Rules</ruleset>
+        </rule>
+        <rule>
+            <name>ReplaceVectorWithList</name>
+            <ruleset>Migration Rules</ruleset>
+        </rule>
+        <rule>
+            <name>ReplaceHashtableWithMap</name>
+            <ruleset>Migration Rules</ruleset>
+        </rule>
+        <rule>
+            <name>ReplaceEnumerationWithIterator</name>
+            <ruleset>Migration Rules</ruleset>
+        </rule>
+        <rule>
+            <name>AvoidEnumAsIdentifier</name>
+            <ruleset>Migration Rules</ruleset>
+        </rule>
+        <rule>
+            <name>AvoidAssertAsIdentifier</name>
+            <ruleset>Migration Rules</ruleset>
+        </rule>
+        <rule>
+            <name>IntegerInstantiation</name>
+            <ruleset>Migration Rules</ruleset>
+        </rule>
+        <rule>
+            <name>ByteInstantiation</name>
+            <ruleset>Migration Rules</ruleset>
+        </rule>
+        <rule>
+            <name>ShortInstantiation</name>
+            <ruleset>Migration Rules</ruleset>
+        </rule>
+        <rule>
+            <name>LongInstantiation</name>
+            <ruleset>Migration Rules</ruleset>
+        </rule>
+        <rule>
+            <name>JUnit4TestShouldUseBeforeAnnotation</name>
+            <ruleset>Migration Rules</ruleset>
+        </rule>
+        <rule>
+            <name>JUnit4TestShouldUseAfterAnnotation</name>
+            <ruleset>Migration Rules</ruleset>
+        </rule>
+        <rule>
+            <name>JUnit4TestShouldUseTestAnnotation</name>
+            <ruleset>Migration Rules</ruleset>
+        </rule>
+        <rule>
+            <name>JUnit4SuitesShouldUseSuiteAnnotation</name>
+            <ruleset>Migration Rules</ruleset>
+        </rule>
+        <rule>
+            <name>JUnitUseExpected</name>
+            <ruleset>Migration Rules</ruleset>
+        </rule>
+        <rule>
+            <name>UseProperClassLoader</name>
+            <ruleset>J2EE Rules</ruleset>
+        </rule>
+        <rule>
+            <name>MDBAndSessionBeanNamingConvention</name>
+            <ruleset>J2EE Rules</ruleset>
+        </rule>
+        <rule>
+            <name>RemoteSessionInterfaceNamingConvention</name>
+            <ruleset>J2EE Rules</ruleset>
+        </rule>
+        <rule>
+            <name>LocalInterfaceSessionNamingConvention</name>
+            <ruleset>J2EE Rules</ruleset>
+        </rule>
+        <rule>
+            <name>LocalHomeNamingConvention</name>
+            <ruleset>J2EE Rules</ruleset>
+        </rule>
+        <rule>
+            <name>RemoteInterfaceNamingConvention</name>
+            <ruleset>J2EE Rules</ruleset>
+        </rule>
+        <rule>
+            <name>DoNotCallSystemExit</name>
+            <ruleset>J2EE Rules</ruleset>
+        </rule>
+        <rule>
+            <name>StaticEJBFieldShouldBeFinal</name>
+            <ruleset>J2EE Rules</ruleset>
+        </rule>
+        <rule>
+            <name>DoNotUseThreads</name>
+            <ruleset>J2EE Rules</ruleset>
+        </rule>
+        <rule>
+            <name>LocalVariableCouldBeFinal</name>
+            <ruleset>Optimization Rules</ruleset>
+        </rule>
+        <rule>
+            <name>MethodArgumentCouldBeFinal</name>
+            <ruleset>Optimization Rules</ruleset>
+        </rule>
+        <rule>
+            <name>AvoidInstantiatingObjectsInLoops</name>
+            <ruleset>Optimization Rules</ruleset>
+        </rule>
+        <rule>
+            <name>UseArrayListInsteadOfVector</name>
+            <ruleset>Optimization Rules</ruleset>
+        </rule>
+        <rule>
+            <name>SimplifyStartsWith</name>
+            <ruleset>Optimization Rules</ruleset>
+        </rule>
+        <rule>
+            <name>UseStringBufferForStringAppends</name>
+            <ruleset>Optimization Rules</ruleset>
+        </rule>
+        <rule>
+            <name>UseArraysAsList</name>
+            <ruleset>Optimization Rules</ruleset>
+        </rule>
+        <rule>
+            <name>AvoidArrayLoops</name>
+            <ruleset>Optimization Rules</ruleset>
+        </rule>
+        <rule>
+            <name>UnnecessaryWrapperObjectCreation</name>
+            <ruleset>Optimization Rules</ruleset>
+        </rule>
+        <rule>
+            <name>AddEmptyString</name>
+            <ruleset>Optimization Rules</ruleset>
+        </rule>
+        <rule>
+            <name>EmptyCatchBlock</name>
+            <ruleset>Basic Rules</ruleset>
+        </rule>
+        <rule>
+            <name>EmptyIfStmt</name>
+            <ruleset>Basic Rules</ruleset>
+        </rule>
+        <rule>
+            <name>EmptyWhileStmt</name>
+            <ruleset>Basic Rules</ruleset>
+        </rule>
+        <rule>
+            <name>EmptyTryBlock</name>
+            <ruleset>Basic Rules</ruleset>
+        </rule>
+        <rule>
+            <name>EmptyFinallyBlock</name>
+            <ruleset>Basic Rules</ruleset>
+        </rule>
+        <rule>
+            <name>EmptySwitchStatements</name>
+            <ruleset>Basic Rules</ruleset>
+        </rule>
+        <rule>
+            <name>JumbledIncrementer</name>
+            <ruleset>Basic Rules</ruleset>
+        </rule>
+        <rule>
+            <name>ForLoopShouldBeWhileLoop</name>
+            <ruleset>Basic Rules</ruleset>
+        </rule>
+        <rule>
+            <name>UnnecessaryConversionTemporary</name>
+            <ruleset>Basic Rules</ruleset>
+        </rule>
+        <rule>
+            <name>OverrideBothEqualsAndHashcode</name>
+            <ruleset>Basic Rules</ruleset>
+        </rule>
+        <rule>
+            <name>DoubleCheckedLocking</name>
+            <ruleset>Basic Rules</ruleset>
+        </rule>
+        <rule>
+            <name>ReturnFromFinallyBlock</name>
+            <ruleset>Basic Rules</ruleset>
+        </rule>
+        <rule>
+            <name>EmptySynchronizedBlock</name>
+            <ruleset>Basic Rules</ruleset>
+        </rule>
+        <rule>
+            <name>UnnecessaryReturn</name>
+            <ruleset>Basic Rules</ruleset>
+        </rule>
+        <rule>
+            <name>EmptyStaticInitializer</name>
+            <ruleset>Basic Rules</ruleset>
+        </rule>
+        <rule>
+            <name>UnconditionalIfStatement</name>
+            <ruleset>Basic Rules</ruleset>
+        </rule>
+        <rule>
+            <name>EmptyStatementNotInLoop</name>
+            <ruleset>Basic Rules</ruleset>
+        </rule>
+        <rule>
+            <name>BooleanInstantiation</name>
+            <ruleset>Basic Rules</ruleset>
+        </rule>
+        <rule>
+            <name>UnnecessaryFinalModifier</name>
+            <ruleset>Basic Rules</ruleset>
+        </rule>
+        <rule>
+            <name>CollapsibleIfStatements</name>
+            <ruleset>Basic Rules</ruleset>
+        </rule>
+        <rule>
+            <name>UselessOverridingMethod</name>
+            <ruleset>Basic Rules</ruleset>
+        </rule>
+        <rule>
+            <name>ClassCastExceptionWithToArray</name>
+            <ruleset>Basic Rules</ruleset>
+        </rule>
+        <rule>
+            <name>AvoidDecimalLiteralsInBigDecimalConstructor</name>
+            <ruleset>Basic Rules</ruleset>
+        </rule>
+        <rule>
+            <name>UselessOperationOnImmutable</name>
+            <ruleset>Basic Rules</ruleset>
+        </rule>
+        <rule>
+            <name>MisplacedNullCheck</name>
+            <ruleset>Basic Rules</ruleset>
+        </rule>
+        <rule>
+            <name>UnusedNullCheckInEquals</name>
+            <ruleset>Basic Rules</ruleset>
+        </rule>
+        <rule>
+            <name>AvoidThreadGroup</name>
+            <ruleset>Basic Rules</ruleset>
+        </rule>
+        <rule>
+            <name>BrokenNullCheck</name>
+            <ruleset>Basic Rules</ruleset>
+        </rule>
+        <rule>
+            <name>BigIntegerInstantiation</name>
+            <ruleset>Basic Rules</ruleset>
+        </rule>
+        <rule>
+            <name>AvoidUsingOctalValues</name>
+            <ruleset>Basic Rules</ruleset>
+        </rule>
+        <rule>
+            <name>AvoidUsingHardCodedIP</name>
+            <ruleset>Basic Rules</ruleset>
+        </rule>
+        <rule>
+            <name>CheckResultSet</name>
+            <ruleset>Basic Rules</ruleset>
+        </rule>
+        <rule>
+            <name>AvoidMultipleUnaryOperators</name>
+            <ruleset>Basic Rules</ruleset>
+        </rule>
+        <rule>
+            <name>EmptyInitializer</name>
+            <ruleset>Basic Rules</ruleset>
+        </rule>
+        <rule>
+            <name>MethodReturnsInternalArray</name>
+            <ruleset>Security Code Guidelines</ruleset>
+        </rule>
+        <rule>
+            <name>ArrayIsStoredDirectly</name>
+            <ruleset>Security Code Guidelines</ruleset>
+        </rule>
+        <rule>
+            <name>CouplingBetweenObjects</name>
+            <ruleset>Coupling Rules</ruleset>
+        </rule>
+        <rule>
+            <name>ExcessiveImports</name>
+            <ruleset>Coupling Rules</ruleset>
+        </rule>
+        <rule>
+            <name>LooseCoupling</name>
+            <ruleset>Coupling Rules</ruleset>
+        </rule>
+        <rule>
+            <name>DuplicateImports</name>
+            <ruleset>Import Statement Rules</ruleset>
+        </rule>
+        <rule>
+            <name>DontImportJavaLang</name>
+            <ruleset>Import Statement Rules</ruleset>
+        </rule>
+        <rule>
+            <name>UnusedImports</name>
+            <ruleset>Import Statement Rules</ruleset>
+        </rule>
+        <rule>
+            <name>ImportFromSamePackage</name>
+            <ruleset>Import Statement Rules</ruleset>
+        </rule>
+        <rule>
+            <name>TooManyStaticImports</name>
+            <ruleset>Import Statement Rules</ruleset>
+        </rule>
+        <rule>
+            <name>JUnitStaticSuite</name>
+            <ruleset>JUnit Rules</ruleset>
+        </rule>
+        <rule>
+            <name>JUnitSpelling</name>
+            <ruleset>JUnit Rules</ruleset>
+        </rule>
+        <rule>
+            <name>JUnitAssertionsShouldIncludeMessage</name>
+            <ruleset>JUnit Rules</ruleset>
+        </rule>
+        <rule>
+            <name>JUnitTestsShouldIncludeAssert</name>
+            <ruleset>JUnit Rules</ruleset>
+        </rule>
+        <rule>
+            <name>TestClassWithoutTestCases</name>
+            <ruleset>JUnit Rules</ruleset>
+        </rule>
+        <rule>
+            <name>UnnecessaryBooleanAssertion</name>
+            <ruleset>JUnit Rules</ruleset>
+        </rule>
+        <rule>
+            <name>UseAssertEqualsInsteadOfAssertTrue</name>
+            <ruleset>JUnit Rules</ruleset>
+        </rule>
+        <rule>
+            <name>UseAssertSameInsteadOfAssertTrue</name>
+            <ruleset>JUnit Rules</ruleset>
+        </rule>
+        <rule>
+            <name>UseAssertNullInsteadOfAssertTrue</name>
+            <ruleset>JUnit Rules</ruleset>
+        </rule>
+        <rule>
+            <name>SimplifyBooleanAssertion</name>
+            <ruleset>JUnit Rules</ruleset>
+        </rule>
+        <rule>
+            <name>UnnecessaryConstructor</name>
+            <ruleset>Controversial Rules</ruleset>
+        </rule>
+        <rule>
+            <name>NullAssignment</name>
+            <ruleset>Controversial Rules</ruleset>
+        </rule>
+        <rule>
+            <name>OnlyOneReturn</name>
+            <ruleset>Controversial Rules</ruleset>
+        </rule>
+        <rule>
+            <name>UnusedModifier</name>
+            <ruleset>Controversial Rules</ruleset>
+        </rule>
+        <rule>
+            <name>AssignmentInOperand</name>
+            <ruleset>Controversial Rules</ruleset>
+        </rule>
+        <rule>
+            <name>AtLeastOneConstructor</name>
+            <ruleset>Controversial Rules</ruleset>
+        </rule>
+        <rule>
+            <name>DontImportSun</name>
+            <ruleset>Controversial Rules</ruleset>
+        </rule>
+        <rule>
+            <name>SuspiciousOctalEscape</name>
+            <ruleset>Controversial Rules</ruleset>
+        </rule>
+        <rule>
+            <name>CallSuperInConstructor</name>
+            <ruleset>Controversial Rules</ruleset>
+        </rule>
+        <rule>
+            <name>UnnecessaryParentheses</name>
+            <ruleset>Controversial Rules</ruleset>
+        </rule>
+        <rule>
+            <name>DefaultPackage</name>
+            <ruleset>Controversial Rules</ruleset>
+        </rule>
+        <rule>
+            <name>BooleanInversion</name>
+            <ruleset>Controversial Rules</ruleset>
+        </rule>
+        <rule>
+            <name>DataflowAnomalyAnalysis</name>
+            <ruleset>Controversial Rules</ruleset>
+        </rule>
+        <rule>
+            <name>AvoidFinalLocalVariable</name>
+            <ruleset>Controversial Rules</ruleset>
+        </rule>
+        <rule>
+            <name>AvoidUsingShortType</name>
+            <ruleset>Controversial Rules</ruleset>
+        </rule>
+        <rule>
+            <name>AvoidUsingVolatile</name>
+            <ruleset>Controversial Rules</ruleset>
+        </rule>
+        <rule>
+            <name>AvoidUsingNativeCode</name>
+            <ruleset>Controversial Rules</ruleset>
+        </rule>
+        <rule>
+            <name>AvoidAccessibilityAlteration</name>
+            <ruleset>Controversial Rules</ruleset>
+        </rule>
+        <rule>
+            <name>DoNotCallGarbageCollectionExplicitly</name>
+            <ruleset>Controversial Rules</ruleset>
+        </rule>
+        <rule>
+            <name>ShortVariable</name>
+            <ruleset>Naming Rules</ruleset>
+        </rule>
+        <rule>
+            <name>LongVariable</name>
+            <ruleset>Naming Rules</ruleset>
+        </rule>
+        <rule>
+            <name>ShortMethodName</name>
+            <ruleset>Naming Rules</ruleset>
+        </rule>
+        <rule>
+            <name>VariableNamingConventions</name>
+            <ruleset>Naming Rules</ruleset>
+        </rule>
+        <rule>
+            <name>MethodNamingConventions</name>
+            <ruleset>Naming Rules</ruleset>
+        </rule>
+        <rule>
+            <name>ClassNamingConventions</name>
+            <ruleset>Naming Rules</ruleset>
+        </rule>
+        <rule>
+            <name>AbstractNaming</name>
+            <ruleset>Naming Rules</ruleset>
+        </rule>
+        <rule>
+            <name>AvoidDollarSigns</name>
+            <ruleset>Naming Rules</ruleset>
+        </rule>
+        <rule>
+            <name>MethodWithSameNameAsEnclosingClass</name>
+            <ruleset>Naming Rules</ruleset>
+        </rule>
+        <rule>
+            <name>SuspiciousHashcodeMethodName</name>
+            <ruleset>Naming Rules</ruleset>
+        </rule>
+        <rule>
+            <name>SuspiciousConstantFieldName</name>
+            <ruleset>Naming Rules</ruleset>
+        </rule>
+        <rule>
+            <name>SuspiciousEqualsMethodName</name>
+            <ruleset>Naming Rules</ruleset>
+        </rule>
+        <rule>
+            <name>AvoidFieldNameMatchingTypeName</name>
+            <ruleset>Naming Rules</ruleset>
+        </rule>
+        <rule>
+            <name>AvoidFieldNameMatchingMethodName</name>
+            <ruleset>Naming Rules</ruleset>
+        </rule>
+        <rule>
+            <name>NoPackage</name>
+            <ruleset>Naming Rules</ruleset>
+        </rule>
+        <rule>
+            <name>PackageCase</name>
+            <ruleset>Naming Rules</ruleset>
+        </rule>
+        <rule>
+            <name>MisleadingVariableName</name>
+            <ruleset>Naming Rules</ruleset>
+        </rule>
+        <rule>
+            <name>BooleanGetMethodName</name>
+            <ruleset>Naming Rules</ruleset>
+        </rule>
+        <rule>
+            <name>NPathComplexity</name>
+            <ruleset>Code Size Rules</ruleset>
+        </rule>
+        <rule>
+            <name>ExcessiveMethodLength</name>
+            <ruleset>Code Size Rules</ruleset>
+        </rule>
+        <rule>
+            <name>ExcessiveParameterList</name>
+            <ruleset>Code Size Rules</ruleset>
+        </rule>
+        <rule>
+            <name>ExcessiveClassLength</name>
+            <ruleset>Code Size Rules</ruleset>
+        </rule>
+        <rule>
+            <name>CyclomaticComplexity</name>
+            <ruleset>Code Size Rules</ruleset>
+        </rule>
+        <rule>
+            <name>ExcessivePublicCount</name>
+            <ruleset>Code Size Rules</ruleset>
+        </rule>
+        <rule>
+            <name>TooManyFields</name>
+            <ruleset>Code Size Rules</ruleset>
+        </rule>
+        <rule>
+            <name>NcssMethodCount</name>
+            <ruleset>Code Size Rules</ruleset>
+        </rule>
+        <rule>
+            <name>NcssTypeCount</name>
+            <ruleset>Code Size Rules</ruleset>
+        </rule>
+        <rule>
+            <name>NcssConstructorCount</name>
+            <ruleset>Code Size Rules</ruleset>
+        </rule>
+        <rule>
+            <name>TooManyMethods</name>
+            <ruleset>Code Size Rules</ruleset>
+        </rule>
+        <rule>
+            <name>EmptyFinalizer</name>
+            <ruleset>Finalizer Rules</ruleset>
+        </rule>
+        <rule>
+            <name>FinalizeOnlyCallsSuperFinalize</name>
+            <ruleset>Finalizer Rules</ruleset>
+        </rule>
+        <rule>
+            <name>FinalizeOverloaded</name>
+            <ruleset>Finalizer Rules</ruleset>
+        </rule>
+        <rule>
+            <name>FinalizeDoesNotCallSuperFinalize</name>
+            <ruleset>Finalizer Rules</ruleset>
+        </rule>
+        <rule>
+            <name>FinalizeShouldBeProtected</name>
+            <ruleset>Finalizer Rules</ruleset>
+        </rule>
+        <rule>
+            <name>AvoidCallingFinalize</name>
+            <ruleset>Finalizer Rules</ruleset>
+        </rule>
+        <rule>
+            <name>UseCorrectExceptionLogging</name>
+            <ruleset>Jakarta Commons Logging Rules</ruleset>
+        </rule>
+        <rule>
+            <name>ProperLogger</name>
+            <ruleset>Jakarta Commons Logging Rules</ruleset>
+        </rule>
+        <rule>
+            <name>BeanMembersShouldSerialize</name>
+            <ruleset>JavaBean Rules</ruleset>
+        </rule>
+        <rule>
+            <name>MissingSerialVersionUID</name>
+            <ruleset>JavaBean Rules</ruleset>
+        </rule>
+        <rule>
+            <name>ProperCloneImplementation</name>
+            <ruleset>Clone Implementation Rules</ruleset>
+        </rule>
+        <rule>
+            <name>CloneThrowsCloneNotSupportedException</name>
+            <ruleset>Clone Implementation Rules</ruleset>
+        </rule>
+        <rule>
+            <name>CloneMethodMustImplementCloneable</name>
+            <ruleset>Clone Implementation Rules</ruleset>
+        </rule>
+    </rules>
+    <includeDerivedFiles>false</includeDerivedFiles>
+    <violationsAsErrors>true</violationsAsErrors>
+</pmd>

http://git-wip-us.apache.org/repos/asf/flex-utilities/blob/b0fc5f17/FlexPMD/flex-pmd-metrics-maven-plugin/pom.xml
----------------------------------------------------------------------
diff --git a/FlexPMD/flex-pmd-metrics-maven-plugin/pom.xml b/FlexPMD/flex-pmd-metrics-maven-plugin/pom.xml
new file mode 100644
index 0000000..bdc00ef
--- /dev/null
+++ b/FlexPMD/flex-pmd-metrics-maven-plugin/pom.xml
@@ -0,0 +1,102 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+
+  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.
+
+-->
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+	<modelVersion>4.0.0</modelVersion>
+	<groupId>com.adobe.ac</groupId>
+	<artifactId>flex-pmd-metrics-maven-plugin</artifactId>
+	<name>Adobe Flex Metrics Maven plugin</name>
+	<packaging>maven-plugin</packaging>
+
+  <parent>
+	<groupId>com.adobe.ac</groupId>
+	<artifactId>flex-pmd-java-parent</artifactId>
+	<version>1.3-SNAPSHOT</version>
+	<relativePath>../flex-pmd-java-parent/pom.xml</relativePath>
+  </parent>
+  
+	<dependencies>
+		<dependency>
+			<groupId>org.apache.maven</groupId>
+			<artifactId>maven-plugin-api</artifactId>
+			<version>${maven-plugin-api.version}</version>
+		</dependency>
+		<dependency>
+			<groupId>org.apache.maven.reporting</groupId>
+			<artifactId>maven-reporting-impl</artifactId>
+			<version>${maven-reporting-impl.version}</version>
+		</dependency>
+		<dependency>
+			<groupId>org.apache.maven.plugins</groupId>
+			<artifactId>maven-pmd-plugin</artifactId>
+			<version>${maven-pmd-plugin.version}</version>
+			<type>maven-plugin</type>
+		</dependency>
+
+		<dependency>
+			<groupId>${project.groupId}</groupId>
+			<version>${project.parent.version}</version>
+			<artifactId>flex-pmd-metrics</artifactId>
+		</dependency>
+
+
+		<dependency>
+			<groupId>${project.parent.groupId}</groupId>
+			<artifactId>flex-pmd-test-resources</artifactId>
+			<version>${project.parent.version}</version>
+			<classifier>resources</classifier>
+			<type>zip</type>
+			<scope>provided</scope>
+		</dependency>
+
+	</dependencies>
+
+	<build>
+
+		<testResources>
+			<testResource>
+				<directory>${project.build.directory}/test/generated-resources</directory>
+			</testResource>
+		</testResources>
+
+		<plugins>
+
+			<plugin>
+				<groupId>org.apache.maven.plugins</groupId>
+				<artifactId>maven-dependency-plugin</artifactId>
+				<executions>
+					<execution>
+						<id>unpack-test-resources</id>
+						<phase>generate-resources</phase>
+						<goals>
+							<goal>unpack-dependencies</goal>
+						</goals>
+						<configuration>
+							<includeGroupIds>${project.groupId}</includeGroupIds>
+							<includes>**/*.as,**/*.mxml</includes>
+							<outputDirectory>${project.build.directory}/test/generated-resources</outputDirectory>
+							<excludeTransitive>true</excludeTransitive>
+						</configuration>
+					</execution>
+				</executions>
+			</plugin>
+		</plugins>
+	</build>
+	
+</project>

http://git-wip-us.apache.org/repos/asf/flex-utilities/blob/b0fc5f17/FlexPMD/flex-pmd-metrics-maven-plugin/src/main/java/com/adobe/ac/pmd/metrics/maven/FlexMetricsMojo.java
----------------------------------------------------------------------
diff --git a/FlexPMD/flex-pmd-metrics-maven-plugin/src/main/java/com/adobe/ac/pmd/metrics/maven/FlexMetricsMojo.java b/FlexPMD/flex-pmd-metrics-maven-plugin/src/main/java/com/adobe/ac/pmd/metrics/maven/FlexMetricsMojo.java
new file mode 100644
index 0000000..323c976
--- /dev/null
+++ b/FlexPMD/flex-pmd-metrics-maven-plugin/src/main/java/com/adobe/ac/pmd/metrics/maven/FlexMetricsMojo.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 com.adobe.ac.pmd.metrics.maven;
+
+import java.io.File;
+import java.util.HashSet;
+import java.util.Iterator;
+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.dom4j.Document;
+import org.dom4j.DocumentException;
+import org.dom4j.Node;
+import org.dom4j.io.SAXReader;
+
+import com.adobe.ac.pmd.LoggerUtils;
+
+/**
+ * @author xagnetti
+ * @goal check
+ * @execute goal="metrics"
+ */
+public final class FlexMetricsMojo extends AbstractMojo
+{
+   /**
+    * CCN Limit, any code with a ccn greater than this number will generate a
+    * violation
+    * 
+    * @parameter default-value="10"
+    * @required
+    */
+   private int     ccnLimit;
+
+   /**
+    * Whether to fail the build if the validation check fails.
+    * 
+    * @parameter default-value="false"
+    * @required
+    */
+   private boolean failOnViolation;
+
+   /**
+    * ncss Limit, any code with a ncss greater than this number will generate a
+    * violation
+    * 
+    * @parameter default-value="100"
+    * @required
+    */
+   private int     ncssLimit;
+
+   /**
+    * Specifies the location of the source files to be used.
+    * 
+    * @parameter expression="${project.build.sourceDirectory}"
+    * @required
+    * @readonly
+    */
+   private File    sourceDirectory;
+
+   /**
+    * Name of the file holding the xml file generated by JavaNCSS
+    * 
+    * @parameter default-value="javancss-raw-report.xml"
+    * @required
+    */
+   private String  tempFileName;
+
+   /**
+    * Specifies the directory where the XML report will be generated.
+    * 
+    * @parameter default-value="${project.build.directory}"
+    * @required
+    */
+   private File    xmlOutputDirectory;
+
+   public FlexMetricsMojo()
+   {
+      super();
+   }
+
+   public FlexMetricsMojo( final File outputDirectoryToBeSet,
+                           final File sourceDirectoryToBeSet )
+   {
+      super();
+      xmlOutputDirectory = outputDirectoryToBeSet;
+      sourceDirectory = sourceDirectoryToBeSet;
+   }
+
+   @SuppressWarnings("unchecked")
+   public void execute() throws MojoExecutionException,
+                        MojoFailureException
+   {
+      new LoggerUtils().loadConfiguration();
+      if ( sourceDirectory != null
+            && sourceDirectory.exists() )
+      {
+         final Set< String > ccnViolation = new HashSet< String >();
+         final Set< String > ncssViolation = new HashSet< String >();
+         final List< Node > methodList = loadDocument().selectNodes( "//javancss/functions/function" );
+
+         for ( final Node node : methodList )
+         {
+            if ( Integer.valueOf( node.valueOf( "ccn" ) ) > ccnLimit )
+            {
+               ccnViolation.add( node.valueOf( "name" ) );
+            }
+            if ( Integer.valueOf( node.valueOf( "ncss" ) ) > ncssLimit )
+            {
+               ncssViolation.add( node.valueOf( "name" ) );
+            }
+         }
+         reportViolation( "ccn",
+                          ccnViolation,
+                          ccnLimit );
+         reportViolation( "ncss",
+                          ncssViolation,
+                          ncssLimit );
+      }
+   }
+
+   public void setCcnLimit( final int ccnLimitToBeSet )
+   {
+      ccnLimit = ccnLimitToBeSet;
+   }
+
+   public void setFailOnViolation( final boolean failOnViolationToBeSet )
+   {
+      failOnViolation = failOnViolationToBeSet;
+   }
+
+   public void setNcssLimit( final int ncssLimitToBeSet )
+   {
+      ncssLimit = ncssLimitToBeSet;
+   }
+
+   public void setTempFileName( final String tempFileNameToBeSet )
+   {
+      tempFileName = tempFileNameToBeSet;
+   }
+
+   public void setXmlOutputDirectory( final File xmlOutputDirectoryToBeSet )
+   {
+      xmlOutputDirectory = xmlOutputDirectoryToBeSet;
+   }
+
+   private Document loadDocument() throws MojoFailureException
+   {
+      final File ncssXmlFile = new File( xmlOutputDirectory
+            + File.separator + tempFileName );
+      try
+      {
+         return new SAXReader().read( ncssXmlFile );
+      }
+      catch ( final DocumentException de )
+      {
+         throw new MojoFailureException( "Can't read javancss xml output file : "
+               + ncssXmlFile, de );
+      }
+   }
+
+   private void reportViolation( final String statName,
+                                 final Set< String > violationSet,
+                                 final int limit ) throws MojoFailureException
+   {
+      getLog().debug( statName
+            + " Violation = " + violationSet.size() );
+      if ( !violationSet.isEmpty() )
+      {
+         final String violationString = "Your code has "
+               + violationSet.size() + " method(s) with a " + statName + " greater than " + limit;
+         getLog().warn( violationString );
+         final Iterator< String > iterator = violationSet.iterator();
+         while ( iterator.hasNext() )
+         {
+            getLog().warn( "    "
+                  + iterator.next() );
+         }
+         if ( failOnViolation )
+         {
+            throw new MojoFailureException( violationString );
+         }
+      }
+   }
+}

http://git-wip-us.apache.org/repos/asf/flex-utilities/blob/b0fc5f17/FlexPMD/flex-pmd-metrics-maven-plugin/src/main/java/com/adobe/ac/pmd/metrics/maven/FlexMetricsReportMojo.java
----------------------------------------------------------------------
diff --git a/FlexPMD/flex-pmd-metrics-maven-plugin/src/main/java/com/adobe/ac/pmd/metrics/maven/FlexMetricsReportMojo.java b/FlexPMD/flex-pmd-metrics-maven-plugin/src/main/java/com/adobe/ac/pmd/metrics/maven/FlexMetricsReportMojo.java
new file mode 100644
index 0000000..ffc3497
--- /dev/null
+++ b/FlexPMD/flex-pmd-metrics-maven-plugin/src/main/java/com/adobe/ac/pmd/metrics/maven/FlexMetricsReportMojo.java
@@ -0,0 +1,414 @@
+/*
+ * 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 com.adobe.ac.pmd.metrics.maven;
+
+import java.io.File;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Locale;
+import java.util.ResourceBundle;
+
+import org.apache.maven.project.MavenProject;
+import org.apache.maven.reporting.AbstractMavenReport;
+import org.apache.maven.reporting.MavenReportException;
+import org.codehaus.doxia.site.renderer.SiteRenderer;
+import org.dom4j.Document;
+import org.dom4j.DocumentException;
+import org.dom4j.io.SAXReader;
+
+import com.adobe.ac.pmd.LoggerUtils;
+import com.adobe.ac.pmd.metrics.maven.generators.NcssAggregateReportGenerator;
+import com.adobe.ac.pmd.metrics.maven.generators.NcssReportGenerator;
+import com.adobe.ac.pmd.metrics.maven.utils.ModuleReport;
+import com.adobe.ac.pmd.metrics.maven.utils.NcssExecuter;
+
+/**
+ * @author xagnetti
+ * @goal metrics
+ */
+public final class FlexMetricsReportMojo extends AbstractMavenReport
+{
+   private static final String OUTPUT_NAME = "javancss";
+
+   private static ResourceBundle getBundle()
+   {
+      return ResourceBundle.getBundle( "flexMetrics" ); // NOPMD
+   }
+
+   /**
+    * Specifies the maximum number of lines to take into account into the
+    * reports.
+    * 
+    * @parameter default-value="5"
+    * @required
+    */
+   private int                  lineThreshold;
+
+   /**
+    * Specifies the factor the mxml files nb of lines will be taken into account
+    * 
+    * @parameter default-value="0"
+    * @required
+    */
+   private double               mxmlFactor;
+
+   /**
+    * Specifies the directory where the HTML report will be generated.
+    * 
+    * @parameter expression="${project.reporting.outputDirectory}"
+    * @required
+    * @readonly
+    */
+   private File                 outputDirectory;
+
+   /**
+    * @parameter expression="${project}"
+    * @required
+    * @readonly
+    */
+   private MavenProject         project;
+
+   /**
+    * The projects in the reactor for aggregation report.
+    * 
+    * @parameter expression="${reactorProjects}"
+    * @readonly
+    */
+   private List< MavenProject > reactorProjects;
+   /**
+    * @parameter 
+    *            expression="${component.org.codehaus.doxia.site.renderer.SiteRenderer}"
+    * @required
+    * @readonly
+    */
+   private SiteRenderer         siteRenderer;
+
+   /**
+    * Specifies the location of the source files to be used.
+    * 
+    * @parameter expression="${project.build.sourceDirectory}"
+    * @required
+    * @readonly
+    */
+   private File                 sourceDirectory;
+
+   /**
+    * Specified the name of the temporary file generated by Javancss prior
+    * report generation.
+    * 
+    * @parameter default-value="javancss-raw-report.xml"
+    * @required
+    */
+   private String               tempFileName;
+
+   /**
+    * Specifies the directory where the XML report will be generated.
+    * 
+    * @parameter default-value="${project.build.directory}"
+    * @required
+    */
+   private File                 xmlOutputDirectory;
+
+   public FlexMetricsReportMojo()
+   {
+      super();
+   }
+
+   public FlexMetricsReportMojo( final MavenProject projectToBeSet,
+                                 final File source,
+                                 final File output )
+   {
+      this();
+      project = projectToBeSet;
+      sourceDirectory = source;
+      outputDirectory = output;
+   }
+
+   public void addReactorProject( final MavenProject project )
+   {
+      if ( reactorProjects == null )
+      {
+         reactorProjects = new ArrayList< MavenProject >();
+      }
+      reactorProjects.add( project );
+   }
+
+   /**
+    * @see org.apache.maven.reporting.MavenReport#execute(java.util.Locale)
+    */
+   @Override
+   public void executeReport( final Locale locale ) throws MavenReportException
+   {
+      new LoggerUtils().loadConfiguration();
+      if ( sourceDirectory != null )
+      {
+         if ( sourceDirectory.exists() )
+         {
+            try
+            {
+               generateSingleReport();
+            }
+            catch ( final DocumentException e )
+            {
+               throw new MavenReportException( e.getMessage(), e );
+            }
+            catch ( final IOException e )
+            {
+               throw new MavenReportException( e.getMessage(), e );
+            }
+         }
+         else
+         {
+            getLog().error( "The source directory is not found "
+                  + sourceDirectory.getAbsolutePath() );
+         }
+      }
+      else
+      {
+         generateAggregateReport( locale );
+      }
+   }
+
+   /**
+    * @see org.apache.maven.reporting.MavenReport#getDescription(java.util.Locale)
+    */
+   public String getDescription( final Locale locale )
+   {
+      return getBundle().getString( "report.ncss.description" );
+   }
+
+   /**
+    * @see org.apache.maven.reporting.MavenReport#getName(java.util.Locale)
+    */
+   public String getName( final Locale locale )
+   {
+      return getBundle().getString( "report.ncss.name" );
+   }
+
+   /**
+    * @see org.apache.maven.reporting.MavenReport#getOutputName()
+    */
+   public String getOutputName()
+   {
+      return OUTPUT_NAME;
+   }
+
+   public void setLineThreshold( final int lineThresholdToBeSet )
+   {
+      lineThreshold = lineThresholdToBeSet;
+   }
+
+   public void setSiteRenderer( final SiteRenderer siteRendererToBeSet )
+   {
+      siteRenderer = siteRendererToBeSet;
+   }
+
+   public void setTempFileName( final String tempFileNameToBeSet )
+   {
+      tempFileName = tempFileNameToBeSet;
+   }
+
+   public void setXmlOutputDirectory( final File xmlOutputDirectoryToBeSet )
+   {
+      xmlOutputDirectory = xmlOutputDirectoryToBeSet;
+   }
+
+   /**
+    * Build a path for the output filename.
+    * 
+    * @return A String representation of the output filename.
+    */
+   /* package */File buildOutputFile()
+   {
+      return new File( getXmlOutputDirectory()
+            + File.separator + tempFileName );
+   }
+
+   /**
+    * @see org.apache.maven.reporting.AbstractMavenReport#getOutputDirectory()
+    */
+   @Override
+   protected String getOutputDirectory()
+   {
+      return outputDirectory.getAbsolutePath();
+   }
+
+   /**
+    * @see org.apache.maven.reporting.AbstractMavenReport#getProject()
+    */
+   @Override
+   protected MavenProject getProject()
+   {
+      return project;
+   }
+
+   /**
+    * @see org.apache.maven.reporting.AbstractMavenReport#getSiteRenderer()
+    */
+   @Override
+   protected SiteRenderer getSiteRenderer()
+   {
+      return siteRenderer;
+   }
+
+   /**
+    * Getter for the source directory
+    * 
+    * @return the source directory as a File object.
+    */
+   protected File getSourceDirectory()
+   {
+      return sourceDirectory;
+   }
+
+   protected String getXmlOutputDirectory()
+   {
+      return xmlOutputDirectory.getAbsolutePath();
+   }
+
+   private void generateAggregateReport( final Locale locale ) throws MavenReportException
+   {
+      final String basedir = project.getBasedir().toString();
+      final String output = xmlOutputDirectory.toString();
+      if ( getLog().isDebugEnabled() )
+      {
+         getLog().debug( "basedir: "
+               + basedir );
+         getLog().debug( "output: "
+               + output );
+      }
+      String relative = null;
+      if ( output.startsWith( basedir ) )
+      {
+         relative = output.substring( basedir.length() + 1 );
+      }
+      else
+      {
+         getLog().error( "Unable to aggregate report because I can't "
+               + "determine the relative location of the XML report" );
+         return;
+      }
+      getLog().debug( "relative: "
+            + relative );
+      final List< ModuleReport > reports = new ArrayList< ModuleReport >();
+
+      if ( reactorProjects != null )
+      {
+         for ( final MavenProject mavenProject : reactorProjects )
+         {
+            final MavenProject child = mavenProject;
+            final File xmlReport = new File( child.getBasedir() // NOPMD
+                  + File.separator + relative, tempFileName );
+            if ( xmlReport.exists() )
+            {
+               reports.add( new ModuleReport( child, loadDocument( xmlReport ) ) ); // NOPMD
+            }
+            else
+            {
+               getLog().debug( "xml file not found: "
+                     + xmlReport );
+            }
+         }
+         getLog().debug( "Aggregating "
+               + reports.size() + " JavaNCSS reports" );
+
+         new NcssAggregateReportGenerator( getSink(), getBundle(), getLog() ).doReport( locale,
+                                                                                        reports,
+                                                                                        lineThreshold );
+      }
+   }
+
+   private void generateSingleReport() throws MavenReportException,
+                                      DocumentException,
+                                      IOException
+   {
+      if ( getLog().isDebugEnabled() )
+      {
+         getLog().debug( "Calling NCSSExecuter with src    : "
+               + sourceDirectory );
+         getLog().debug( "Calling NCSSExecuter with output : "
+               + buildOutputFile() );
+      }
+      // run javaNCss and produce an temp xml file
+      new NcssExecuter( sourceDirectory, buildOutputFile(), mxmlFactor ).execute();
+      if ( !isTempReportGenerated() )
+      {
+         throw new MavenReportException( "Can't process temp ncss xml file." );
+      }
+      // parse the freshly generated file and write the report
+      final NcssReportGenerator reportGenerator = new NcssReportGenerator( getSink(), getBundle(), getLog() );
+      reportGenerator.doReport( loadDocument(),
+                                lineThreshold );
+   }
+
+   /**
+    * Check that the expected temporary file generated by JavaNCSS exists.
+    * 
+    * @return <code>true</code> if the temporary report exists,
+    *         <code>false</code> otherwise.
+    */
+   private boolean isTempReportGenerated()
+   {
+      return buildOutputFile().exists();
+   }
+
+   private Document loadDocument() throws MavenReportException
+   {
+      return loadDocument( buildOutputFile() );
+   }
+
+   /**
+    * Load the xml file generated by javancss. It first tries to load it as is.
+    * If this fails it tries to load it with the forceEncoding parameter which
+    * defaults to the system property "file.encoding". If this latter fails, it
+    * throws a MavenReportException.
+    */
+   private Document loadDocument( final File file ) throws MavenReportException
+   {
+      try
+      {
+         return loadDocument( file,
+                              null );
+      }
+      catch ( final DocumentException ignored )
+      {
+         try
+         {
+            return loadDocument( file,
+                                 System.getProperty( "file.encoding" ) );
+         }
+         catch ( final DocumentException de )
+         {
+            throw new MavenReportException( de.getMessage(), de );
+         }
+      }
+   }
+
+   private Document loadDocument( final File file,
+                                  final String encoding ) throws DocumentException
+   {
+      final SAXReader saxReader = new SAXReader();
+      if ( encoding != null )
+      {
+         saxReader.setEncoding( encoding );
+         getLog().debug( "Loading xml file with encoding : "
+               + encoding );
+      }
+      return saxReader.read( file );
+   }
+}

http://git-wip-us.apache.org/repos/asf/flex-utilities/blob/b0fc5f17/FlexPMD/flex-pmd-metrics-maven-plugin/src/main/java/com/adobe/ac/pmd/metrics/maven/utils/NcssExecuter.java
----------------------------------------------------------------------
diff --git a/FlexPMD/flex-pmd-metrics-maven-plugin/src/main/java/com/adobe/ac/pmd/metrics/maven/utils/NcssExecuter.java b/FlexPMD/flex-pmd-metrics-maven-plugin/src/main/java/com/adobe/ac/pmd/metrics/maven/utils/NcssExecuter.java
new file mode 100644
index 0000000..c26908b
--- /dev/null
+++ b/FlexPMD/flex-pmd-metrics-maven-plugin/src/main/java/com/adobe/ac/pmd/metrics/maven/utils/NcssExecuter.java
@@ -0,0 +1,48 @@
+package com.adobe.ac.pmd.metrics.maven.utils;
+
+/*
+ * Copyright 2004-2005 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 java.io.File;
+import java.io.IOException;
+
+import org.apache.maven.reporting.MavenReportException;
+import org.dom4j.DocumentException;
+
+import com.adobe.ac.pmd.metrics.engine.FlexMetrics;
+
+public final class NcssExecuter
+{
+   private final double mxmlFactor;
+   private final File   outputDirectory;
+   private final File   sourceLocation;
+
+   public NcssExecuter( final File sourceLocationToBeSet,
+                        final File outputDirectoryToBeSet,
+                        final double mxmlFactorToBeSet )
+   {
+      sourceLocation = sourceLocationToBeSet;
+      outputDirectory = outputDirectoryToBeSet;
+      mxmlFactor = mxmlFactorToBeSet;
+   }
+
+   public void execute() throws MavenReportException,
+                        DocumentException,
+                        IOException
+   {
+      new FlexMetrics( sourceLocation, mxmlFactor ).execute( outputDirectory );
+   }
+}

http://git-wip-us.apache.org/repos/asf/flex-utilities/blob/b0fc5f17/FlexPMD/flex-pmd-metrics-maven-plugin/src/main/resources/flexMetrics.properties
----------------------------------------------------------------------
diff --git a/FlexPMD/flex-pmd-metrics-maven-plugin/src/main/resources/flexMetrics.properties b/FlexPMD/flex-pmd-metrics-maven-plugin/src/main/resources/flexMetrics.properties
new file mode 100644
index 0000000..820cd6b
--- /dev/null
+++ b/FlexPMD/flex-pmd-metrics-maven-plugin/src/main/resources/flexMetrics.properties
@@ -0,0 +1,94 @@
+# 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.ncss.name=FlexMetrics report
+report.ncss.description=
+report.ncss.header=
+report.javancss.name=FlexMetrics Report
+report.javancss.description=Code metric analysis.
+report.javancss.title=FlexMetrics Metric Results
+# titles and links
+report.javancss.main.title=FlexMetrics Metric Results
+report.javancss.main.text=The following document contains the results of a FlexMetrics metric analysis.
+report.javancss.module.title=Modules
+report.javancss.module.link=modules
+report.javancss.package.title=Packages
+report.javancss.package.link=package
+report.javancss.package.text=Packages sorted by NCSS.
+report.javancss.object.title=Objects
+report.javancss.object.link=object
+report.javancss.top=TOP
+report.javancss.averages=Averages.
+report.javancss.object.byncss=classes containing the most NCSS.
+report.javancss.object.byfunction=classes containing the most methods.
+report.javancss.function.title=Methods
+report.javancss.function.link=method
+report.javancss.function.byncss=Methods containing the most NCSS.
+report.javancss.explanation.title=Explanations
+report.javancss.explanation.link=explanation
+# headers
+report.javancss.header.module=Module
+report.javancss.header.classe=Classes
+report.javancss.header.function=Methods
+report.javancss.header.ncss=NCSS
+report.javancss.header.javadoc=ASdocs
+report.javancss.header.package=Package
+report.javancss.header.packages=Packages
+report.javancss.header.javadoc_line=ASdoc lines
+report.javancss.header.single_comment=Single lines comment
+report.javancss.header.multi_comment=Multi lines comment
+report.javancss.header.object=Object
+report.javancss.header.ccn=CCN
+# total
+report.javancss.header.totals=Totals
+report.javancss.header.ncsstotal=NCSS total
+report.javancss.header.functiontotal=Methods total
+report.javancss.header.classetotal=Classes total
+# average
+report.javancss.header.averages=Averages
+report.javancss.header.ncssaverage=NCSS average
+report.javancss.header.programncss=Program NCSS
+report.javancss.header.classeaverage=Classes average
+report.javancss.header.functionaverage=Methods average
+report.javancss.header.javadocaverage=ASdocs average
+report.javancss.header.ccnaverage=CCN average
+# explanation
+report.javancss.explanation.ncss.title=Non Commenting Source Statements (NCSS)
+report.javancss.explanation.ncss.paragraph1=Statements for FlexMetrics are not statements as specified in the ECMAScript 4 Language Specification but include all kinds of declarations too. Roughly spoken, NCSS is approximately equivalent to counting ';' and '{' characters in source files.
+report.javancss.explanation.ncss.paragraph2=Not counted are empty statements, empty blocks or semicolons after closing brackets. Of course, comments don't get counted too. Closing brackets also never get counted, the same applies to blocks in general.
+report.javancss.explanation.ncss.paragraph3=In some cases consecutive semicolons are illegal according to the JLS but FlexMetrics still tolerates them. Nevertheless they are never counted as two statements.
+report.javancss.explanation.ccn.title=Cyclomatic Complexity Number (CCN)
+report.javancss.explanation.ccn.paragraph1=CCN is also know as McCabe Metric. There exists a much hyped theory behind it based on graph theory, but it all comes down to simply counting 'if', 'for', 'while' statements etc. in a method. Whenever the control flow of a method splits, the "CCN counter" gets incremented by one.
+report.javancss.explanation.ccn.paragraph2=Each method has a minimum value of 1 per default. For each of the following Java keywords/statements this value gets incremented by one:
+report.javancss.explanation.ccn.paragraph3=Also if the control flow of a method returns abortively the CCNvalue will be incremented by one:
+report.javancss.explanation.ccn.paragraph4=An ordinary return at the end of method will not be counted.
+report.javancss.explanation.ccn.paragraph5=Note that 'else', 'default', and 'finally' don't increment the CCN value any further. On the other hand, a simple method with a 'switch' statement and a huge block of 'case' statements can have a surprisingly high CCN value (still it has the same value when converting a 'switch' block to an equivalent sequence of 'if' statements).
+
+#ncss explanation table
+report.javancss.explanation.ncss.table.examples=Examples
+report.javancss.explanation.ncss.table.comments=Comments
+report.javancss.explanation.ncss.table.package=Package declaration
+report.javancss.explanation.ncss.table.import=Import declaration
+report.javancss.explanation.ncss.table.class=Class declaration
+report.javancss.explanation.ncss.table.interface=Interface declaration
+report.javancss.explanation.ncss.table.field=Field declaration
+report.javancss.explanation.ncss.table.field.comment=No matter how many fields get actually declared through a comma separated list, and no matter if these fields get actually initialized, only one statement is counted. So \"int a, b, c = 5, d = 6;\" gets only +1 count, not four or even six (let me know if there is good reason to count it differently).
+report.javancss.explanation.ncss.table.method=Method declaration
+report.javancss.explanation.ncss.table.constructorD=Constructor declaration
+report.javancss.explanation.ncss.table.constructorI=Constructor invocation
+report.javancss.explanation.ncss.table.statement=Statement declaration
+report.javancss.explanation.ncss.table.statement.comment=expression, if, else, while, do, for, switch, break, continue, return, throw, synchronized, catch, finally
+report.javancss.explanation.ncss.table.label=Label declaration
+report.javancss.explanation.ncss.table.label.comment=normal, case, default

http://git-wip-us.apache.org/repos/asf/flex-utilities/blob/b0fc5f17/FlexPMD/flex-pmd-metrics-maven-plugin/src/test/java/com/adobe/ac/pmd/metrics/maven/FlexMetricsMojoTest.java
----------------------------------------------------------------------
diff --git a/FlexPMD/flex-pmd-metrics-maven-plugin/src/test/java/com/adobe/ac/pmd/metrics/maven/FlexMetricsMojoTest.java b/FlexPMD/flex-pmd-metrics-maven-plugin/src/test/java/com/adobe/ac/pmd/metrics/maven/FlexMetricsMojoTest.java
new file mode 100644
index 0000000..1af28df
--- /dev/null
+++ b/FlexPMD/flex-pmd-metrics-maven-plugin/src/test/java/com/adobe/ac/pmd/metrics/maven/FlexMetricsMojoTest.java
@@ -0,0 +1,60 @@
+/*
+ * 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 com.adobe.ac.pmd.metrics.maven;
+
+import java.io.File;
+
+import org.apache.maven.plugin.MojoExecutionException;
+import org.apache.maven.plugin.MojoFailureException;
+import org.apache.maven.plugin.testing.stubs.MavenProjectStub;
+import org.codehaus.doxia.site.renderer.DefaultSiteRenderer;
+import org.junit.Test;
+
+import com.adobe.ac.pmd.FlexPmdTestBase;
+
+public class FlexMetricsMojoTest extends FlexPmdTestBase
+{
+   private static final String TEMP_FILE_NAME = "javancss-raw-report.xml";
+
+   @Test
+   public void executeReport() throws MojoExecutionException,
+                              MojoFailureException
+   {
+      final MavenProjectStub project = new MavenProjectStub();
+      final File outputDirectoryToBeSet = new File( project.getBasedir().getAbsolutePath()
+            + "/target/pmd" );
+      final FlexMetricsReportMojo reportMojo = new FlexMetricsReportMojo( project,
+                                                                          getTestDirectory(),
+                                                                          outputDirectoryToBeSet );
+      final FlexMetricsMojo mojo = new FlexMetricsMojo( outputDirectoryToBeSet, getTestDirectory() );
+
+      outputDirectoryToBeSet.mkdirs();
+      reportMojo.setLineThreshold( 5 );
+      reportMojo.setSiteRenderer( new DefaultSiteRenderer() );
+      reportMojo.setXmlOutputDirectory( outputDirectoryToBeSet );
+      reportMojo.setTempFileName( TEMP_FILE_NAME );
+      reportMojo.execute();
+
+      mojo.setXmlOutputDirectory( outputDirectoryToBeSet );
+      mojo.setTempFileName( TEMP_FILE_NAME );
+      mojo.setCcnLimit( 50 );
+      mojo.setFailOnViolation( true );
+      mojo.setNcssLimit( 200 );
+
+      mojo.execute();
+   }
+}

http://git-wip-us.apache.org/repos/asf/flex-utilities/blob/b0fc5f17/FlexPMD/flex-pmd-metrics-maven-plugin/src/test/java/com/adobe/ac/pmd/metrics/maven/FlexMetricsReportMojoTest.java
----------------------------------------------------------------------
diff --git a/FlexPMD/flex-pmd-metrics-maven-plugin/src/test/java/com/adobe/ac/pmd/metrics/maven/FlexMetricsReportMojoTest.java b/FlexPMD/flex-pmd-metrics-maven-plugin/src/test/java/com/adobe/ac/pmd/metrics/maven/FlexMetricsReportMojoTest.java
new file mode 100644
index 0000000..ef60647
--- /dev/null
+++ b/FlexPMD/flex-pmd-metrics-maven-plugin/src/test/java/com/adobe/ac/pmd/metrics/maven/FlexMetricsReportMojoTest.java
@@ -0,0 +1,98 @@
+/*
+ * 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 com.adobe.ac.pmd.metrics.maven;
+
+import static org.junit.Assert.assertNotNull;
+
+import java.io.File;
+import java.util.Locale;
+
+import org.apache.maven.plugin.MojoExecutionException;
+import org.apache.maven.plugin.testing.stubs.MavenProjectStub;
+import org.codehaus.doxia.site.renderer.DefaultSiteRenderer;
+import org.junit.Test;
+
+import com.adobe.ac.pmd.FlexPmdTestBase;
+
+public class FlexMetricsReportMojoTest extends FlexPmdTestBase
+{
+   @Test
+   public void executeMultipleReport() throws MojoExecutionException
+   {
+      final MavenProjectStub project = new MavenProjectStub();
+      final File outputDirectoryToBeSet = new File( project.getBasedir().getAbsolutePath()
+            + "/target/pmd" );
+      final FlexMetricsReportMojo mojo = new FlexMetricsReportMojo( project, null, outputDirectoryToBeSet );
+
+      outputDirectoryToBeSet.mkdirs();
+      mojo.addReactorProject( new MavenProjectStub() );
+      mojo.addReactorProject( new MavenProjectStub() );
+      mojo.setLineThreshold( 5 );
+      mojo.setSiteRenderer( new DefaultSiteRenderer() );
+      mojo.setXmlOutputDirectory( outputDirectoryToBeSet );
+      mojo.setTempFileName( "javancss-raw-report.xml" );
+
+      assertNotNull( "",
+                     mojo.getName( Locale.ENGLISH ) );
+
+      mojo.execute();
+   }
+
+   @Test
+   public void executeSingleReport() throws MojoExecutionException
+   {
+      final File outputDirectoryToBeSet = new File( "target/pmd" );
+
+      outputDirectoryToBeSet.mkdirs();
+
+      final FlexMetricsReportMojo mojo = new FlexMetricsReportMojo( new MavenProjectStub(),
+                                                                    getTestDirectory(),
+                                                                    outputDirectoryToBeSet );
+
+      mojo.setLineThreshold( 5 );
+      mojo.setSiteRenderer( new DefaultSiteRenderer() );
+      mojo.setXmlOutputDirectory( outputDirectoryToBeSet );
+      mojo.setTempFileName( "javancss-raw-report.xml" );
+
+      assertNotNull( "",
+                     mojo.getName( Locale.ENGLISH ) );
+
+      mojo.execute();
+   }
+
+   @Test
+   public void executeSingleReportOnNonExistingFolder() throws MojoExecutionException
+   {
+      final File outputDirectoryToBeSet = new File( "target/pmd" );
+
+      outputDirectoryToBeSet.mkdirs();
+
+      final FlexMetricsReportMojo mojo = new FlexMetricsReportMojo( new MavenProjectStub(),
+                                                                    new File( "nonExisting" ),
+                                                                    outputDirectoryToBeSet );
+
+      mojo.setLineThreshold( 5 );
+      mojo.setSiteRenderer( new DefaultSiteRenderer() );
+      mojo.setXmlOutputDirectory( outputDirectoryToBeSet );
+      mojo.setTempFileName( "javancss-raw-report.xml" );
+
+      assertNotNull( "",
+                     mojo.getName( Locale.ENGLISH ) );
+
+      mojo.execute();
+   }
+}