Add an alternative jsl stylesheet. Thanks to James Dempsey.

git-svn-id: https://svn.apache.org/repos/asf/maven/maven-1/plugins/trunk@471752 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
ltheussl 2006-11-06 14:52:27 +00:00
parent 867474593c
commit e9ab8a744e
4 changed files with 268 additions and 0 deletions

View File

@ -172,6 +172,7 @@
<j:set var="stylesheet" value="${plugin.resources}/pmd.jsl"/> <j:set var="stylesheet" value="${plugin.resources}/pmd.jsl"/>
</j:if> </j:if>
<echo>Converting the PMD report to xdoc ...</echo> <echo>Converting the PMD report to xdoc ...</echo>
<echo>Using stylesheet: ${stylesheet}</echo>
<doc:jsl <doc:jsl
input="${maven.build.dir}/pmd-raw-report.xml" input="${maven.build.dir}/pmd-raw-report.xml"

View File

@ -0,0 +1,263 @@
<?xml version="1.0" encoding="UTF-8"?>
<!--
* ========================================================================
*
* Copyright 2006 The Apache Software Foundation.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
* ========================================================================
-->
<jsl:stylesheet
select="$doc"
xmlns:j="jelly:core"
xmlns:jsl="jelly:jsl"
xmlns:util="jelly:util"
xmlns:x="jelly:xml"
xmlns:doc="doc"
xmlns:maven="jelly:maven"
xmlns="dummy"
trim="false">
<!-- This needs to be instantiated here to be available in the template matches -->
<j:useBean var="mavenTool" class="org.apache.maven.util.MavenTool"/>
<j:useBean var="htmlescape" class="org.apache.velocity.anakia.Escape"/>
<j:useBean var="fileutil" class="org.apache.velocity.texen.util.FileUtil"/>
<j:useBean var="pathtool" class="org.apache.maven.util.DVSLPathTool"/>
<!-- Force the jxr plugin to be loaded - even if it's not used in the project -->
<maven:set plugin="maven-jxr-plugin" property="foo" value="bar"/>
<jsl:template match="pmd">
<document>
<properties>
<title>PMD Results</title>
</properties>
<body>
<section name="PMD Results">
<p>
The following document contains the results of
<a href="http://pmd.sourceforge.net/">PMD</a>.
</p>
</section>
<section name="Summary">
<j:set var="fileCount"><x:expr select="count(file)"/></j:set>
<j:set var="errorCount"><x:expr select="count(file/violation)"/></j:set>
<table>
<tr>
<th>Files</th>
<th>Errors</th>
</tr>
<tr>
<td>
<doc:formatAsNumber string="${fileCount}" pattern="0"/>
</td>
<td>
<j:set var="breakdown" value="" />
<j:forEach indexVar="pri" begin="1" end="9" step="1">
<j:set var="priCount"><x:expr select="count(file/violation[@priority=${pri}])"/></j:set>
<j:if test="${priCount > 0}">
<j:if test="${breakdown.length() > 0}">
<j:set var="breakdown" value="${breakdown}, " />
</j:if>
<j:if test="${breakdown.length() == 0}">
<j:set var="breakdown" value="(" />
</j:if>
<j:set var="breakdown" value="${breakdown}P${pri}:${priCount}" />
</j:if>
</j:forEach>
<j:set var="breakdown" value="${breakdown})" />
<doc:formatAsNumber string="${errorCount}" pattern="0"/> ${breakdown}
</td>
</tr>
</table>
</section>
<section name="Files">
<table>
<tr>
<th>Files</th>
<th>Violations</th>
</tr>
<j:if test="${pom.build.sourceDirectory != null}">
<j:set var="fullSrcDir" value="${pom.build.sourceDirectory}"/>
<j:set var="srcDir" value="${fileutil.file(fullSrcDir).getCanonicalPath()}"/>
<j:set var="srcDirLength" value="${srcDir.length() + 1}"/>
</j:if>
<j:if test="${pom.build.unitTestSourceDirectory != null}">
<j:set var="fullTstDir" value="${pom.build.unitTestSourceDirectory}"/>
<j:set var="tstDir" value="${fileutil.file(fullTstDir).getCanonicalPath()}"/>
<j:set var="tstDirLength" value="${tstDir.length() + 1}"/>
</j:if>
<x:set var="files" select="file"/>
<!-- x:forEach is busted -->
<j:forEach var="file" items="${files}">
<!-- Type coercion doesn't work in jexl. -->
<j:set var="name" value="${file.attribute('name').getValue()}"/>
<j:if test="${pom.build.sourceDirectory != null}">
<j:set var="srcRelPathLen" value="${pathtool.getRelativePath(srcDir,name).length()}"/>
<j:if test="${srcRelPathLen > 0}">
<j:set var="name" value="${name.substring(mavenTool.toInteger(srcDirLength.toString()))}"/>
</j:if>
</j:if>
<j:if test="${pom.build.unitTestSourceDirectory != null}">
<j:set var="tstRelPathLen" value="${pathtool.getRelativePath(tstDir,name).length()}"/>
<j:if test="${tstRelPathLen > 0}">
<j:set var="name" value="${name.substring(mavenTool.toInteger(tstDirLength.toString()))}"/>
</j:if>
</j:if>
<util:replace var="name" value="${name}" oldChar="\\" newChar="/"/>
<!--- +1 is for the trailing slash above -->
<j:set var="errorCount"><x:expr select="count($file/violation)"/></j:set>
<j:if test="${errorCount != 0}">
<tr>
<td>
<a href="#${name}">${name}</a>
</td>
<td>
<j:set var="breakdown" value="" />
<j:forEach indexVar="pri" begin="1" end="9" step="1">
<j:set var="priCount"><x:expr select="count($file/violation[@priority=$pri])"/></j:set>
<j:if test="${priCount > 0}">
<j:if test="${breakdown.length() > 0}">
<j:set var="breakdown" value="${breakdown}, " />
</j:if>
<j:if test="${breakdown.length() == 0}">
<j:set var="breakdown" value="(" />
</j:if>
<j:set var="breakdown" value="${breakdown}P${pri}:${priCount}" />
</j:if>
</j:forEach>
<j:set var="breakdown" value="${breakdown})" />
<doc:formatAsNumber string="${errorCount}" pattern="0"/> ${breakdown}
</td>
</tr>
</j:if>
</j:forEach>
</table>
<!-- Where documentations are generated -->
<j:set var="docsDestDir" value="${maven.docs.dest}"/>
<util:replace var="docsDestDir" value="${docsDestDir}" oldChar="\\" newChar="/"/>
<!-- JXR is activated ? -->
<j:set var="jxrActivated" value="false"/>
<j:forEach var="report" items="${pom.reports}">
<j:if test="${report.equals('maven-jxr-plugin')}">
<j:set var="jxrActivated" value="true"/>
</j:if>
</j:forEach>
<!-- I don't think this test is useful but .... in the case of.. -->
<j:if test="${pom.build.sourceDirectory != null}">
<!-- Where JXR files are generated for the code -->
<j:set var="jxrDestDir" value="${maven.jxr.destdir}"/>
<util:replace var="jxrDestDir" value="${jxrDestDir}" oldChar="\\" newChar="/"/>
<j:choose>
<j:when test="${jxrActivated and jxrDestDir.startsWith(docsDestDir)}">
<!-- We create a relative path to the jxr files -->
<!-- ${maven.jxr.destdir} should be a subdirectory of ${maven.docs.dest} -->
<j:set var="jxrDestDir" value="${jxrDestDir.substring(docsDestDir.length(),jxrDestDir.length())}"/>
<!-- remove first slash if needed -->
<j:if test="${jxrDestDir.startsWith('/')}">
<j:set var="jxrDestDir" value="${jxrDestDir.substring(1,jxrDestDir.length())}"/>
</j:if>
</j:when>
<j:otherwise>
<!-- Do not generate the link -->
<j:set var="jxrDestDir" value=""/>
</j:otherwise>
</j:choose>
</j:if>
<j:if test="${pom.build.unitTestSourceDirectory != null}">
<!-- Where JXR files are generated for the tests -->
<j:set var="jxrTestDestDir" value="${maven.jxr.destdir.test}"/>
<util:replace var="jxrTestDestDir" value="${jxrTestDestDir}" oldChar="\\" newChar="/"/>
<maven:get var="xrefGeneratedForTests" plugin="maven-jxr-plugin" property="maven.jxr.include.testXref"/>
<j:choose>
<j:when test="${jxrActivated and xrefGeneratedForTests and jxrTestDestDir.startsWith(docsDestDir)}">
<!-- We create a relative path to the jxr files for tests -->
<!-- ${maven.jxr.destdir.test} should be a subdirectory of ${maven.docs.dest} -->
<j:set var="jxrTestDestDir" value="${jxrTestDestDir.substring(docsDestDir.length(),jxrTestDestDir.length())}"/>
<!-- remove first slash if needed -->
<j:if test="${jxrTestDestDir.startsWith('/')}">
<j:set var="jxrTestDestDir" value="${jxrTestDestDir.substring(1,jxrTestDestDir.length())}"/>
</j:if>
</j:when>
<j:otherwise>
<!-- Do not generate the link -->
<j:set var="jxrTestDestDir" value=""/>
</j:otherwise>
</j:choose>
</j:if>
<j:forEach var="file" items="${files}">
<x:set var="errorCount" select="count($file/violation)"/>
<j:if test="${errorCount != 0}">
<j:set var="name" value="${file.attribute('name').getValue()}"/>
<j:set var="jxrPath" value=""/>
<j:if test="${pom.build.sourceDirectory != null}">
<j:set var="srcRelPathLen" value="${pathtool.getRelativePath(srcDir,name).length()}"/>
<j:if test="${srcRelPathLen > 0}">
<j:set var="name" value="${name.substring(mavenTool.toInteger(srcDirLength.toString()))}"/>
<j:set var="jxrPath" value="${jxrDestDir}"/>
</j:if>
</j:if>
<j:if test="${pom.build.unitTestSourceDirectory != null}">
<j:set var="tstRelPathLen" value="${pathtool.getRelativePath(tstDir,name).length()}"/>
<j:if test="${tstRelPathLen > 0}">
<j:set var="name" value="${name.substring(mavenTool.toInteger(tstDirLength.toString()))}"/>
<j:set var="jxrPath" value="${jxrTestDestDir}"/>
</j:if>
</j:if>
<util:replace var="name" value="${name}" oldChar="\\" newChar="/"/>
<subsection name="${name}">
<table>
<tr>
<th>Pri</th>
<th>Violation</th>
<th>Line</th>
</tr>
<x:set var="errors" select="$file/violation" sort="@priority"/>
<j:forEach var="error" items="${errors}">
<tr>
<td>
<j:set var="priority" value="${error.attribute('priority').getValue()}"/>
${priority}
</td>
<td>
<j:set var="externalInfoUrl" value="${error.attribute('externalInfoUrl').getValue()}"/>
<j:set var="errorMessage" value="${error.StringValue}"/>
${htmlescape.getText(errorMessage)} - <a href="${externalInfoUrl}" target="_blank">details...</a>
</td>
<td>
<j:set var="line" value="${error.attribute('line').getValue()}"/>
<j:set var="lastIndex" value="${name.lastIndexOf('.java')}"/>
<j:set var="jxrPathLen" value="${jxrPath.length()}"/>
<j:choose>
<j:when test="${lastIndex > 0 and jxrPathLen > 0}">
<j:set var="index" value="${mavenTool.toInteger(lastIndex.toString())}"/>
<j:set var="nameWithoutJavaExtension" value="${name.substring(0, index)}"/>
<util:replace var="nameWithoutJavaExtension" value="${nameWithoutJavaExtension}" oldChar="\\" newChar="/"/>
<a href="${jxrPath}/${nameWithoutJavaExtension}.html#${line}">${line}</a>
</j:when>
<j:otherwise>
${line}
</j:otherwise>
</j:choose>
</td>
</tr>
</j:forEach>
</table>
</subsection>
</j:if>
</j:forEach>
</section>
</body>
</document>
</jsl:template>
</jsl:stylesheet>

View File

@ -25,6 +25,7 @@
</properties> </properties>
<body> <body>
<release version="1.10-SNAPSHOT" date="In SVN"> <release version="1.10-SNAPSHOT" date="In SVN">
<action dev="ltheussl" type="add" due-to="James Dempsey">Add an alternative jsl stylesheet that includes priority information.</action>
<action dev="ltheussl" type="add" issue="MPPMD-27">Allow custom JSL stylesheet to be defined via a property.</action> <action dev="ltheussl" type="add" issue="MPPMD-27">Allow custom JSL stylesheet to be defined via a property.</action>
<action dev="aheritier" type="update">Update dependencies to unify them between plugins. The following dependencies are updated : jaxen v1.0-FCS-full to 1.1-beta-9. The following dependencies are removed : saxpath.</action> <action dev="aheritier" type="update">Update dependencies to unify them between plugins. The following dependencies are updated : jaxen v1.0-FCS-full to 1.1-beta-9. The following dependencies are removed : saxpath.</action>
<action dev="aheritier" type="update">Upgrade to pmd-3.7.</action> <action dev="aheritier" type="update">Upgrade to pmd-3.7.</action>

View File

@ -128,6 +128,9 @@
<td> <td>
A custom stylesheet to use for the report. A custom stylesheet to use for the report.
Default is <code>${plugin.resources}/pmd.jsl</code>. Default is <code>${plugin.resources}/pmd.jsl</code>.
An alternative stylesheet is supplied that includes
priority information of pmd violations. To use it, set
<code>maven.pmd.stylesheet=${plugin.resources}/pmd-priority.jsl</code>.
</td> </td>
</tr> </tr>
</table> </table>