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