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