/******************************************************************************* * Copyright (c) 2009, 2015 Mountainminds GmbH & Co. KG and Contributors * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Brock Janiczak - initial API and implementation * *******************************************************************************/ package org.jacoco.report.csv; import java.io.IOException; import java.io.OutputStream; import java.io.OutputStreamWriter; import java.util.Collection; import java.util.List; import org.jacoco.core.data.ExecutionData; import org.jacoco.core.data.SessionInfo; import org.jacoco.report.ILanguageNames; import org.jacoco.report.IReportVisitor; import org.jacoco.report.JavaNames; /** * Report formatter that will create a single CSV file. By default the filename * used will be the name of the session. */ public class CSVFormatter { private ILanguageNames languageNames = new JavaNames(); private String outputEncoding = "UTF-8"; /** * Sets the implementation for language name display. Java language names * are defined by default. * * @param languageNames * converter for language specific names */ public void setLanguageNames(final ILanguageNames languageNames) { this.languageNames = languageNames; } /** * Returns the language names call-back used in this report. * * @return language names */ public ILanguageNames getLanguageNames() { return languageNames; } /** * Sets the encoding used for generated CSV document. Default is UTF-8. * * @param outputEncoding * CSV output encoding */ public void setOutputEncoding(final String outputEncoding) { this.outputEncoding = outputEncoding; } /** * Creates a new visitor to write a report to the given stream. * * @param output * output stream to write the report to * @return visitor to emit the report data to * @throws IOException * in case of problems with the output stream */ public IReportVisitor createVisitor(final OutputStream output) throws IOException { final DelimitedWriter writer = new DelimitedWriter( new OutputStreamWriter(output, outputEncoding)); final ClassRowWriter rowWriter = new ClassRowWriter(writer, languageNames); class Visitor extends CSVGroupHandler implements IReportVisitor { Visitor() { super(rowWriter); } public void visitInfo(final List sessionInfos, final Collection executionData) throws IOException { // Info not used for CSV report } public void visitEnd() throws IOException { writer.close(); } } return new Visitor(); } }