OSDN Git Service

git-svn-id: svn+ssh://svn.sourceforge.jp/svnroot/filelock/trunk@23 c6214a2a-ec3a...
[filelock/repo.git] / filelock / src / build / lib / findbugs / src / xsl / default.xsl
1 <?xml version="1.0" encoding="UTF-8"?>
2
3 <!--
4   FindBugs - Find bugs in Java programs
5   Copyright (C) 2004,2005 University of Maryland
6   Copyright (C) 2005, Chris Nappin
7   
8   This library is free software; you can redistribute it and/or
9   modify it under the terms of the GNU Lesser General Public
10   License as published by the Free Software Foundation; either
11   version 2.1 of the License, or (at your option) any later version.
12   
13   This library is distributed in the hope that it will be useful,
14   but WITHOUT ANY WARRANTY; without even the implied warranty of
15   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
16   Lesser General Public License for more details.
17   
18   You should have received a copy of the GNU Lesser General Public
19   License along with this library; if not, write to the Free Software
20   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
21 -->
22
23 <!--
24   A simple XSLT stylesheet to transform FindBugs XML results
25   annotated with messages into HTML.
26
27   If you want to experiment with modifying this stylesheet,
28   or write your own, you need to generate XML output from FindBugs
29   using a special option which lets it know to include
30   human-readable messages in the XML.  Invoke the findbugs script
31   as follows:
32
33     findbugs -textui -xml:withMessages -project myProject.fb > results.xml
34
35   Then you can use your favorite XSLT implementation to transform
36   the XML output into HTML. (But don't use xsltproc. It generates well-nigh
37   unreadable output, and generates incorrect output for the
38   <script> element.)
39
40   Authors:
41   David Hovemeyer
42   Chris Nappin (summary table)
43 -->
44
45 <xsl:stylesheet
46         version="1.0"
47         xmlns="http://www.w3.org/1999/xhtml"
48         xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
49
50 <xsl:output
51         method="xml"
52         indent="yes"
53         omit-xml-declaration="yes"
54         standalone="yes"
55     doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"
56         doctype-public="-//W3C//DTD XHTML 1.0 Transitional//EN"
57         encoding="UTF-8"/>
58
59 <xsl:variable name="literalNbsp">&amp;nbsp;</xsl:variable>
60
61 <!--xsl:key name="bug-category-key" match="/BugCollection/BugInstance" use="@category"/-->
62
63 <xsl:variable name="bugTableHeader">
64         <tr class="tableheader">
65                 <th align="left">Code<xsl:value-of select="$literalNbsp"/></th>
66                 <th align="left">Warning</th>
67         </tr>
68 </xsl:variable>
69
70 <xsl:template match="/">
71         <html>
72         <head>
73                 <title>FindBugs Report</title>
74                 <style type="text/css">
75                 .tablerow0 {
76                         background: #EEEEEE;
77                 }
78
79                 .tablerow1 {
80                         background: white;
81                 }
82
83                 .detailrow0 {
84                         background: #EEEEEE;
85                 }
86
87                 .detailrow1 {
88                         background: white;
89                 }
90
91                 .tableheader {
92                         background: #b9b9fe;
93                         font-size: larger;
94                 }
95
96                 .tablerow0:hover, .tablerow1:hover {
97                         background: #aaffaa;
98                 }
99
100                 .priority-1 {
101                     color: red;
102                     font-weight: bold;
103                 }
104                 .priority-2 {
105                     color: orange;
106                     font-weight: bold;
107                 }
108                 .priority-3 {
109                     color: green;
110                     font-weight: bold;
111                 }
112                 .priority-4 {
113                     color: blue;
114                     font-weight: bold;
115                 }
116                 </style>
117                 <script type="text/javascript">
118                         function toggleRow(elid) {
119                                 if (document.getElementById) {
120                                         element = document.getElementById(elid);
121                                         if (element) {
122                                                 if (element.style.display == 'none') {
123                                                         element.style.display = 'block';
124                                                         //window.status = 'Toggle on!';
125                                                 } else {
126                                                         element.style.display = 'none';
127                                                         //window.status = 'Toggle off!';
128                                                 }
129                                         }
130                                 }
131                         }
132                 </script>
133         </head>
134
135         <xsl:variable name="unique-catkey" select="/BugCollection/BugCategory/@category"/>
136         <!--xsl:variable name="unique-catkey" select="/BugCollection/BugInstance[generate-id() = generate-id(key('bug-category-key',@category))]/@category"/-->
137
138         <body>
139
140                 <h1><a href="http://findbugs.sourceforge.net">FindBugs</a> Report</h1>
141
142         <h2>Project Information</h2>    
143         <xsl:apply-templates select="/BugCollection/Project"/>
144
145         <h2>Metrics</h2>
146         <xsl:apply-templates select="/BugCollection/FindBugsSummary"/>
147
148         <h2>Contents</h2>
149         <ul>
150                 <xsl:for-each select="$unique-catkey">
151                         <xsl:sort select="." order="ascending"/>
152                         <xsl:variable name="catkey" select="."/>
153                         <xsl:variable name="catdesc" select="/BugCollection/BugCategory[@category=$catkey]/Description"/>
154                         
155                         <li><a href="#Warnings_{$catkey}"><xsl:value-of select="$catdesc"/> Warnings</a></li>
156                 </xsl:for-each>
157
158                 <li><a href="#Details">Details</a></li>
159         </ul>
160
161         <h1>Summary</h1>
162         <table width="500" cellpadding="5" cellspacing="2">
163             <tr class="tableheader">
164                         <th align="left">Warning Type</th>
165                         <th align="right">Number</th>
166                 </tr>
167
168                 <xsl:for-each select="$unique-catkey">
169                         <xsl:sort select="." order="ascending"/>
170                         <xsl:variable name="catkey" select="."/>
171                         <xsl:variable name="catdesc" select="/BugCollection/BugCategory[@category=$catkey]/Description"/>
172                         <xsl:variable name="styleclass">
173                                 <xsl:choose><xsl:when test="position() mod 2 = 1">tablerow0</xsl:when>
174                                         <xsl:otherwise>tablerow1</xsl:otherwise>
175                                 </xsl:choose>
176                         </xsl:variable>
177                         
178                 <tr class="{$styleclass}">
179                         <td><a href="#Warnings_{$catkey}"><xsl:value-of select="$catdesc"/> Warnings</a></td>
180                         <td align="right"><xsl:value-of select="count(/BugCollection/BugInstance[@category=$catkey])"/></td>
181                 </tr>
182                 </xsl:for-each>
183
184                 <xsl:variable name="styleclass">
185                         <xsl:choose><xsl:when test="count($unique-catkey) mod 2 = 0">tablerow0</xsl:when>
186                                 <xsl:otherwise>tablerow1</xsl:otherwise>
187                         </xsl:choose>
188                 </xsl:variable>
189                 <tr class="{$styleclass}">
190                     <td><b>Total</b></td>
191                     <td align="right"><b><xsl:value-of select="count(/BugCollection/BugInstance)"/></b></td>
192                 </tr>
193         </table>
194
195         <h1>Warnings</h1>
196
197         <p>Click on a warning row to see full context information.</p>
198
199         <xsl:for-each select="$unique-catkey">
200                 <xsl:sort select="." order="ascending"/>
201                 <xsl:variable name="catkey" select="."/>
202                 <xsl:variable name="catdesc" select="/BugCollection/BugCategory[@category=$catkey]/Description"/>
203                         
204                 <xsl:call-template name="generateWarningTable">
205                         <xsl:with-param name="warningSet" select="/BugCollection/BugInstance[@category=$catkey]"/>
206                         <xsl:with-param name="sectionTitle"><xsl:value-of select="$catdesc"/> Warnings</xsl:with-param>
207                         <xsl:with-param name="sectionId">Warnings_<xsl:value-of select="$catkey"/></xsl:with-param>
208                 </xsl:call-template>
209         </xsl:for-each>
210
211         <h1><a name="Details">Details</a></h1>
212
213         <xsl:apply-templates select="/BugCollection/BugPattern">
214                 <xsl:sort select="@abbrev"/>
215                 <xsl:sort select="ShortDescription"/>
216         </xsl:apply-templates>
217
218         </body>
219         </html>
220 </xsl:template>
221
222 <xsl:template match="Project">
223         <p>Project: 
224                 <xsl:choose>
225                         <xsl:when test='string-length(/BugCollection/Project/@projectName)>0'><xsl:value-of select="/BugCollection/Project/@projectName" /></xsl:when>
226                         <xsl:otherwise><xsl:value-of select="/BugCollection/Project/@filename" /></xsl:otherwise>
227                 </xsl:choose>
228         </p>
229         <p>FindBugs version: <xsl:value-of select="/BugCollection/@version"/></p>
230         
231         <p>Code analyzed:</p>
232         <ul>
233                 <xsl:for-each select="./Jar">
234                         <li><xsl:value-of select="text()"/></li>
235                 </xsl:for-each>
236         </ul>
237         <p><br/><br/></p>
238 </xsl:template>
239
240 <xsl:template match="BugInstance">
241         <xsl:variable name="warningId"><xsl:value-of select="generate-id()"/></xsl:variable>
242
243         <tr class="tablerow{position() mod 2}" onclick="toggleRow('{$warningId}');">
244
245         <td>
246             <span><xsl:attribute name="class">priority-<xsl:value-of select="@priority"/></xsl:attribute>
247                 <xsl:value-of select="@abbrev"/>
248         </span>
249         </td>
250
251         <td>
252         <xsl:value-of select="LongMessage"/>
253         </td>
254
255         </tr>
256
257         <!-- Add bug annotation elements: Class, Method, Field, SourceLine, Field -->
258         <tr class="detailrow{position() mod 2}">
259                 <td/>
260                 <td>
261                         <p id="{$warningId}" style="display: none;">
262                                 <a href="#{@type}">Bug type <xsl:value-of select="@type"/> (click for details)</a>
263                                 <xsl:for-each select="./*/Message">
264                                         <br/><xsl:value-of select="text()" disable-output-escaping="no"/>
265                                 </xsl:for-each>
266                         </p>
267                 </td>
268         </tr>
269 </xsl:template>
270
271 <xsl:template match="BugPattern">
272         <h2><a name="{@type}"><xsl:value-of select="@type"/>: <xsl:value-of select="ShortDescription"/></a></h2>
273         <xsl:value-of select="Details" disable-output-escaping="yes"/>
274 </xsl:template>
275
276 <xsl:template name="generateWarningTable">
277         <xsl:param name="warningSet"/>
278         <xsl:param name="sectionTitle"/>
279         <xsl:param name="sectionId"/>
280
281         <h2><a name="{$sectionId}"><xsl:value-of select="$sectionTitle"/></a></h2>
282         <table class="warningtable" width="100%" cellspacing="0">
283                 <xsl:copy-of select="$bugTableHeader"/>
284                 <xsl:apply-templates select="$warningSet">
285                         <xsl:sort select="@abbrev"/>
286                         <xsl:sort select="Class/@classname"/>
287                 </xsl:apply-templates>
288         </table>
289 </xsl:template>
290
291 <xsl:template match="FindBugsSummary">
292     <xsl:variable name="kloc" select="@total_size div 1000.0"/>
293     <xsl:variable name="format" select="'#######0.00'"/>
294
295         <p><xsl:value-of select="@total_size"/> lines of code analyzed,
296         in <xsl:value-of select="@total_classes"/> classes, 
297         in <xsl:value-of select="@num_packages"/> packages.</p>
298         <table width="500" cellpadding="5" cellspacing="2">
299             <tr class="tableheader">
300                         <th align="left">Metric</th>
301                         <th align="right">Total</th>
302                         <th align="right">Density*</th>
303                 </tr>
304                 <tr class="tablerow0">
305                         <td>High Priority Warnings</td>
306                         <td align="right"><xsl:value-of select="@priority_1"/></td>
307                         <td align="right">
308                             <xsl:choose>
309                     <xsl:when test= "number($kloc) &gt; 0.0">
310                                     <xsl:value-of select="format-number(@priority_1 div $kloc, $format)"/>
311                     </xsl:when>
312                     <xsl:otherwise>
313                                     <xsl:value-of select="format-number(0.0, $format)"/>
314                     </xsl:otherwise>
315                             </xsl:choose>
316                         </td>
317                 </tr>
318                 <tr class="tablerow1">
319                         <td>Medium Priority Warnings</td>
320                         <td align="right"><xsl:value-of select="@priority_2"/></td>
321                         <td align="right">
322                             <xsl:choose>
323                     <xsl:when test= "number($kloc) &gt; 0.0">
324                                     <xsl:value-of select="format-number(@priority_2 div $kloc, $format)"/>
325                     </xsl:when>
326                     <xsl:otherwise>
327                                     <xsl:value-of select="format-number(0.0, $format)"/>
328                     </xsl:otherwise>
329                             </xsl:choose>
330                         </td>
331                 </tr>
332
333     <xsl:choose>
334                 <xsl:when test="@priority_3">
335                         <tr class="tablerow1">
336                                 <td>Low Priority Warnings</td>
337                                 <td align="right"><xsl:value-of select="@priority_3"/></td>
338                                 <td align="right">
339                     <xsl:choose>
340                         <xsl:when test= "number($kloc) &gt; 0.0">
341                                         <xsl:value-of select="format-number(@priority_3 div $kloc, $format)"/>
342                         </xsl:when>
343                         <xsl:otherwise>
344                                     <xsl:value-of select="format-number(0.0, $format)"/>
345                         </xsl:otherwise>
346                                 </xsl:choose>
347                                 </td>
348                         </tr>
349                         <xsl:variable name="totalClass" select="tablerow0"/>
350                 </xsl:when>
351                 <xsl:otherwise>
352                     <xsl:variable name="totalClass" select="tablerow1"/>
353                 </xsl:otherwise>
354         </xsl:choose>
355
356                 <tr class="$totalClass">
357                         <td><b>Total Warnings</b></td>
358                         <td align="right"><b><xsl:value-of select="@total_bugs"/></b></td>
359             <xsl:choose>
360                 <xsl:when test="number($kloc) &gt; 0.0">
361                                         <td align="right"><b><xsl:value-of select="format-number(@total_bugs div $kloc, $format)"/></b></td>
362                 </xsl:when>
363                 <xsl:otherwise>
364                                         <td align="right"><b><xsl:value-of select="format-number(0.0, $format)"/></b></td>
365                 </xsl:otherwise>
366                 </xsl:choose>
367                 </tr>
368         </table>
369         <p><i>(* Defects per Thousand lines of non-commenting source statements)</i></p>
370         <p><br/><br/></p>
371
372 </xsl:template>
373
374 </xsl:stylesheet>
375
376 <!-- vim:set ts=4: -->