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:34 UTC
[35/46] FlexPMD Donation from Adobe Systems Inc
http://git-wip-us.apache.org/repos/asf/flex-utilities/blob/b0fc5f17/FlexPMD/flex-pmd-automator-workflow/src/main/automator/run.FlexPMD.workflow/Contents/document.wflow
----------------------------------------------------------------------
diff --git a/FlexPMD/flex-pmd-automator-workflow/src/main/automator/run.FlexPMD.workflow/Contents/document.wflow b/FlexPMD/flex-pmd-automator-workflow/src/main/automator/run.FlexPMD.workflow/Contents/document.wflow
new file mode 100644
index 0000000..462d407
--- /dev/null
+++ b/FlexPMD/flex-pmd-automator-workflow/src/main/automator/run.FlexPMD.workflow/Contents/document.wflow
@@ -0,0 +1,545 @@
+<?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.
+
+-->
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+ <key>AMApplicationBuild</key>
+ <string>153</string>
+ <key>AMApplicationVersion</key>
+ <string>2.0</string>
+ <key>AMDocumentVersion</key>
+ <string>2</string>
+ <key>actions</key>
+ <array>
+ <dict>
+ <key>action</key>
+ <dict>
+ <key>AMAccepts</key>
+ <dict>
+ <key>Container</key>
+ <string>List</string>
+ <key>Optional</key>
+ <true/>
+ <key>Types</key>
+ <array>
+ <string>com.apple.applescript.alias-object</string>
+ </array>
+ </dict>
+ <key>AMActionVersion</key>
+ <string>1.1</string>
+ <key>AMParameterProperties</key>
+ <dict>
+ <key>defaultLocation</key>
+ <dict>
+ <key>isPathPopUp</key>
+ <true/>
+ <key>variableUUIDsInMenu</key>
+ <array/>
+ </dict>
+ <key>granularity</key>
+ <dict/>
+ <key>multipleSelection</key>
+ <dict/>
+ <key>promptMessage</key>
+ <dict>
+ <key>tokenizedValue</key>
+ <array>
+ <string>Choose a source folder for executing FlexPMD against</string>
+ </array>
+ </dict>
+ </dict>
+ <key>AMProvides</key>
+ <dict>
+ <key>Container</key>
+ <string>List</string>
+ <key>Types</key>
+ <array>
+ <string>com.apple.applescript.alias-object</string>
+ </array>
+ </dict>
+ <key>ActionBundlePath</key>
+ <string>/System/Library/Automator/Ask for Finder Items.action</string>
+ <key>ActionName</key>
+ <string>Ask for Finder Items</string>
+ <key>ActionParameters</key>
+ <dict>
+ <key>defaultLocation</key>
+ <string>~</string>
+ <key>granularity</key>
+ <integer>1</integer>
+ <key>multipleSelection</key>
+ <false/>
+ <key>promptMessage</key>
+ <string>Choose a source folder for executing FlexPMD against</string>
+ </dict>
+ <key>Application</key>
+ <array>
+ <string>Finder</string>
+ </array>
+ <key>BundleIdentifier</key>
+ <string>com.apple.Automator.AskForFinderItems</string>
+ <key>CFBundleVersion</key>
+ <string>1.1</string>
+ <key>CanShowSelectedItemsWhenRun</key>
+ <true/>
+ <key>CanShowWhenRun</key>
+ <false/>
+ <key>Category</key>
+ <array>
+ <string>AMCategoryFilesAndFolders</string>
+ </array>
+ <key>Class Name</key>
+ <string>AMAppleScriptAction</string>
+ <key>InputUUID</key>
+ <string>048C977D-98A1-423E-8435-0D294C8AEACB</string>
+ <key>Keywords</key>
+ <array>
+ <string>Find</string>
+ <string>Item</string>
+ <string>File</string>
+ <string>Folder</string>
+ <string>Ask</string>
+ <string>Choose</string>
+ <string>Prompt</string>
+ </array>
+ <key>OutputUUID</key>
+ <string>85D7C03F-8983-4BF2-83C6-7DF3F3838515</string>
+ <key>StartAction</key>
+ <false/>
+ <key>UUID</key>
+ <string>B38DA4F4-3B0A-479A-8996-6FEFB5CE76DE</string>
+ <key>UnlocalizedApplications</key>
+ <array>
+ <string>Finder</string>
+ </array>
+ <key>arguments</key>
+ <dict>
+ <key>0</key>
+ <dict>
+ <key>default value</key>
+ <string>~/Desktop</string>
+ <key>name</key>
+ <string>defaultLocation</string>
+ <key>required</key>
+ <string>0</string>
+ <key>type</key>
+ <string>0</string>
+ <key>uuid</key>
+ <string>0</string>
+ </dict>
+ <key>1</key>
+ <dict>
+ <key>default value</key>
+ <false/>
+ <key>name</key>
+ <string>multipleSelection</string>
+ <key>required</key>
+ <string>0</string>
+ <key>type</key>
+ <string>0</string>
+ <key>uuid</key>
+ <string>1</string>
+ </dict>
+ <key>2</key>
+ <dict>
+ <key>default value</key>
+ <string>Choose a Finder Item:</string>
+ <key>name</key>
+ <string>promptMessage</string>
+ <key>required</key>
+ <string>0</string>
+ <key>type</key>
+ <string>0</string>
+ <key>uuid</key>
+ <string>2</string>
+ </dict>
+ <key>3</key>
+ <dict>
+ <key>default value</key>
+ <integer>0</integer>
+ <key>name</key>
+ <string>granularity</string>
+ <key>required</key>
+ <string>0</string>
+ <key>type</key>
+ <string>0</string>
+ <key>uuid</key>
+ <string>3</string>
+ </dict>
+ </dict>
+ <key>isViewVisible</key>
+ <true/>
+ <key>location</key>
+ <string>457.500000:586.000000</string>
+ <key>nibPath</key>
+ <string>/System/Library/Automator/Ask for Finder Items.action/Contents/Resources/English.lproj/main.nib</string>
+ </dict>
+ <key>isViewVisible</key>
+ <true/>
+ </dict>
+ <dict>
+ <key>action</key>
+ <dict>
+ <key>AMAccepts</key>
+ <dict>
+ <key>Container</key>
+ <string>List</string>
+ <key>Optional</key>
+ <true/>
+ <key>Types</key>
+ <array>
+ <string>com.apple.cocoa.string</string>
+ </array>
+ </dict>
+ <key>AMActionVersion</key>
+ <string>2.0.1</string>
+ <key>AMParameterProperties</key>
+ <dict>
+ <key>COMMAND_STRING</key>
+ <dict/>
+ <key>CheckedForUserDefaultShell</key>
+ <dict/>
+ <key>inputMethod</key>
+ <dict/>
+ <key>shell</key>
+ <dict/>
+ <key>source</key>
+ <dict/>
+ </dict>
+ <key>AMProvides</key>
+ <dict>
+ <key>Container</key>
+ <string>List</string>
+ <key>Types</key>
+ <array>
+ <string>com.apple.cocoa.string</string>
+ </array>
+ </dict>
+ <key>ActionBundlePath</key>
+ <string>/System/Library/Automator/Run Shell Script.action</string>
+ <key>ActionName</key>
+ <string>Run Shell Script</string>
+ <key>ActionParameters</key>
+ <dict>
+ <key>COMMAND_STRING</key>
+ <string>#####################
+# Script Variables #
+#####################
+
+#
+# The FlexPMD version
+#
+flexPmdVersion=1.0.RC3
+
+#
+# The directory where the FlexPMD automator workflow has been extracted
+#
+flexPmdWorkflowLocation="/Users/xagnetti/Work/repositories/opensource.adobe/flexpmd/trunk/flex-pmd-automator-workflow/target/flex-pmd-automator-${flexPmdVersion}-workflow"
+
+#
+# The directory where the FlexPMD command line client is stored
+#
+flexPmdCommandLineDirectory=${flexPmdWorkflowLocation}/command-line
+
+#
+# The directory where the FlexPMD violations viewer application is stored
+#
+viewerDirectory=${flexPmdWorkflowLocation}/violations-viewer
+
+#
+# The temporary directory where files are stored by the script
+#
+tmpDirectory=~/flexpmd
+
+
+#####################
+# Script Core #
+#####################
+
+tmpSourceDirectory=${tmpDirectory}/sourceDirectory
+resultDirectory=${tmpDirectory}
+tmpStdout=${tmpDirectory}/stdout
+tmpStderr=${tmpDirectory}/stderr
+
+rm -rf ${tmpDirectory}
+mkdir ${tmpDirectory}
+rm ${tmpSourceDirectory}
+rm ${resultDirectory}/pmd.xml
+rm ${tmpStderr}
+rm ${tmpStdout}
+
+cat > ${tmpSourceDirectory}
+
+sourceDirectory=`cat ${tmpSourceDirectory}`
+
+cd ${flexPmdCommandLineDirectory}
+
+java -jar flex-pmd-command-line-${flexPmdVersion}.jar -s "${sourceDirectory}" -o ${resultDirectory} > ${tmpStdout} 2> ${tmpStderr}
+
+report=${resultDirectory}/pmd.xml
+
+echo file://${viewerDirectory}/flex-pmd-violations-viewer-${flexPmdVersion}.html?report=$report
+</string>
+ <key>CheckedForUserDefaultShell</key>
+ <true/>
+ <key>inputMethod</key>
+ <integer>0</integer>
+ <key>shell</key>
+ <string>/bin/bash</string>
+ <key>source</key>
+ <string></string>
+ </dict>
+ <key>Application</key>
+ <array>
+ <string>Automator</string>
+ </array>
+ <key>BundleIdentifier</key>
+ <string>com.apple.RunShellScript</string>
+ <key>CFBundleVersion</key>
+ <string>2.0.1</string>
+ <key>CanShowSelectedItemsWhenRun</key>
+ <false/>
+ <key>CanShowWhenRun</key>
+ <true/>
+ <key>Category</key>
+ <array>
+ <string>AMCategoryUtilities</string>
+ </array>
+ <key>Class Name</key>
+ <string>RunShellScriptAction</string>
+ <key>InputUUID</key>
+ <string>403A6D3E-FD99-4B71-8D42-C1C2E54807E3</string>
+ <key>Keywords</key>
+ <array>
+ <string>Shell</string>
+ <string>Script</string>
+ <string>Command</string>
+ <string>Run</string>
+ <string>Unix</string>
+ </array>
+ <key>OutputUUID</key>
+ <string>457C1F3B-569E-467A-95C7-DAFC85801AD5</string>
+ <key>ShowWhenRun</key>
+ <false/>
+ <key>UUID</key>
+ <string>7F7B8E52-6DD4-47FA-AF9D-74246B8DFA1A</string>
+ <key>UnlocalizedApplications</key>
+ <array>
+ <string>Automator</string>
+ </array>
+ <key>arguments</key>
+ <dict>
+ <key>0</key>
+ <dict>
+ <key>default value</key>
+ <integer>0</integer>
+ <key>name</key>
+ <string>inputMethod</string>
+ <key>required</key>
+ <string>0</string>
+ <key>type</key>
+ <string>0</string>
+ <key>uuid</key>
+ <string>0</string>
+ </dict>
+ <key>1</key>
+ <dict>
+ <key>default value</key>
+ <string>/bin/sh</string>
+ <key>name</key>
+ <string>shell</string>
+ <key>required</key>
+ <string>0</string>
+ <key>type</key>
+ <string>0</string>
+ <key>uuid</key>
+ <string>1</string>
+ </dict>
+ <key>2</key>
+ <dict>
+ <key>default value</key>
+ <string></string>
+ <key>name</key>
+ <string>source</string>
+ <key>required</key>
+ <string>0</string>
+ <key>type</key>
+ <string>0</string>
+ <key>uuid</key>
+ <string>2</string>
+ </dict>
+ <key>3</key>
+ <dict>
+ <key>default value</key>
+ <string></string>
+ <key>name</key>
+ <string>COMMAND_STRING</string>
+ <key>required</key>
+ <string>0</string>
+ <key>type</key>
+ <string>0</string>
+ <key>uuid</key>
+ <string>3</string>
+ </dict>
+ <key>4</key>
+ <dict>
+ <key>default value</key>
+ <false/>
+ <key>name</key>
+ <string>CheckedForUserDefaultShell</string>
+ <key>required</key>
+ <string>0</string>
+ <key>type</key>
+ <string>0</string>
+ <key>uuid</key>
+ <string>4</string>
+ </dict>
+ </dict>
+ <key>isViewVisible</key>
+ <true/>
+ <key>location</key>
+ <string>457.500000:431.000000</string>
+ <key>nibPath</key>
+ <string>/System/Library/Automator/Run Shell Script.action/Contents/Resources/English.lproj/main.nib</string>
+ </dict>
+ <key>isViewVisible</key>
+ <true/>
+ </dict>
+ <dict>
+ <key>action</key>
+ <dict>
+ <key>AMAccepts</key>
+ <dict>
+ <key>Container</key>
+ <string>List</string>
+ <key>Optional</key>
+ <false/>
+ <key>Types</key>
+ <array>
+ <string>com.apple.cocoa.url</string>
+ </array>
+ </dict>
+ <key>AMActionVersion</key>
+ <string>1.0</string>
+ <key>AMParameterProperties</key>
+ <dict/>
+ <key>AMProvides</key>
+ <dict>
+ <key>Container</key>
+ <string>List</string>
+ <key>Types</key>
+ <array>
+ <string>com.apple.cocoa.url</string>
+ </array>
+ </dict>
+ <key>AMRequiredResources</key>
+ <array/>
+ <key>ActionBundlePath</key>
+ <string>/System/Library/Automator/Display Webpages 2.action</string>
+ <key>ActionName</key>
+ <string>Display Webpages</string>
+ <key>ActionParameters</key>
+ <dict/>
+ <key>Application</key>
+ <array>
+ <string>Safari</string>
+ </array>
+ <key>BundleIdentifier</key>
+ <string>com.apple.Automator.Display_Webpages</string>
+ <key>CFBundleVersion</key>
+ <string>1.0</string>
+ <key>CanShowSelectedItemsWhenRun</key>
+ <false/>
+ <key>CanShowWhenRun</key>
+ <false/>
+ <key>Category</key>
+ <array>
+ <string>AMCategoryInternet</string>
+ </array>
+ <key>Class Name</key>
+ <string>Display_Webpages</string>
+ <key>InputUUID</key>
+ <string>84EA6E4D-9337-4CF6-9976-60DA2E4DB5FC</string>
+ <key>Keywords</key>
+ <array>
+ <string>URL</string>
+ <string>Web</string>
+ <string>Display</string>
+ <string>Open</string>
+ <string>Show</string>
+ </array>
+ <key>OutputUUID</key>
+ <string>8F04C323-3143-449D-8C71-0C5CACC0C875</string>
+ <key>UUID</key>
+ <string>89B93EE5-8B2B-48D4-B0D9-1AC49BB0AA6D</string>
+ <key>UnlocalizedApplications</key>
+ <array>
+ <string>Safari</string>
+ </array>
+ <key>arguments</key>
+ <dict/>
+ </dict>
+ </dict>
+ </array>
+ <key>connectors</key>
+ <dict>
+ <key>073CDD95-EB15-47E3-AE4D-9667F1C01ECF</key>
+ <dict>
+ <key>from</key>
+ <string>B38DA4F4-3B0A-479A-8996-6FEFB5CE76DE - B38DA4F4-3B0A-479A-8996-6FEFB5CE76DE</string>
+ <key>to</key>
+ <string>7F7B8E52-6DD4-47FA-AF9D-74246B8DFA1A - 7F7B8E52-6DD4-47FA-AF9D-74246B8DFA1A</string>
+ </dict>
+ <key>56A224D4-DCA7-469A-974D-DAAAFF5B5871</key>
+ <dict>
+ <key>from</key>
+ <string>7F7B8E52-6DD4-47FA-AF9D-74246B8DFA1A - 7F7B8E52-6DD4-47FA-AF9D-74246B8DFA1A</string>
+ <key>to</key>
+ <string>89B93EE5-8B2B-48D4-B0D9-1AC49BB0AA6D - 89B93EE5-8B2B-48D4-B0D9-1AC49BB0AA6D</string>
+ </dict>
+ </dict>
+ <key>state</key>
+ <dict>
+ <key>EditorSplitViewPosition</key>
+ <real>576</real>
+ <key>MainSplitViewPosition_v2</key>
+ <real>525</real>
+ <key>windowFrame</key>
+ <string>{{0, 51}, {1440, 827}}</string>
+ <key>windowFrameTopLeft</key>
+ <string>{{0, 0}, {1440, 827}}</string>
+ <key>workflowViewScrollPosition</key>
+ <string>{{0, 0}, {915, 576}}</string>
+ </dict>
+ <key>variables</key>
+ <array>
+ <dict>
+ <key>UUID</key>
+ <string>12F77683-5982-4DA7-A149-C34344BC6E5E</string>
+ <key>identifier</key>
+ <string>com.apple.Automator.Variable.Path</string>
+ <key>name</key>
+ <string>New Path</string>
+ <key>value</key>
+ <string>~/Desktop</string>
+ </dict>
+ </array>
+</dict>
+</plist>
http://git-wip-us.apache.org/repos/asf/flex-utilities/blob/b0fc5f17/FlexPMD/flex-pmd-bundles/pom.xml
----------------------------------------------------------------------
diff --git a/FlexPMD/flex-pmd-bundles/pom.xml b/FlexPMD/flex-pmd-bundles/pom.xml
new file mode 100644
index 0000000..4251e89
--- /dev/null
+++ b/FlexPMD/flex-pmd-bundles/pom.xml
@@ -0,0 +1,129 @@
+<!--
+
+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>
+ <artifactId>${project.parent.artifactId}-all-in-one-bundle</artifactId>
+ <name>Adobe Flex PMD All-in-one bundle</name>
+ <packaging>pom</packaging>
+
+ <parent>
+ <artifactId>flex-pmd-hybrid-parent</artifactId>
+ <groupId>com.adobe.ac</groupId>
+ <version>1.3-SNAPSHOT</version>
+ <relativePath>../flex-pmd-hybrid-parent/pom.xml</relativePath>
+ </parent>
+
+ <dependencies>
+
+
+ <dependency>
+ <groupId>com.martiansoftware</groupId>
+ <artifactId>jsap</artifactId>
+ <version>${jsap.version}</version>
+ </dependency>
+
+ <!-- FlexPMD -->
+
+ <dependency>
+ <groupId>${project.parent.groupId}</groupId>
+ <artifactId>flex-pmd-ant-task</artifactId>
+ <version>${project.parent.version}</version>
+ <scope>compile</scope>
+ </dependency>
+ <dependency>
+ <groupId>${project.parent.groupId}</groupId>
+ <artifactId>flex-pmd-command-line</artifactId>
+ <version>${project.parent.version}</version>
+ <scope>compile</scope>
+ </dependency>
+ <dependency>
+ <groupId>${project.parent.groupId}</groupId>
+ <artifactId>flex-pmd-automator</artifactId>
+ <version>${project.parent.version}</version>
+ <type>pom</type>
+ <scope>compile</scope>
+ </dependency>
+
+ <!-- FlexCPD -->
+
+ <dependency>
+ <groupId>${project.parent.groupId}</groupId>
+ <artifactId>flex-pmd-cpd-ant-task</artifactId>
+ <version>${project.parent.version}</version>
+ <scope>compile</scope>
+ </dependency>
+ <dependency>
+ <groupId>${project.parent.groupId}</groupId>
+ <artifactId>flex-pmd-cpd-command-line</artifactId>
+ <version>${project.parent.version}</version>
+ <scope>compile</scope>
+ </dependency>
+
+ <!-- FlexMetrics -->
+
+ <dependency>
+ <groupId>${project.parent.groupId}</groupId>
+ <artifactId>flex-pmd-metrics-ant-task</artifactId>
+ <version>${project.parent.version}</version>
+ <scope>compile</scope>
+ </dependency>
+ <dependency>
+ <groupId>${project.parent.groupId}</groupId>
+ <artifactId>flex-pmd-metrics-command-line</artifactId>
+ <version>${project.parent.version}</version>
+ <scope>compile</scope>
+ </dependency>
+
+ </dependencies>
+
+ <build>
+ <plugins>
+
+ <plugin>
+ <artifactId>maven-antrun-plugin</artifactId>
+ <version>${maven-antrun-plugin.version}</version>
+ <executions>
+ <execution>
+ <id>package-ant-task</id>
+ <phase>install</phase>
+ <configuration>
+ <tasks>
+ <mkdir dir="${project.build.directory}/release" />
+ <unzip src="${project.build.directory}/../../flex-pmd-ant-task/target/flex-pmd-ant-task-${project.parent.version}.zip" dest="${project.build.directory}/release" />
+ <unzip src="${project.build.directory}/../../flex-pmd-cpd-ant-task/target/flex-pmd-cpd-ant-task-${project.parent.version}.zip" dest="${project.build.directory}/release" />
+ <unzip src="${project.build.directory}/../../flex-pmd-metrics-ant-task/target/flex-pmd-metrics-ant-task-${project.parent.version}.zip" dest="${project.build.directory}/release" />
+ <unzip src="${project.build.directory}/../../flex-pmd-command-line/target/flex-pmd-command-line-${project.parent.version}.zip" dest="${project.build.directory}/release" />
+ <unzip src="${project.build.directory}/../../flex-pmd-cpd-command-line/target/flex-pmd-cpd-command-line-${project.parent.version}.zip" dest="${project.build.directory}/release" />
+ <unzip src="${project.build.directory}/../../flex-pmd-metrics-command-line/target/flex-pmd-metrics-command-line-${project.parent.version}.zip" dest="${project.build.directory}/release" />
+ <unzip src="${project.build.directory}/../../flex-pmd-automator-workflow/target/flex-pmd-automator-${project.parent.version}-workflow.zip" dest="${project.build.directory}/release" />
+ <delete dir="${project.build.directory}/release/command-line" />
+ <zip destfile="${project.build.directory}/${project.build.finalName}.zip" basedir="${project.build.directory}/release" excludes="*.zip" />
+ </tasks>
+ </configuration>
+ <goals>
+ <goal>run</goal>
+ </goals>
+ </execution>
+ </executions>
+ </plugin>
+
+ </plugins>
+ </build>
+
+</project>
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/flex-utilities/blob/b0fc5f17/FlexPMD/flex-pmd-command-line-api/.pmd
----------------------------------------------------------------------
diff --git a/FlexPMD/flex-pmd-command-line-api/.pmd b/FlexPMD/flex-pmd-command-line-api/.pmd
new file mode 100644
index 0000000..b5c19d9
--- /dev/null
+++ b/FlexPMD/flex-pmd-command-line-api/.pmd
@@ -0,0 +1,25 @@
+<?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>../flex-pmd-parent/pmd.xml</ruleSetFile>
+ <includeDerivedFiles>false</includeDerivedFiles>
+ <violationsAsErrors>true</violationsAsErrors>
+</pmd>
http://git-wip-us.apache.org/repos/asf/flex-utilities/blob/b0fc5f17/FlexPMD/flex-pmd-command-line-api/pom.xml
----------------------------------------------------------------------
diff --git a/FlexPMD/flex-pmd-command-line-api/pom.xml b/FlexPMD/flex-pmd-command-line-api/pom.xml
new file mode 100644
index 0000000..cdd9c3e
--- /dev/null
+++ b/FlexPMD/flex-pmd-command-line-api/pom.xml
@@ -0,0 +1,41 @@
+<!--
+
+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-command-line-api</artifactId>
+ <name>Adobe Flex PMD Command line API</name>
+
+
+ <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>com.martiansoftware</groupId>
+ <artifactId>jsap</artifactId>
+ <version>${jsap.version}</version>
+ </dependency>
+ </dependencies>
+
+</project>
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/flex-utilities/blob/b0fc5f17/FlexPMD/flex-pmd-command-line-api/src/main/java/com/adobe/ac/pmd/CommandLineOptions.java
----------------------------------------------------------------------
diff --git a/FlexPMD/flex-pmd-command-line-api/src/main/java/com/adobe/ac/pmd/CommandLineOptions.java b/FlexPMD/flex-pmd-command-line-api/src/main/java/com/adobe/ac/pmd/CommandLineOptions.java
new file mode 100644
index 0000000..e8aa66e
--- /dev/null
+++ b/FlexPMD/flex-pmd-command-line-api/src/main/java/com/adobe/ac/pmd/CommandLineOptions.java
@@ -0,0 +1,39 @@
+/*
+ * 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;
+
+public enum CommandLineOptions implements ICommandLineOptions
+{
+ EXLUDE_PACKAGE("excludePackage"),
+ MXML_FACTOR("mxmlFactor"),
+ OUTPUT("outputDirectory"),
+ RULE_SET("ruleSet"),
+ SOURCE_DIRECTORY("sourceDirectory");
+
+ private String name;
+
+ private CommandLineOptions( final String nameToBeSet )
+ {
+ name = nameToBeSet;
+ }
+
+ @Override
+ public String toString()
+ {
+ return name;
+ }
+}
http://git-wip-us.apache.org/repos/asf/flex-utilities/blob/b0fc5f17/FlexPMD/flex-pmd-command-line-api/src/main/java/com/adobe/ac/pmd/CommandLineUtils.java
----------------------------------------------------------------------
diff --git a/FlexPMD/flex-pmd-command-line-api/src/main/java/com/adobe/ac/pmd/CommandLineUtils.java b/FlexPMD/flex-pmd-command-line-api/src/main/java/com/adobe/ac/pmd/CommandLineUtils.java
new file mode 100644
index 0000000..ba212a4
--- /dev/null
+++ b/FlexPMD/flex-pmd-command-line-api/src/main/java/com/adobe/ac/pmd/CommandLineUtils.java
@@ -0,0 +1,58 @@
+/*
+ * 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;
+
+import java.io.File;
+import java.util.ArrayList;
+import java.util.List;
+
+import com.martiansoftware.jsap.FlaggedOption;
+import com.martiansoftware.jsap.JSAP;
+import com.martiansoftware.jsap.JSAPException;
+
+public final class CommandLineUtils
+{
+ public static List< File > computeSourceList( final String source )
+ {
+ if ( !source.contains( "," ) )
+ {
+ return null;
+ }
+ final List< File > sourceList = new ArrayList< File >();
+ for ( int i = 0; i < source.split( "," ).length; i++ )
+ {
+ sourceList.add( new File( source.split( "," )[ i ] ) ); // NOPMD
+ }
+ return sourceList;
+ }
+
+ public static void registerParameter( final JSAP jsap,
+ final ICommandLineOptions option,
+ final boolean required ) throws JSAPException
+ {
+ final String optionName = option.toString();
+
+ jsap.registerParameter( new FlaggedOption( optionName ).setStringParser( JSAP.STRING_PARSER )
+ .setRequired( required )
+ .setShortFlag( optionName.charAt( 0 ) )
+ .setLongFlag( optionName ) );
+ }
+
+ private CommandLineUtils()
+ {
+ }
+}
http://git-wip-us.apache.org/repos/asf/flex-utilities/blob/b0fc5f17/FlexPMD/flex-pmd-command-line-api/src/main/java/com/adobe/ac/pmd/ICommandLineOptions.java
----------------------------------------------------------------------
diff --git a/FlexPMD/flex-pmd-command-line-api/src/main/java/com/adobe/ac/pmd/ICommandLineOptions.java b/FlexPMD/flex-pmd-command-line-api/src/main/java/com/adobe/ac/pmd/ICommandLineOptions.java
new file mode 100644
index 0000000..8d0e250
--- /dev/null
+++ b/FlexPMD/flex-pmd-command-line-api/src/main/java/com/adobe/ac/pmd/ICommandLineOptions.java
@@ -0,0 +1,22 @@
+/*
+ * 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;
+
+public interface ICommandLineOptions
+{
+
+}
http://git-wip-us.apache.org/repos/asf/flex-utilities/blob/b0fc5f17/FlexPMD/flex-pmd-command-line-api/src/test/java/com/adobe/ac/pmd/CommandLineOptionsTest.java
----------------------------------------------------------------------
diff --git a/FlexPMD/flex-pmd-command-line-api/src/test/java/com/adobe/ac/pmd/CommandLineOptionsTest.java b/FlexPMD/flex-pmd-command-line-api/src/test/java/com/adobe/ac/pmd/CommandLineOptionsTest.java
new file mode 100644
index 0000000..9ced093
--- /dev/null
+++ b/FlexPMD/flex-pmd-command-line-api/src/test/java/com/adobe/ac/pmd/CommandLineOptionsTest.java
@@ -0,0 +1,31 @@
+/*
+ * 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;
+
+import static org.junit.Assert.assertEquals;
+
+import org.junit.Test;
+
+public class CommandLineOptionsTest
+{
+ @Test
+ public void testToString()
+ {
+ assertEquals( "outputDirectory",
+ CommandLineOptions.OUTPUT.toString() );
+ }
+}
http://git-wip-us.apache.org/repos/asf/flex-utilities/blob/b0fc5f17/FlexPMD/flex-pmd-command-line-api/src/test/java/com/adobe/ac/pmd/CommandLineUtilsTest.java
----------------------------------------------------------------------
diff --git a/FlexPMD/flex-pmd-command-line-api/src/test/java/com/adobe/ac/pmd/CommandLineUtilsTest.java b/FlexPMD/flex-pmd-command-line-api/src/test/java/com/adobe/ac/pmd/CommandLineUtilsTest.java
new file mode 100644
index 0000000..305315c
--- /dev/null
+++ b/FlexPMD/flex-pmd-command-line-api/src/test/java/com/adobe/ac/pmd/CommandLineUtilsTest.java
@@ -0,0 +1,58 @@
+/*
+ * 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;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNull;
+import static org.junit.Assert.assertTrue;
+
+import org.junit.Test;
+
+import com.martiansoftware.jsap.JSAP;
+import com.martiansoftware.jsap.JSAPException;
+
+public class CommandLineUtilsTest
+{
+ @Test
+ public void testComputeSourceList()
+ {
+ assertEquals( 3,
+ CommandLineUtils.computeSourceList( "lala,toto,tyty" ).size() );
+ assertNull( CommandLineUtils.computeSourceList( "lala" ) );
+ }
+
+ @Test
+ public void testRegisterParameter() throws JSAPException
+ {
+ final JSAP jsap = new JSAP();
+
+ CommandLineUtils.registerParameter( jsap,
+ new ICommandLineOptions()
+ {
+ @Override
+ public String toString()
+ {
+ return "name";
+ }
+ },
+ true );
+
+ assertTrue( jsap.getByShortFlag( 'n' ) != null );
+ assertNull( jsap.getByShortFlag( 'm' ) );
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/flex-utilities/blob/b0fc5f17/FlexPMD/flex-pmd-command-line/.pmd
----------------------------------------------------------------------
diff --git a/FlexPMD/flex-pmd-command-line/.pmd b/FlexPMD/flex-pmd-command-line/.pmd
new file mode 100644
index 0000000..b5c19d9
--- /dev/null
+++ b/FlexPMD/flex-pmd-command-line/.pmd
@@ -0,0 +1,25 @@
+<?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>../flex-pmd-parent/pmd.xml</ruleSetFile>
+ <includeDerivedFiles>false</includeDerivedFiles>
+ <violationsAsErrors>true</violationsAsErrors>
+</pmd>
http://git-wip-us.apache.org/repos/asf/flex-utilities/blob/b0fc5f17/FlexPMD/flex-pmd-command-line/pom.xml
----------------------------------------------------------------------
diff --git a/FlexPMD/flex-pmd-command-line/pom.xml b/FlexPMD/flex-pmd-command-line/pom.xml
new file mode 100644
index 0000000..f930a8a
--- /dev/null
+++ b/FlexPMD/flex-pmd-command-line/pom.xml
@@ -0,0 +1,198 @@
+<?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-command-line</artifactId>
+ <name>Adobe Flex PMD Command line</name>
+
+ <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>
+
+ <description />
+ <packaging>jar</packaging>
+
+ <properties>
+ <maven.jar.plugin.version>2.2</maven.jar.plugin.version>
+ </properties>
+
+ <dependencies>
+ <dependency>
+ <groupId>com.martiansoftware</groupId>
+ <artifactId>jsap</artifactId>
+ <version>${jsap.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>${project.groupId}</groupId>
+ <version>${project.version}</version>
+ <artifactId>flex-pmd-core</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>${project.groupId}</groupId>
+ <version>${project.version}</version>
+ <artifactId>${project.artifactId}-api</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>${project.groupId}</groupId>
+ <version>${project.version}</version>
+ <artifactId>flex-pmd-ruleset</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 for packaging from ANT -->
+
+ <dependency>
+ <groupId>${project.groupId}</groupId>
+ <version>${project.version}</version>
+ <artifactId>flex-pmd-files</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>${project.groupId}</groupId>
+ <version>${project.version}</version>
+ <artifactId>flex-pmd-ruleset-api</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>${project.groupId}</groupId>
+ <artifactId>as3-plugin-utils</artifactId>
+ <version>${project.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>${project.groupId}</groupId>
+ <artifactId>as3-parser</artifactId>
+ <version>${project.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>${project.groupId}</groupId>
+ <artifactId>as3-parser-api</artifactId>
+ <version>${project.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>pmd</groupId>
+ <artifactId>pmd</artifactId>
+ <version>${pmd.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>plexus</groupId>
+ <artifactId>plexus-utils</artifactId>
+ <version>${plexus-utils.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>commons-lang</groupId>
+ <artifactId>commons-lang</artifactId>
+ <version>${commons-lang.version}</version>
+ </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>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-jar-plugin</artifactId>
+ <version>${maven.jar.plugin.version}</version>
+ <configuration>
+ <archive>
+ <manifest>
+ <mainClass>com.adobe.ac.pmd.commandline.FlexPMD</mainClass>
+ <packageName>com.adobe.ac.pmd.commandline</packageName>
+ <addClasspath>true</addClasspath>
+ </manifest>
+ </archive>
+ </configuration>
+ </plugin>
+ <plugin>
+ <artifactId>maven-antrun-plugin</artifactId>
+ <version>${maven-antrun-plugin.version}</version>
+ <executions>
+ <execution>
+ <id>package-ant-task</id>
+ <phase>install</phase>
+ <configuration>
+ <tasks>
+ <echo message="Building ant-task" />
+ <mkdir dir="${project.build.directory}/release" />
+ <echo message="" />
+ <echo message="Copying Flex PMD dependencies..." />
+ <copy file="${project.build.directory}/${project.build.finalName}.jar" todir="${project.build.directory}/release" overwrite="true" />
+ <copy file="${maven.dependency.com.adobe.ac.flex-pmd-command-line-api.jar.path}" todir="${project.build.directory}/release" overwrite="true" />
+ <copy file="${maven.dependency.com.adobe.ac.flex-pmd-core.jar.path}" todir="${project.build.directory}/release" overwrite="true" />
+ <copy file="${maven.dependency.com.adobe.ac.flex-pmd-ruleset.jar.path}" todir="${project.build.directory}/release" overwrite="true" />
+ <copy file="${maven.dependency.com.adobe.ac.flex-pmd-files.jar.path}" todir="${project.build.directory}/release" overwrite="true" />
+ <copy file="${maven.dependency.com.adobe.ac.flex-pmd-ruleset-api.jar.path}" todir="${project.build.directory}/release" overwrite="true" />
+ <copy file="${maven.dependency.com.adobe.ac.as3-parser-api.jar.path}" todir="${project.build.directory}/release" overwrite="true" />
+ <copy file="${maven.dependency.com.adobe.ac.as3-parser.jar.path}" todir="${project.build.directory}/release" overwrite="true" />
+ <echo message="Copying Command line dependencies..." />
+ <copy file="${maven.dependency.com.adobe.ac.as3-plugin-utils.jar.path}" todir="${project.build.directory}/release" overwrite="true" />
+ <copy file="${maven.dependency.pmd.pmd.jar.path}" todir="${project.build.directory}/release" overwrite="true" />
+ <copy file="${maven.dependency.plexus.plexus-utils.jar.path}" todir="${project.build.directory}/release" overwrite="true" />
+ <copy file="${maven.dependency.commons-lang.commons-lang.jar.path}" todir="${project.build.directory}/release" overwrite="true" />
+ <copy file="${maven.dependency.com.martiansoftware.jsap.jar.path}" todir="${project.build.directory}/release" overwrite="true" />
+ <echo message="Extracting license..." />
+ <copy file="../flex-pmd-parent/src/etc/header.txt" tofile="${project.build.directory}/release/LICENSE.txt" overwrite="true" />
+ <echo message="Compressing zip..." />
+ <zip destfile="${project.build.directory}/${project.build.finalName}.zip" basedir="${project.build.directory}/release" excludes="*.zip" />
+ </tasks>
+ </configuration>
+ <goals>
+ <goal>run</goal>
+ </goals>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
+ </build>
+
+</project>
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/flex-utilities/blob/b0fc5f17/FlexPMD/flex-pmd-command-line/src/main/assemble/bin.xml
----------------------------------------------------------------------
diff --git a/FlexPMD/flex-pmd-command-line/src/main/assemble/bin.xml b/FlexPMD/flex-pmd-command-line/src/main/assemble/bin.xml
new file mode 100644
index 0000000..3f5dd15
--- /dev/null
+++ b/FlexPMD/flex-pmd-command-line/src/main/assemble/bin.xml
@@ -0,0 +1,41 @@
+<!--
+
+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.
+
+-->
+<assembly>
+ <id>command-line</id>
+ <formats>
+ <format>jar</format>
+ </formats>
+ <fileSets>
+ <fileSet>
+
+ </fileSet>
+ </fileSets>
+ <dependencySets>
+ <dependencySet>
+ <includes>
+ <include>com.adobe.ac:flex-pmd-core</include>
+ <include>com.adobe.ac:as3-parser</include>
+ <include>com.adobe.ac:as3-plugin-utils</include>
+ <include>com.adobe.ac:flex-pmd-ruleset</include>
+ <include>com.adobe.ac:flex-pmd-ruleset-api</include>
+ <include>com.martiansoftware:jsap</include>
+ </includes>
+ </dependencySet>
+ </dependencySets>
+</assembly>
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/flex-utilities/blob/b0fc5f17/FlexPMD/flex-pmd-command-line/src/main/java/com/adobe/ac/pmd/commandline/FlexPMD.java
----------------------------------------------------------------------
diff --git a/FlexPMD/flex-pmd-command-line/src/main/java/com/adobe/ac/pmd/commandline/FlexPMD.java b/FlexPMD/flex-pmd-command-line/src/main/java/com/adobe/ac/pmd/commandline/FlexPMD.java
new file mode 100644
index 0000000..4b293fa
--- /dev/null
+++ b/FlexPMD/flex-pmd-command-line/src/main/java/com/adobe/ac/pmd/commandline/FlexPMD.java
@@ -0,0 +1,134 @@
+/*
+ * 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.commandline;
+
+import java.io.File;
+import java.io.IOException;
+import java.net.URISyntaxException;
+import java.util.List;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+
+import net.sourceforge.pmd.PMDException;
+
+import com.adobe.ac.pmd.CommandLineOptions;
+import com.adobe.ac.pmd.CommandLineUtils;
+import com.adobe.ac.pmd.FlexPmdParameters;
+import com.adobe.ac.pmd.FlexPmdViolations;
+import com.adobe.ac.pmd.LoggerUtils;
+import com.adobe.ac.pmd.engines.FlexPmdXmlEngine;
+import com.martiansoftware.jsap.JSAP;
+import com.martiansoftware.jsap.JSAPException;
+import com.martiansoftware.jsap.JSAPResult;
+
+public final class FlexPMD // NO_UCD
+{
+ private static JSAPResult config;
+ private static final Logger LOGGER = Logger.getLogger( FlexPMD.class.getName() );
+
+ /**
+ * @param args
+ * @throws JSAPException
+ * @throws PMDException
+ * @throws URISyntaxException
+ * @throws IOException
+ * @throws Exception
+ */
+ public static void main( final String[] args ) throws JSAPException,
+ PMDException,
+ URISyntaxException,
+ IOException
+ {
+ new LoggerUtils().loadConfiguration();
+ startFlexPMD( args );
+ LOGGER.info( "FlexPMD 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 "
+ + FlexPMD.class.getName() + " " + jsap.getUsage() );
+ }
+
+ return config.success();
+ }
+
+ static String getParameterValue( final CommandLineOptions option )
+ {
+ return config.getString( option.toString() );
+ }
+
+ static boolean startFlexPMD( final String[] args ) throws JSAPException,
+ PMDException,
+ URISyntaxException,
+ IOException
+ {
+ if ( areCommandLineOptionsCorrect( args ) )
+ {
+ final String rulesetRef = getParameterValue( CommandLineOptions.RULE_SET );
+ final String excludePackage = getParameterValue( CommandLineOptions.EXLUDE_PACKAGE );
+ final String source = getParameterValue( CommandLineOptions.SOURCE_DIRECTORY );
+ final File sourceDirectory = source.contains( "," ) ? null
+ : new File( source );
+ final List< File > sourceList = CommandLineUtils.computeSourceList( source );
+ final File outputDirectory = new File( getParameterValue( CommandLineOptions.OUTPUT ) );
+ final FlexPmdParameters parameters = new FlexPmdParameters( excludePackage == null ? ""
+ : excludePackage,
+ outputDirectory,
+ rulesetRef == null ? null
+ : new File( rulesetRef ),
+ sourceDirectory,
+ sourceList );
+ final FlexPmdXmlEngine engine = new FlexPmdXmlEngine( parameters );
+
+ engine.executeReport( new FlexPmdViolations() );
+ }
+
+ 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.OUTPUT,
+ true );
+ CommandLineUtils.registerParameter( jsap,
+ CommandLineOptions.RULE_SET,
+ false );
+ CommandLineUtils.registerParameter( jsap,
+ CommandLineOptions.EXLUDE_PACKAGE,
+ false );
+
+ return jsap.parse( args );
+ }
+
+ private FlexPMD()
+ {
+ }
+}
http://git-wip-us.apache.org/repos/asf/flex-utilities/blob/b0fc5f17/FlexPMD/flex-pmd-command-line/src/test/java/com/adobe/ac/pmd/commandline/FlexPMDTest.java
----------------------------------------------------------------------
diff --git a/FlexPMD/flex-pmd-command-line/src/test/java/com/adobe/ac/pmd/commandline/FlexPMDTest.java b/FlexPMD/flex-pmd-command-line/src/test/java/com/adobe/ac/pmd/commandline/FlexPMDTest.java
new file mode 100644
index 0000000..764b118
--- /dev/null
+++ b/FlexPMD/flex-pmd-command-line/src/test/java/com/adobe/ac/pmd/commandline/FlexPMDTest.java
@@ -0,0 +1,187 @@
+/*
+ * 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.commandline;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
+
+import java.io.File;
+import java.io.FileNotFoundException;
+import java.io.IOException;
+import java.net.URISyntaxException;
+
+import junit.framework.Assert;
+import net.sourceforge.pmd.PMDException;
+
+import org.dom4j.Document;
+import org.dom4j.DocumentException;
+import org.dom4j.io.SAXReader;
+import org.junit.Test;
+
+import com.adobe.ac.pmd.CommandLineOptions;
+import com.adobe.ac.pmd.FlexPmdTestBase;
+import com.martiansoftware.jsap.JSAPException;
+
+public class FlexPMDTest extends FlexPmdTestBase
+{
+ @Test
+ public void testAreCommandLineOptionsCorrect() throws FileNotFoundException,
+ JSAPException,
+ PMDException,
+ URISyntaxException
+ {
+ assertFalse( FlexPMD.areCommandLineOptionsCorrect( new String[]
+ {} ) );
+
+ assertFalse( FlexPMD.areCommandLineOptionsCorrect( new String[]
+ { "-y",
+ "sourceDirectory",
+ "-p",
+ "outPutDirectory" } ) );
+
+ assertTrue( FlexPMD.areCommandLineOptionsCorrect( new String[]
+ { "-s",
+ "sourceDirectory",
+ "-o",
+ "target",
+ "-r",
+ "valid.xml" } ) );
+
+ assertTrue( FlexPMD.areCommandLineOptionsCorrect( new String[]
+ { "-s",
+ "sourceDirectory",
+ "-o",
+ "target" } ) );
+ }
+
+ @Test
+ public void testFlexPMD114() throws JSAPException,
+ PMDException,
+ URISyntaxException,
+ IOException,
+ DocumentException
+ {
+ final String[] args = new String[]
+ { "-s",
+ getTestDirectory().getAbsolutePath()
+ + File.separatorChar + "flexpmd114",
+ "-o",
+ new File( "target/test2" ).getAbsolutePath() };
+
+ FlexPMD.startFlexPMD( args );
+
+ assertEquals( 3,
+ loadDocument( new File( "target/test2/pmd.xml" ) ).selectNodes( "//pmd/file" ).size() );
+ }
+
+ @Test
+ public void testFlexPMD88() throws JSAPException,
+ PMDException,
+ URISyntaxException,
+ IOException,
+ DocumentException
+ {
+ final String[] args = new String[]
+ { "-s",
+ getTestDirectory().getAbsolutePath()
+ + File.separatorChar + "bug" + File.separatorChar + "FlexPMD88.as",
+ "-o",
+ new File( "target/test3" ).getAbsolutePath() };
+
+ FlexPMD.startFlexPMD( args );
+
+ Assert.assertTrue( loadDocument( new File( "target/test3/pmd.xml" ) ).selectNodes( "//pmd/file[1]/violation" )
+ .size() > 0 );
+ }
+
+ @Test
+ public void testGetCommandLineValue() throws JSAPException
+ {
+ FlexPMD.areCommandLineOptionsCorrect( new String[]
+ { "-s",
+ "sourceDirectory",
+ "-o",
+ "target",
+ "-r",
+ "valid.xml" } );
+
+ assertEquals( "sourceDirectory",
+ FlexPMD.getParameterValue( CommandLineOptions.SOURCE_DIRECTORY ) );
+ assertEquals( "target",
+ FlexPMD.getParameterValue( CommandLineOptions.OUTPUT ) );
+ assertEquals( "valid.xml",
+ FlexPMD.getParameterValue( CommandLineOptions.RULE_SET ) );
+ }
+
+ @Test
+ public void testStartFlexPMD() throws JSAPException,
+ PMDException,
+ URISyntaxException,
+ IOException
+ {
+ final String[] args = new String[]
+ { "-s",
+ getTestDirectory().getAbsolutePath(),
+ "-o",
+ new File( "target/test" ).getAbsolutePath(),
+ "--excludePackage",
+ "cairngorm." };
+
+ FlexPMD.startFlexPMD( args );
+ }
+
+ @Test
+ public void testStartFlexPMDOnAFile() throws JSAPException,
+ PMDException,
+ URISyntaxException,
+ IOException
+ {
+ final String filePath = getTestFiles().get( "AbstractRowData.as" ).getFilePath();
+
+ final String[] args = new String[]
+ { "-s",
+ filePath,
+ "-o",
+ new File( "target/test" ).getAbsolutePath(),
+ "--excludePackage",
+ "cairngorm." };
+
+ FlexPMD.startFlexPMD( args );
+ }
+
+ @Test
+ public void testStartFlexPMDOnSeveralFolders() throws JSAPException,
+ PMDException,
+ URISyntaxException,
+ IOException
+ {
+ final String[] args = new String[]
+ { "-s",
+ new File( "target/test/bug" ).getAbsolutePath()
+ + "," + new File( "target/test/cairngorm" ).getAbsolutePath(),
+ "-o",
+ new File( "target/test" ).getAbsolutePath(), };
+
+ FlexPMD.startFlexPMD( args );
+ }
+
+ private Document loadDocument( final File outputFile ) throws DocumentException
+ {
+ return new SAXReader().read( outputFile );
+ }
+}
http://git-wip-us.apache.org/repos/asf/flex-utilities/blob/b0fc5f17/FlexPMD/flex-pmd-core/.p4ignore
----------------------------------------------------------------------
diff --git a/FlexPMD/flex-pmd-core/.p4ignore b/FlexPMD/flex-pmd-core/.p4ignore
new file mode 100644
index 0000000..eb5a316
--- /dev/null
+++ b/FlexPMD/flex-pmd-core/.p4ignore
@@ -0,0 +1 @@
+target
http://git-wip-us.apache.org/repos/asf/flex-utilities/blob/b0fc5f17/FlexPMD/flex-pmd-core/.pmd
----------------------------------------------------------------------
diff --git a/FlexPMD/flex-pmd-core/.pmd b/FlexPMD/flex-pmd-core/.pmd
new file mode 100644
index 0000000..b5c19d9
--- /dev/null
+++ b/FlexPMD/flex-pmd-core/.pmd
@@ -0,0 +1,25 @@
+<?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>../flex-pmd-parent/pmd.xml</ruleSetFile>
+ <includeDerivedFiles>false</includeDerivedFiles>
+ <violationsAsErrors>true</violationsAsErrors>
+</pmd>
http://git-wip-us.apache.org/repos/asf/flex-utilities/blob/b0fc5f17/FlexPMD/flex-pmd-core/pom.xml
----------------------------------------------------------------------
diff --git a/FlexPMD/flex-pmd-core/pom.xml b/FlexPMD/flex-pmd-core/pom.xml
new file mode 100644
index 0000000..1c9b175
--- /dev/null
+++ b/FlexPMD/flex-pmd-core/pom.xml
@@ -0,0 +1,105 @@
+<?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-core</artifactId>
+ <name>Adobe Flex PMD Core</name>
+ <description />
+ <packaging>jar</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>
+
+ <properties>
+ <doxia-core.version>1.0-alpha-4</doxia-core.version>
+ </properties>
+
+ <dependencies>
+ <dependency>
+ <groupId>doxia</groupId>
+ <artifactId>doxia-core</artifactId>
+ <version>${doxia-core.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>${project.parent.groupId}</groupId>
+ <artifactId>flex-pmd-ruleset-api</artifactId>
+ <version>${project.parent.version}</version>
+ </dependency>
+ <!-- Test dependencies -->
+ <dependency>
+ <groupId>${project.parent.groupId}</groupId>
+ <artifactId>flex-pmd-test-resources</artifactId>
+ <version>${project.version}</version>
+ <classifier>resources</classifier>
+ <type>zip</type>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>${project.parent.groupId}</groupId>
+ <artifactId>flex-pmd-ruleset</artifactId>
+ <version>${project.parent.version}</version>
+ <scope>test</scope>
+ </dependency>
+ </dependencies>
+
+ <build>
+ <testResources>
+ <testResource>
+ <directory>${project.build.directory}/test/generated-resources</directory>
+ </testResource>
+ <testResource>
+ <directory>${basedir}/src/test/resources</directory>
+ </testResource>
+ </testResources>
+ <resources>
+ <resource>
+ <directory>${project.build.directory}/test/generated-resources</directory>
+ </resource>
+ </resources>
+
+ <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,**/*.xml</includes>
+ <outputDirectory>${project.build.directory}/test/generated-resources</outputDirectory>
+ <excludeTransitive>true</excludeTransitive>
+ </configuration>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
+ </build>
+
+</project>
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/flex-utilities/blob/b0fc5f17/FlexPMD/flex-pmd-core/src/main/java/com/adobe/ac/pmd/FlexPmdParameters.java
----------------------------------------------------------------------
diff --git a/FlexPMD/flex-pmd-core/src/main/java/com/adobe/ac/pmd/FlexPmdParameters.java b/FlexPMD/flex-pmd-core/src/main/java/com/adobe/ac/pmd/FlexPmdParameters.java
new file mode 100644
index 0000000..5bab526
--- /dev/null
+++ b/FlexPMD/flex-pmd-core/src/main/java/com/adobe/ac/pmd/FlexPmdParameters.java
@@ -0,0 +1,123 @@
+/*
+ * 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;
+
+import java.io.File;
+import java.util.List;
+
+public class FlexPmdParameters
+{
+ private final String excludePackage;
+ private final boolean failOnError;
+ private final boolean failOnRuleViolation;
+ private final File outputDirectory;
+ private final File ruleSet;
+ private final File source;
+ private final List< File > sourceList;
+
+ public FlexPmdParameters( final String excludePackageToBeSet,
+ final boolean failOnErrorToBeSet,
+ final boolean failOnRuleViolationToBeSet,
+ final File outputDirectoryToBeSet,
+ final File ruleSetToBeSet,
+ final File sourceToBeSet )
+ {
+ this( excludePackageToBeSet,
+ failOnErrorToBeSet,
+ failOnRuleViolationToBeSet,
+ outputDirectoryToBeSet,
+ ruleSetToBeSet,
+ sourceToBeSet,
+ null );
+ }
+
+ public FlexPmdParameters( final String excludePackageToBeSet,
+ final boolean failOnErrorToBeSet,
+ final boolean failOnRuleViolationToBeSet,
+ final File outputDirectoryToBeSet,
+ final File ruleSetToBeSet,
+ final File sourceToBeSet,
+ final List< File > sourceListToBeSet )
+ {
+ super();
+ excludePackage = excludePackageToBeSet;
+ failOnError = failOnErrorToBeSet;
+ failOnRuleViolation = failOnRuleViolationToBeSet;
+ outputDirectory = outputDirectoryToBeSet;
+ ruleSet = ruleSetToBeSet;
+ source = sourceToBeSet;
+ sourceList = sourceListToBeSet;
+ }
+
+ public FlexPmdParameters( final String excludePackageToBeSet,
+ final File outputDirectoryToBeSet,
+ final File ruleSetToBeSet,
+ final File sourceToBeSet )
+ {
+ this( excludePackageToBeSet, false, false, outputDirectoryToBeSet, ruleSetToBeSet, sourceToBeSet, null );
+ }
+
+ public FlexPmdParameters( final String excludePackageToBeSet,
+ final File outputDirectoryToBeSet,
+ final File ruleSetToBeSet,
+ final File sourceToBeSet,
+ final List< File > sourceListToBeSet )
+ {
+ this( excludePackageToBeSet,
+ false,
+ false,
+ outputDirectoryToBeSet,
+ ruleSetToBeSet,
+ sourceToBeSet,
+ sourceListToBeSet );
+ }
+
+ public final String getExcludePackage()
+ {
+ return excludePackage;
+ }
+
+ public final File getOutputDirectory()
+ {
+ return outputDirectory;
+ }
+
+ public final File getRuleSet()
+ {
+ return ruleSet;
+ }
+
+ public final File getSource()
+ {
+ return source;
+ }
+
+ public List< File > getSourceList()
+ {
+ return sourceList;
+ }
+
+ public final boolean isFailOnError()
+ {
+ return failOnError;
+ }
+
+ public boolean isFailOnRuleViolation()
+ {
+ return failOnRuleViolation;
+ }
+}
http://git-wip-us.apache.org/repos/asf/flex-utilities/blob/b0fc5f17/FlexPMD/flex-pmd-core/src/main/java/com/adobe/ac/pmd/FlexPmdViolations.java
----------------------------------------------------------------------
diff --git a/FlexPMD/flex-pmd-core/src/main/java/com/adobe/ac/pmd/FlexPmdViolations.java b/FlexPMD/flex-pmd-core/src/main/java/com/adobe/ac/pmd/FlexPmdViolations.java
new file mode 100644
index 0000000..607610d
--- /dev/null
+++ b/FlexPMD/flex-pmd-core/src/main/java/com/adobe/ac/pmd/FlexPmdViolations.java
@@ -0,0 +1,244 @@
+/*
+ * 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;
+
+import java.io.File;
+import java.io.Serializable;
+import java.util.Collections;
+import java.util.HashSet;
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.Map.Entry;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+
+import net.sourceforge.pmd.PMDException;
+import net.sourceforge.pmd.Rule;
+import net.sourceforge.pmd.RuleReference;
+import net.sourceforge.pmd.RuleSet;
+
+import com.adobe.ac.pmd.files.FileSetUtils;
+import com.adobe.ac.pmd.files.IFlexFile;
+import com.adobe.ac.pmd.files.impl.FileUtils;
+import com.adobe.ac.pmd.nodes.IPackage;
+import com.adobe.ac.pmd.rules.core.IFlexAstRule;
+import com.adobe.ac.pmd.rules.core.IFlexRule;
+import com.adobe.ac.utils.StackTraceUtils;
+
+public class FlexPmdViolations implements Serializable
+{
+ private static final Logger LOGGER;
+
+ /**
+ *
+ */
+ private static final long serialVersionUID = -3683680443330143504L;
+
+ static
+ {
+ LOGGER = Logger.getLogger( FlexPmdViolations.class.getName() );
+ }
+
+ private Map< String, IPackage > asts;
+ private Map< String, IFlexFile > files;
+ private boolean hasBeenComputed;
+ private final Map< String, IFlexRule > rules;
+ private final Map< IFlexRule, Long > ruleSpeeds;
+ private final Map< IFlexFile, List< IFlexViolation > > violations;
+
+ public FlexPmdViolations()
+ {
+ violations = new LinkedHashMap< IFlexFile, List< IFlexViolation > >();
+ rules = new LinkedHashMap< String, IFlexRule >();
+ ruleSpeeds = new LinkedHashMap< IFlexRule, Long >();
+ hasBeenComputed = false;
+ }
+
+ public final void computeViolations( final File source,
+ final List< File > sourceList,
+ final RuleSet ruleSet,
+ final String packageToExclude ) throws PMDException
+ {
+ hasBeenComputed = true;
+
+ if ( ruleSet != null )
+ {
+ computeRules( ruleSet );
+ computeFiles( source,
+ sourceList,
+ packageToExclude,
+ ruleSet.getExcludePatterns() );
+ computeAsts();
+ processRules();
+ sortViolations();
+ }
+ }
+
+ public final Map< IFlexFile, List< IFlexViolation >> getViolations()
+ {
+ return violations;
+ }
+
+ public final boolean hasViolationsBeenComputed()
+ {
+ return hasBeenComputed;
+ }
+
+ private void computeAsts() throws PMDException
+ {
+ LOGGER.info( "computing Asts" );
+
+ final long startTime = System.currentTimeMillis();
+ asts = FileSetUtils.computeAsts( files );
+
+ LOGGER.info( "computed Asts in "
+ + ( System.currentTimeMillis() - startTime ) + " ms" );
+ }
+
+ private void computeFiles( final File source,
+ final List< File > sourceList,
+ final String packageToExclude,
+ final List< String > excludePatterns ) throws PMDException
+ {
+ LOGGER.info( "computing FilesList" );
+
+ final long startTime = System.currentTimeMillis();
+
+ files = FileUtils.computeFilesList( source,
+ sourceList,
+ packageToExclude,
+ excludePatterns );
+ LOGGER.info( "computed FilesList in "
+ + ( System.currentTimeMillis() - startTime ) + " ms" );
+ }
+
+ private void computeRules( final RuleSet ruleSet )
+ {
+ LOGGER.info( "computing RulesList" );
+
+ final long startTime = System.currentTimeMillis();
+ Set< String > excludes = new HashSet< String >( ruleSet.getExcludePatterns() );
+
+ for ( Rule rule : ruleSet.getRules() )
+ {
+ while ( rule instanceof RuleReference )
+ {
+ excludes = ( ( RuleReference ) rule ).getRuleSetReference().getExcludes();
+ rule = ( ( RuleReference ) rule ).getRule();
+ }
+ final IFlexRule flexRule = ( IFlexRule ) rule;
+
+ if ( excludes != null
+ && !excludes.isEmpty() )
+ {
+ flexRule.setExcludes( excludes );
+ }
+ rules.put( flexRule.getRuleName(),
+ flexRule );
+ }
+
+ LOGGER.info( "computed RulesList in "
+ + ( System.currentTimeMillis() - startTime ) + " ms" );
+ }
+
+ private void processFile( final IFlexRule currentRule,
+ final IFlexFile currentFile )
+ {
+ try
+ {
+ final String fullyQualifiedName = currentFile.getFullyQualifiedName();
+ final IPackage ast = currentRule instanceof IFlexAstRule ? asts.get( fullyQualifiedName )
+ : null;
+ final List< IFlexViolation > foundViolations = currentRule.processFile( currentFile,
+ ast,
+ files );
+
+ if ( !foundViolations.isEmpty() )
+ {
+ if ( violations.containsKey( currentFile ) )
+ {
+ violations.get( currentFile ).addAll( foundViolations );
+ }
+ else
+ {
+ violations.put( currentFile,
+ foundViolations );
+ }
+ }
+ }
+ catch ( final Exception e )
+ {
+ LOGGER.warning( StackTraceUtils.print( currentFile.getFullyQualifiedName(),
+ e ) );
+ }
+ }
+
+ private void processRule( final IFlexRule currentRule )
+ {
+ LOGGER.fine( "Processing "
+ + currentRule.getRuleName() + "..." );
+
+ for ( final Entry< String, IFlexFile > currentFileEntry : files.entrySet() )
+ {
+ processFile( currentRule,
+ currentFileEntry.getValue() );
+ }
+ }
+
+ private void processRule( final String currentRuleName,
+ final IFlexRule currentRule )
+ {
+ final long startTime = System.currentTimeMillis();
+
+ processRule( currentRule );
+ final long ellapsedTime = System.currentTimeMillis()
+ - startTime;
+
+ if ( LOGGER.isLoggable( Level.FINE ) )
+ {
+ LOGGER.fine( "rule "
+ + currentRuleName + " computed in " + ellapsedTime + "ms" );
+ }
+ if ( LOGGER.isLoggable( Level.FINER ) )
+ {
+ ruleSpeeds.put( currentRule,
+ ellapsedTime );
+ }
+ }
+
+ private void processRules()
+ {
+ for ( final Entry< String, IFlexRule > currentRuleEntry : rules.entrySet() )
+ {
+ processRule( currentRuleEntry.getKey(),
+ currentRuleEntry.getValue() );
+ }
+ }
+
+ private void sortViolations()
+ {
+ for ( final Entry< String, IFlexFile > entry : files.entrySet() )
+ {
+ if ( violations.containsKey( entry.getValue() ) )
+ {
+ Collections.sort( violations.get( entry.getValue() ) );
+ }
+ }
+ }
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/flex-utilities/blob/b0fc5f17/FlexPMD/flex-pmd-core/src/main/java/com/adobe/ac/pmd/engines/AbstractFlexPmdEngine.java
----------------------------------------------------------------------
diff --git a/FlexPMD/flex-pmd-core/src/main/java/com/adobe/ac/pmd/engines/AbstractFlexPmdEngine.java b/FlexPMD/flex-pmd-core/src/main/java/com/adobe/ac/pmd/engines/AbstractFlexPmdEngine.java
new file mode 100644
index 0000000..be8f747
--- /dev/null
+++ b/FlexPMD/flex-pmd-core/src/main/java/com/adobe/ac/pmd/engines/AbstractFlexPmdEngine.java
@@ -0,0 +1,199 @@
+/*
+ * 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.engines;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.net.URISyntaxException;
+import java.util.List;
+import java.util.logging.Logger;
+
+import net.sourceforge.pmd.PMDException;
+import net.sourceforge.pmd.RuleSet;
+import net.sourceforge.pmd.RuleSetFactory;
+
+import org.apache.commons.lang.StringUtils;
+import org.codehaus.plexus.util.IOUtil;
+
+import com.adobe.ac.pmd.FlexPmdParameters;
+import com.adobe.ac.pmd.FlexPmdViolations;
+import com.adobe.ac.pmd.IFlexViolation;
+import com.adobe.ac.utils.StackTraceUtils;
+
+public abstract class AbstractFlexPmdEngine
+{
+ private static final Logger LOGGER = Logger.getLogger( AbstractFlexPmdEngine.class.getName() );
+
+ private static int computeViolationNumber( final FlexPmdViolations flexPmdViolations )
+ {
+ int foundViolations = 0;
+ for ( final List< IFlexViolation > violations : flexPmdViolations.getViolations().values() )
+ {
+ foundViolations += violations.size();
+ }
+ LOGGER.info( "Violations number found: "
+ + foundViolations );
+ return foundViolations;
+ }
+
+ private static File extractDefaultRuleSet() throws URISyntaxException,
+ IOException
+ {
+ final String rulesetURI = "/com/adobe/ac/pmd/default_flex.xml";
+ final InputStream resourceAsStream = AbstractFlexPmdEngine.class.getResourceAsStream( rulesetURI );
+ final File temporaryRuleset = File.createTempFile( "default_flex",
+ ".xml" );
+ temporaryRuleset.deleteOnExit();
+ final FileOutputStream writter = new FileOutputStream( temporaryRuleset );
+ IOUtil.copy( resourceAsStream,
+ writter );
+
+ resourceAsStream.close();
+ return temporaryRuleset;
+ }
+
+ private final File outputDirectory;
+ private final String packageToExclude;
+ private RuleSet ruleSet;
+ private final File source;
+ private final List< File > sourceList;
+
+ public AbstractFlexPmdEngine( final FlexPmdParameters parameters )
+ {
+ super();
+
+ source = parameters.getSource();
+ sourceList = parameters.getSourceList();
+ outputDirectory = parameters.getOutputDirectory();
+ packageToExclude = parameters.getExcludePackage();
+ try
+ {
+ ruleSet = loadRuleset( parameters.getRuleSet() );
+ }
+ catch ( final URISyntaxException e )
+ {
+ LOGGER.warning( StackTraceUtils.print( e ) );
+ }
+ catch ( final IOException e )
+ {
+ LOGGER.warning( StackTraceUtils.print( e ) );
+ }
+ }
+
+ /**
+ * @param flexPmdViolations
+ * @return The number of violations with the given ruleset and the result
+ * wrapper in case of reuse
+ * @throws PMDException
+ * @throws URISyntaxException
+ * @throws IOException
+ */
+ public final void executeReport( final FlexPmdViolations flexPmdViolations ) throws PMDException
+ {
+ if ( source == null
+ && sourceList == null )
+ {
+ throw new PMDException( "unspecified sourceDirectory" );
+ }
+ if ( outputDirectory == null )
+ {
+ throw new PMDException( "unspecified outputDirectory" );
+ }
+
+ if ( ruleSet != null )
+ {
+ if ( !flexPmdViolations.hasViolationsBeenComputed() )
+ {
+ computeViolations( flexPmdViolations );
+ }
+ computeViolationNumber( flexPmdViolations );
+ writeAnyReport( flexPmdViolations );
+ }
+ }
+
+ public final RuleSet getRuleSet()
+ {
+ return ruleSet;
+ }
+
+ protected File getOutputDirectory()
+ {
+ return outputDirectory;
+ }
+
+ protected abstract void writeReport( final FlexPmdViolations pmd ) throws PMDException;
+
+ private void computeViolations( final FlexPmdViolations flexPmdViolations ) throws PMDException
+ {
+ final long startTime = System.currentTimeMillis();
+
+ flexPmdViolations.computeViolations( source,
+ sourceList,
+ ruleSet,
+ packageToExclude );
+ final long ellapsedTime = System.currentTimeMillis()
+ - startTime;
+ LOGGER.info( "It took "
+ + ellapsedTime + "ms to compute violations" );
+ }
+
+ private File extractRuleset( final File ruleSetFile ) throws URISyntaxException,
+ IOException
+ {
+ return ruleSetFile == null ? extractDefaultRuleSet()
+ : ruleSetFile;
+ }
+
+ private String getReportType()
+ {
+ return StringUtils.substringBefore( StringUtils.substringAfter( getClass().getName(),
+ "FlexPmd" ),
+ "Engine" );
+ }
+
+ private RuleSet loadRuleset( final File ruleSetFile ) throws URISyntaxException,
+ IOException
+ {
+ final File realRuleSet = extractRuleset( ruleSetFile );
+ final FileInputStream inputStream = new FileInputStream( realRuleSet );
+ final RuleSet loadedRuleSet = new RuleSetFactory().createRuleSet( inputStream );
+
+ LOGGER.info( "Ruleset: "
+ + realRuleSet.getAbsolutePath() );
+ LOGGER.info( "Rules number in the ruleSet: "
+ + loadedRuleSet.getRules().size() );
+ inputStream.close();
+
+ return loadedRuleSet;
+ }
+
+ private void writeAnyReport( final FlexPmdViolations flexPmdViolations ) throws PMDException
+ {
+ long startTime;
+ long ellapsedTime;
+ startTime = System.currentTimeMillis();
+ writeReport( flexPmdViolations );
+ ellapsedTime = System.currentTimeMillis()
+ - startTime;
+
+ LOGGER.info( "It took "
+ + ellapsedTime + "ms to write the " + getReportType() + " report" );
+ }
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/flex-utilities/blob/b0fc5f17/FlexPMD/flex-pmd-core/src/main/java/com/adobe/ac/pmd/engines/FlexPMDFormat.java
----------------------------------------------------------------------
diff --git a/FlexPMD/flex-pmd-core/src/main/java/com/adobe/ac/pmd/engines/FlexPMDFormat.java b/FlexPMD/flex-pmd-core/src/main/java/com/adobe/ac/pmd/engines/FlexPMDFormat.java
new file mode 100644
index 0000000..f3f11d4
--- /dev/null
+++ b/FlexPMD/flex-pmd-core/src/main/java/com/adobe/ac/pmd/engines/FlexPMDFormat.java
@@ -0,0 +1,35 @@
+/*
+ * 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.engines;
+
+public enum FlexPMDFormat
+{
+ HTML("flexPmd.html"), XML("pmd.xml");
+
+ private final String name;
+
+ private FlexPMDFormat( final String formatName )
+ {
+ name = formatName;
+ }
+
+ @Override
+ public String toString()
+ {
+ return name;
+ }
+}