XMLFormatter.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.xml;
13
14import java.io.IOException;
15import java.util.Collection;
16import java.util.List;
17
18import org.jacoco.core.analysis.ICoverageNode;
19import org.jacoco.core.data.ExecutionData;
20import org.jacoco.core.data.SessionInfo;
21import org.jacoco.report.IReportFormatter;
22import org.jacoco.report.IReportVisitor;
23import org.jacoco.report.ISingleReportOutput;
24
25/**
26 * Report formatter that creates a single XML file for a coverage session
27 *
28 * @author Brock Janiczak
29 * @version 0.4.1.20101007204400
30 */
31public class XMLFormatter implements IReportFormatter {
32
33 private static final String PUBID = "-//JACOCO//DTD Report 1.0//EN";
34
35 private static final String SYSTEM = "report.dtd";
36
37 private ISingleReportOutput output;
38
39 private String outputEncoding = "UTF-8";
40
41 public IReportVisitor createReportVisitor(final ICoverageNode rootNode,
42 final List<SessionInfo> sessionInfos,
43 final Collection<ExecutionData> executionData) throws IOException {
44
45 if (output == null) {
46 throw new IllegalStateException("No report output set.");
47 }
48 final XMLElement root = new XMLDocument("report", PUBID, SYSTEM,
49 outputEncoding, true, output.createFile());
50 return new XMLReportNodeHandler(root, rootNode) {
51 @Override
52 protected void insertElementsBefore(final XMLElement element)
53 throws IOException {
54 writeSessionInfos(element, sessionInfos);
55 }
56 };
57 }
58
59 private void writeSessionInfos(final XMLElement root,
60 final List<SessionInfo> infos) throws IOException {
61 for (final SessionInfo i : infos) {
62 final XMLElement sessioninfo = root.element("sessioninfo");
63 sessioninfo.attr("id", i.getId());
64 sessioninfo.attr("start", i.getStartTimeStamp());
65 sessioninfo.attr("dump", i.getDumpTimeStamp());
66 }
67 }
68
69 /**
70 * Sets the report output callback for this report formatter. This is a
71 * mandatory property.
72 *
73 * @param output
74 * report output
75 */
76 public void setReportOutput(final ISingleReportOutput output) {
77 this.output = output;
78 }
79
80 /**
81 * Sets the encoding used for generated XML document. Default is UTF-8.
82 *
83 * @param outputEncoding
84 * XML output encoding
85 */
86 public void setOutputEncoding(final String outputEncoding) {
87 this.outputEncoding = outputEncoding;
88 }
89
90}