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