From 7598d43bbf3551c7aba33585841c2aa20f1b0ff2 Mon Sep 17 00:00:00 2001 From: mohan-chinnappan-n <mohan.chinnappan.n@gmail.com> Date: Mon, 12 Sep 2022 18:21:17 -0400 Subject: [PATCH] v2 pmd-report xslt added --- pmd-core/etc/xslt/pmd-report-v2.xslt | 236 +++++++++++++++++++++++++++ 1 file changed, 236 insertions(+) create mode 100644 pmd-core/etc/xslt/pmd-report-v2.xslt diff --git a/pmd-core/etc/xslt/pmd-report-v2.xslt b/pmd-core/etc/xslt/pmd-report-v2.xslt new file mode 100644 index 0000000000..df4dbd9ed0 --- /dev/null +++ b/pmd-core/etc/xslt/pmd-report-v2.xslt @@ -0,0 +1,236 @@ +<?xml version="1.0"?> +<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" +xmlns:scan="http://pmd.sourceforge.net/report/2.0.0" + > + +<xsl:template match="scan:pmd"> + <xsl:variable name="version" select="@version" /> + <xsl:variable name="timestamp" select="@timestamp" /> + <xsl:variable name="count">0</xsl:variable> + <xsl:variable name="total">0</xsl:variable> + + + <html> + <head> + <link rel='stylesheet' type='text/css' href='https://cdn.datatables.net/1.12.1/css/jquery.dataTables.css'/> + <link rel='stylesheet' type='text/css' href='https://cdn.jsdelivr.net/npm/bootstrap@5.2.0/dist/css/bootstrap.min.css'/> + + <script src='https://code.jquery.com/jquery-3.6.1.min.js'></script> + <script type='text/javascript' charset='utf8' src='https://cdn.datatables.net/1.12.1/js/jquery.dataTables.js'></script> + + <script src="https://cdn.jsdelivr.net/npm/vega@5.21.0"></script> + <script src="https://cdn.jsdelivr.net/npm/vega-lite@5.2.0"></script> + <script src="https://cdn.jsdelivr.net/npm/vega-embed@6.20.2"></script> + + <script> + let total = 0; + let p1 = 0 , p2 = 0, p3 = 0, p4 = 0, p5 = 0; + let bp =0, codeStyle = 0, design = 0, doc = 0, ep = 0, perf = 0, security = 0; + </script> + + </head> + <body> + <nav class="nav navbar navbar-expand-md navbar-dark bg-dark fixed-top"> + + + <div class="container-fluid"> + <a class="navbar-brand" href="#">PMD Report</a> + <button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarSupportedContent" aria-controls="navbarSupportedContent" aria-expanded="false" aria-label="Toggle navigation"> + <span class="navbar-toggler-icon"></span> + </button> + + </div> +</nav> + <div class='container' style='margin-top:100px;'> + <h5>Problems found :: <small> Version: <xsl:value-of select="$version"/> @ <xsl:value-of select="$timestamp"/></small> </h5> + <table id='pmdTable' class='table table-hover table-striped'> + <thead> + + <tr> + <th>File #</th> + <th>Issue #</th> + <th>File</th> + <th>Line</th> + <th>Priority</th> + <th>Rule</th> + <th>Problem</th> + + + </tr> + </thead> + <xsl:for-each select="scan:file"> + <xsl:variable name="filename" select="@name" /> + <xsl:variable name="slno" select="position()" /> + <xsl:for-each select="scan:violation"> + <xsl:variable name="pos" select="position()" /> + <xsl:variable name="currPos" select="position()" /> + <tr> + <td><xsl:value-of select="$slno"/></td> + <td><xsl:value-of select="position()"/></td> + <td><xsl:value-of select="$filename"/> </td> + <td><xsl:value-of select="@beginline"/></td> + <td><xsl:value-of select="@priority"/></td> + <xsl:variable name="priority" select="@priority" /> + <script> total++; </script> + <xsl:choose> + <xsl:when test="$priority = 1"> + <script> p1++; </script> + </xsl:when> + <xsl:when test="$priority = 2"> + <script> p2++; </script> + </xsl:when> + + <xsl:when test="$priority = 3"> + <script> p3++; </script> + </xsl:when> + <xsl:when test="$priority = 4"> + <script> p4++; </script> + </xsl:when> + <xsl:when test="$priority = 5"> + <script> p5++; </script> + </xsl:when> + + + <xsl:otherwise> + <xsl:text></xsl:text> + </xsl:otherwise> + </xsl:choose> + + + + + + <xsl:variable name="ruleset" select="@ruleset" /> + <xsl:choose> + <xsl:when test="$ruleset = 'Best Practices'"> + <script> bp++; </script> + </xsl:when> + <xsl:when test="$ruleset = 'Code Style'"> + <script> codeStyle++; </script> + </xsl:when> + + <xsl:when test="$ruleset = 'Design'"> + <script> design++; </script> + </xsl:when> + + <xsl:when test="$ruleset = 'Documentation'"> + <script> doc++; </script> + </xsl:when> + + <xsl:when test="$ruleset = 'Error Prone'"> + <script> ep++; </script> + </xsl:when> + + <xsl:when test="$ruleset = 'Performance'"> + <script> perf++; </script> + </xsl:when> + + <xsl:when test="$ruleset = 'Security'"> + <script> security++; </script> + </xsl:when> + + + <xsl:otherwise> + <xsl:text></xsl:text> + </xsl:otherwise> + </xsl:choose> + <td><xsl:value-of select="@ruleset"/></td> + + <td> <a href="{@externalInfoUrl}">Details</a></td> + </tr> + </xsl:for-each> + </xsl:for-each> + </table> + <div id="vizBar"></div> + <div id="vizArc"></div> + <div id="vizArcRS"></div> + + </div> + <script> +$(document).ready( function () { $('#pmdTable').DataTable(); + console.log(total, p1,p2,p3, p4); + +// charting +const arcSpec ={ + "$schema": "https://vega.github.io/schema/vega-lite/v5.json", + "description": "PMD violations", + "data": { + "values": [ + {"priority": 1, "count": p1}, + {"priority": 2, "count": p2}, + {"priority": 3, "count": p3}, + {"priority": 4, "count": p4}, + ] + }, + "mark": {"type": "arc" , "innerRadius": 50, "tooltip": true}, + + "encoding": { + "theta": {"field": "count", "type": "quantitative"}, + "color": {"field": "priority", "type": "nominal"} + }, + +} + + vegaEmbed('#vizArc', arcSpec); + +const arcSpecRS ={ + "$schema": "https://vega.github.io/schema/vega-lite/v5.json", + "description": "PMD violations", + + "data": { + "values": [ + {"rule": "Best Practices", "count": bp}, + {"rule": "Code Style", "count":codeStyle }, + {"rule": "Design", "count": design}, + {"rule": "Documentation", "count": doc}, + + {"rule": "Documentation", "count": ep}, + {"rule": "Error Prone", "count": perf}, + {"rule": "Security", "count": security} + + ] + }, + "mark": {"type": "arc" , "innerRadius": 50, "tooltip": true}, + + "encoding": { + "theta": {"field": "count", "type": "quantitative"}, + "color": {"field": "rule", "type": "nominal"} + }, + +} + vegaEmbed('#vizArcRS', arcSpecRS); + +const barSpec = + { + "$schema": "https://vega.github.io/schema/vega-lite/v5.json", + "description": "PMD violations", + "data": { + "values": [ + {"priority": 1, "count": p1}, + {"priority": 2, "count": p2}, + {"priority": 3, "count": p3}, + {"priority": 4, "count": p4}, + {"priority": 5, "count": p5}, + ] + }, + "mark": { type: "bar","tooltip": true}, + "encoding": { + "x": {"field": "priority", "type": "nominal", "axis": {"labelAngle": 0}}, + "y": {"field": "count", "type": "quantitative"} + } +} + + vegaEmbed('#vizBar', barSpec); + + + } ); + + </script> + + + + </body> + </html> +</xsl:template> + +</xsl:stylesheet>