1e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov/******************************************************************************* 2398ee59bebad6835dab57b60157eff16d511709eMarc R. Hoffmann * Copyright (c) 2009, 2015 Mountainminds GmbH & Co. KG and Contributors 3e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov * All rights reserved. This program and the accompanying materials 4e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov * are made available under the terms of the Eclipse Public License v1.0 5e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov * which accompanies this distribution, and is available at 6e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov * http://www.eclipse.org/legal/epl-v10.html 7e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov * 8e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov * Contributors: 9e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov * Brock Janiczak - initial API and implementation 10e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov * Marc R. Hoffmann - generalized structure, line info 11e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov * 12e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov *******************************************************************************/ 13e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikovpackage org.jacoco.report.internal.xml; 14e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov 15e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikovimport java.io.IOException; 16e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov 17e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikovimport org.jacoco.core.analysis.IBundleCoverage; 18e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikovimport org.jacoco.report.ISourceFileLocator; 19e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikovimport org.jacoco.report.internal.AbstractGroupVisitor; 20e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov 21e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov/** 22e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov * A {@link org.jacoco.report.IReportGroupVisitor} that transforms the report 23e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov * structure into XML elements. 24e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov */ 25e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikovpublic class XMLGroupVisitor extends AbstractGroupVisitor { 26e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov 27e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov /** XML element of this group */ 28e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov protected final XMLElement element; 29e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov 30e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov /** 31e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov * New handler for a group with the given name. 32e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov * 33e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov * @param element 34e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov * XML-Element representing this coverage node. The start tag 35e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov * must not be closed yet to allow adding additional attributes. 36e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov * @param name 37e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov * name of the group 38e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov * @throws IOException 39e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov * in case of problems with the underlying writer 40e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov */ 41e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov public XMLGroupVisitor(final XMLElement element, final String name) 42e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov throws IOException { 43e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov super(name); 44e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov this.element = element; 45e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov } 46e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov 47e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov @Override 48e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov protected void handleBundle(final IBundleCoverage bundle, 49e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov final ISourceFileLocator locator) throws IOException { 50e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov final XMLElement child = createChild(bundle.getName()); 51e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov XMLCoverageWriter.writeBundle(bundle, child); 52e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov } 53e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov 54e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov @Override 55e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov protected AbstractGroupVisitor handleGroup(final String name) 56e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov throws IOException { 57e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov final XMLElement child = createChild(name); 58e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov return new XMLGroupVisitor(child, name); 59e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov } 60e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov 61e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov @Override 62e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov protected void handleEnd() throws IOException { 63e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov XMLCoverageWriter.writeCounters(total, element); 64e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov } 65e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov 66e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov private XMLElement createChild(final String name) throws IOException { 67e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov return XMLCoverageWriter.createChild(element, "group", name); 68e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov } 69e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov 70e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov} 71