ClassRowWriter.java
1/*******************************************************************************
2 * Copyright (c) 2009, 2010 Mountainminds GmbH & Co. KG and Contributors
3 * All rights reserved. This program and the accompanying materials
4 * are made available under the terms of the Eclipse Public License v1.0
5 * which accompanies this distribution, and is available at
6 * http://www.eclipse.org/legal/epl-v10.html
7 *
8 * Contributors:
9 * Brock Janiczak - initial API and implementation
10 *
11 *******************************************************************************/
12package org.jacoco.report.csv;
13
14import java.io.IOException;
15
16import org.jacoco.core.analysis.ClassCoverage;
17import org.jacoco.core.analysis.ICounter;
18import org.jacoco.core.analysis.ICoverageNode.CounterEntity;
19import org.jacoco.report.ILanguageNames;
20
21/**
22 * Writer for rows in the CVS report representing the summary data of a single
23 * class.
24 *
25 * @author Brock Janiczak
26 * @version 0.4.1.20101007204400
27 */
28class ClassRowWriter {
29
30 private static CounterEntity[] COUNTERS = { CounterEntity.METHOD,
31 CounterEntity.BLOCK, CounterEntity.LINE, CounterEntity.INSTRUCTION };
32
33 private final DelimitedWriter writer;
34
35 private final ILanguageNames languageNames;
36
37 /**
38 * Creates a new row writer that writes class information to the given CSV
39 * writer.
40 *
41 * @param writer
42 * writer for csv output
43 * @param languageNames
44 * converter for Java identifiers
45 * @throws IOException
46 * in case of problems with the writer
47 */
48 public ClassRowWriter(final DelimitedWriter writer,
49 final ILanguageNames languageNames) throws IOException {
50 this.writer = writer;
51 this.languageNames = languageNames;
52 writeHeader();
53 }
54
55 private void writeHeader() throws IOException {
56 writer.write("GROUP", "PACKAGE", "CLASS");
57 for (final CounterEntity entity : COUNTERS) {
58 writer.write(entity.name() + "_COVERED");
59 writer.write(entity.name() + "_MISSED");
60 }
61 writer.nextLine();
62 }
63
64 /**
65 * Writes the class summary information as a row.
66 *
67 * @param groupName
68 * name of the group
69 * @param packageName
70 * vm name of the package
71 * @param node
72 * class coverage data
73 * @throws IOException
74 * in case of problems with the writer
75 */
76 public void writeRow(final String groupName, final String packageName,
77 final ClassCoverage node) throws IOException {
78 writer.write(groupName);
79 writer.write(languageNames.getPackageName(packageName));
80 final String className = languageNames.getClassName(node.getName(),
81 node.getSignature(), node.getSuperName(), node
82 .getInterfaceNames());
83 writer.write(className);
84
85 for (final CounterEntity entity : COUNTERS) {
86 final ICounter counter = node.getCounter(entity);
87 writer.write(counter.getCoveredCount());
88 writer.write(counter.getMissedCount());
89 }
90
91 writer.nextLine();
92 }
93
94}