1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 package javancss;
23
24 import java.text.DecimalFormat;
25 import java.text.NumberFormat;
26 import java.util.Calendar;
27 import java.util.Iterator;
28 import java.util.List;
29 import java.util.Locale;
30
31 import ccl.util.Util;
32
33
34
35
36
37
38
39 public class XmlFormatter implements Formatter
40 {
41 private final Javancss _javancss;
42
43 private double _divide( int divident, int divisor )
44 {
45 double dRetVal = 0.0;
46 if ( divisor > 0) {
47 dRetVal = Math.round(((double)divident/(double)divisor)*100)/100.0;
48 }
49
50 return dRetVal;
51 }
52
53 private double _divide( long divident, long divisor )
54 {
55 double dRetVal = 0.0;
56 if ( divisor > 0) {
57 dRetVal = Math.round(((double)divident/(double)divisor)*100)/100.0;
58 }
59
60 return dRetVal;
61 }
62
63 private NumberFormat _pNumberFormat = null;
64
65 private String _formatPackageMatrix( int packages
66 , int classesSum
67 , int functionsSum
68 , int ncssSum
69 , int javadocsSum
70 , int javadocLnSum
71 , int singleLnSum
72 , int multiLnSum )
73 {
74
75
76 String sRetVal =
77 " <table>\n"
78 + " <tr><td>Packages</td><td>Classes</td><td>Functions</td><td>NCSS</td><td>Javadocs</td><td>per</td></tr>\n"
79
80
81 + " <tr><td>"
82 + _pNumberFormat.format( packages )
83 + "</td><td>"
84 + _pNumberFormat.format( classesSum )
85 + "</td><td>"
86 + _pNumberFormat.format( functionsSum )
87 + "</td><td>"
88 + _pNumberFormat.format( ncssSum )
89 + "</td><td>"
90 + _pNumberFormat.format( javadocsSum )
91 + "</td><td>Project</td></tr>\n"
92 + " <tr><td></td><td>"
93 + _pNumberFormat.format( _divide( classesSum, packages ) )
94 + "</td><td>"
95 + _pNumberFormat.format( _divide( functionsSum, packages ) )
96 + "</td><td>"
97 + _pNumberFormat.format( _divide( ncssSum, packages ) )
98 + "</td><td>"
99 + _pNumberFormat.format( _divide( javadocsSum, packages ) )
100 + "</td><td>Package</td></tr>\n"
101 + " <tr><td></td><td></td><td>"
102 + _pNumberFormat.format( _divide( functionsSum, classesSum ) )
103 + "</td><td>"
104 + _pNumberFormat.format( _divide( ncssSum, classesSum ) )
105 + "</td><td>"
106 + _pNumberFormat.format( _divide( javadocsSum, classesSum ) )
107 + "</td><td>Class</td></tr>\n"
108 + " <tr><td></td><td></td><td></td><td>"
109 + _pNumberFormat.format( _divide( ncssSum, functionsSum ) )
110 + "</td><td>"
111
112 + _pNumberFormat.format( _divide( javadocsSum, functionsSum ) )
113 + "</td><td>Function</td></tr>\n"
114 + " </table>\n";
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180 return sRetVal;
181 }
182
183 public XmlFormatter( Javancss javancss )
184 {
185 super();
186
187 _javancss = javancss;
188
189 _pNumberFormat = NumberFormat.getInstance( Locale.US );
190 ((DecimalFormat)_pNumberFormat).applyPattern( "#,##0.00" );
191 }
192
193 public String printPackageNcss()
194 {
195 StringBuffer sbRetVal = new StringBuffer( " <packages>\n" );
196 List vPackageMetrics = _javancss.getPackageMetrics();
197
198 int packages = vPackageMetrics.size();
199 int classesSum = 0;
200 int functionsSum = 0;
201 int ncssSum = 0;
202
203 int javadocSum = 0;
204 int javadocLnSum = 0;
205 int singleLnSum = 0;
206 int multiLnSum = 0;
207
208 for( Iterator ePackages = vPackageMetrics.iterator(); ePackages.hasNext(); )
209 {
210 PackageMetric pPackageMetric = (PackageMetric)ePackages.next();
211
212 classesSum += pPackageMetric.classes;
213 functionsSum += pPackageMetric.functions;
214 ncssSum += pPackageMetric.ncss;
215
216 javadocSum += pPackageMetric.javadocs;
217 javadocLnSum += pPackageMetric.javadocsLn;
218 singleLnSum += pPackageMetric.singleLn;
219 multiLnSum += pPackageMetric.multiLn;
220
221 sbRetVal.append(
222 " <package>\n" +
223 " <name>" + pPackageMetric.name + "</name>\n" +
224 " <classes>" + pPackageMetric.classes + "</classes>\n" +
225 " <functions>" + pPackageMetric.functions + "</functions>\n" +
226 " <ncss>" + pPackageMetric.ncss + "</ncss>\n" +
227 " <javadocs>" + pPackageMetric.javadocs + "</javadocs>\n" +
228 " <javadoc_lines>" + pPackageMetric.javadocsLn + "</javadoc_lines>\n" +
229 " <single_comment_lines>" + pPackageMetric.singleLn + "</single_comment_lines>\n" +
230 " <multi_comment_lines>" + pPackageMetric.multiLn + "</multi_comment_lines>\n" +
231 " </package>\n" );
232 }
233
234 sbRetVal.append(
235 " <total>\n" +
236 " <classes>" + classesSum + "</classes>\n" +
237 " <functions>" + functionsSum + "</functions>\n" +
238 " <ncss>" + ncssSum + "</ncss>\n" +
239 " <javadocs>" + javadocSum + "</javadocs>\n" +
240 " <javadoc_lines>" + javadocLnSum + "</javadoc_lines>\n" +
241 " <single_comment_lines>" + singleLnSum + "</single_comment_lines>\n" +
242 " <multi_comment_lines>" + multiLnSum + "</multi_comment_lines>\n" +
243 " </total>\n" );
244
245 sbRetVal.append( _formatPackageMatrix( packages
246 , classesSum
247 , functionsSum
248 , ncssSum
249 , javadocSum
250 , javadocLnSum
251 , singleLnSum
252 , multiLnSum ) );
253
254 sbRetVal.append( " </packages>\n" );
255
256 return sbRetVal.toString();
257 }
258
259 private String _formatObjectResume( int objects
260 , long lObjectSum
261 , long lFunctionSum
262 , long lClassesSum
263 , long lJVDCSum
264 , long lJVDCLSum
265 , long lSLSum
266 , long lMLSum )
267 {
268 double fAverageNcss = _divide( lObjectSum , objects );
269 double fAverageFuncs = _divide( lFunctionSum, objects );
270 double fAverageClasses = _divide( lClassesSum , objects );
271 double fAverageJavadocs = _divide( lJVDCSum , objects );
272
273
274
275
276
277
278 String sRetVal =
279 " <averages>\n" +
280 " <ncss>" + _pNumberFormat.format( fAverageNcss ) + "</ncss>\n" +
281 " <functions>" + _pNumberFormat.format( fAverageFuncs ) + "</functions>\n" +
282 " <classes>" + _pNumberFormat.format( fAverageClasses ) + "</classes>\n" +
283 " <javadocs>" + _pNumberFormat.format( fAverageJavadocs ) + "</javadocs>\n" +
284
285
286
287 " </averages>\n" +
288 " <ncss>" + _pNumberFormat.format( _javancss.getNcss() ) + "</ncss>\n";
289
290 return sRetVal;
291 }
292
293 public String printObjectNcss() {
294 StringBuffer sbRetVal = new StringBuffer( " <objects>\n" );
295
296 List
297
298 long lFunctionSum = 0;
299 long lClassesSum = 0;
300 long lObjectSum = 0;
301 long lJVDCSum = 0;
302 for( Iterator eClasses = vObjectMetrics.iterator(); eClasses.hasNext(); )
303 {
304 ObjectMetric classMetric = (ObjectMetric)eClasses.next();
305 String sClass = classMetric.name;
306 int objectNcss = classMetric.ncss;
307 int functions = classMetric.functions;
308 int classes = classMetric.classes;
309 int jvdcs = classMetric.javadocs;
310
311
312
313
314
315
316 lObjectSum += (long)objectNcss;
317 lFunctionSum += (long)functions;
318 lClassesSum += (long)classes;
319 lJVDCSum += (long)jvdcs;
320 sbRetVal.append(
321 " <object>\n" +
322 " <name>" + sClass + "</name>\n" +
323 " <ncss>" + objectNcss + "</ncss>\n" +
324 " <functions>" + functions + "</functions>\n" +
325 " <classes>" + classes + "</classes>\n" +
326 " <javadocs>" + jvdcs + "</javadocs>\n" +
327
328
329
330 " </object>\n" );
331 }
332
333 sbRetVal.append( _formatObjectResume( vObjectMetrics.size()
334 , lObjectSum
335 , lFunctionSum
336 , lClassesSum
337 , lJVDCSum
338 , _javancss.getJdcl()
339 , _javancss.getSl()
340 , _javancss.getMl()
341 ) );
342
343 sbRetVal.append( " </objects>\n" );
344
345 return sbRetVal.toString();
346 }
347
348 private String _formatFunctionResume( int functions
349 , long lFunctionSum
350 , long lCCNSum
351 , long lJVDCSum
352 , long lJVDCLSum
353 , long lSLSum
354 , long lMLSum )
355 {
356 double fAverageNcss = _divide( lFunctionSum, functions );
357 double fAverageCCN = _divide( lCCNSum , functions );
358 double fAverageJVDC = _divide( lJVDCSum , functions );
359
360
361
362
363
364
365
366
367 String sRetVal = " <function_averages>\n" +
368 " <ncss>" + _pNumberFormat.format( fAverageNcss ) + "</ncss>\n" +
369 " <ccn>" + _pNumberFormat.format( fAverageCCN ) + "</ccn>\n" +
370 " <javadocs>" + _pNumberFormat.format( fAverageJVDC ) + "</javadocs>\n" +
371
372
373
374 " </function_averages>\n" +
375 " <ncss>" + _pNumberFormat.format( _javancss.getNcss() ) + "</ncss>\n";
376
377 return sRetVal;
378 }
379
380 public String printFunctionNcss()
381 {
382 StringBuffer sRetVal = new StringBuffer(80000);
383
384 sRetVal.append( " <functions>\n" );
385
386 List vFunctionMetrics = _javancss.getFunctionMetrics();
387
388 long lFunctionSum = 0;
389 long lCCNSum = 0;
390 long lJVDCSum = 0;
391 for( Iterator eFunctions = vFunctionMetrics.iterator(); eFunctions.hasNext(); )
392 {
393 FunctionMetric functionMetric = (FunctionMetric)eFunctions.next();
394 String sFunction = functionMetric.name;
395 int functionNcss = functionMetric.ncss;
396 int functionCCN = functionMetric.ccn;
397 int functionJVDC = functionMetric.javadocs;
398
399
400
401
402
403
404
405 lFunctionSum += (long)functionNcss;
406 lCCNSum += (long)functionCCN;
407 lJVDCSum += (long)functionJVDC;
408 sRetVal.append(
409 " <function>\n" +
410 " <name>" + sFunction + "</name>\n" +
411 " <ncss>" + functionNcss + "</ncss>\n" +
412 " <ccn>" + functionCCN + "</ccn>\n" +
413 " <javadocs>" + functionJVDC + "</javadocs>\n" +
414
415
416
417 " </function>\n" );
418 }
419
420 sRetVal.append( _formatFunctionResume( vFunctionMetrics.size()
421 , lFunctionSum
422 , lCCNSum
423 , lJVDCSum
424 , _javancss.getJdcl()
425 , _javancss.getSl()
426 , _javancss.getMl()
427 ) );
428
429 sRetVal.append( " </functions>\n" );
430
431 return sRetVal.toString();
432 }
433
434 public String printJavaNcss() {
435 return " <ncss>" + _javancss.getNcss() + "</ncss>\n"
436
437
438
439
440
441 ;
442 }
443
444 static public String printStart()
445 {
446 Calendar calendar = Util.getCalendar();
447
448 return "<?xml version=\"1.0\"?>\n" +
449 "<javancss>\n" +
450 " <date>" + Util.getDate( calendar ) + "</date>\n" +
451 " <time>" + Util.getTime( calendar ) + "</time>\n";
452 }
453
454 static public String printEnd()
455 {
456 return "</javancss>\n";
457 }
458 }