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}