MultiReportVisitor.java revision 398ee59bebad6835dab57b60157eff16d511709e
1/******************************************************************************* 2 * Copyright (c) 2009, 2015 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 * Marc R. Hoffmann - initial API and implementation 10 * 11 *******************************************************************************/ 12package org.jacoco.report; 13 14import java.io.IOException; 15import java.util.ArrayList; 16import java.util.Collection; 17import java.util.List; 18 19import org.jacoco.core.analysis.IBundleCoverage; 20import org.jacoco.core.data.ExecutionData; 21import org.jacoco.core.data.SessionInfo; 22 23/** 24 * A report visitor that is composed from multiple other visitors. This can be 25 * used to create more than one report format in one run. 26 */ 27public class MultiReportVisitor extends MultiGroupVisitor implements 28 IReportVisitor { 29 30 private final List<IReportVisitor> visitors; 31 32 /** 33 * New visitor delegating to all given visitors. 34 * 35 * @param visitors 36 * visitors to delegate to 37 */ 38 public MultiReportVisitor(final List<IReportVisitor> visitors) { 39 super(visitors); 40 this.visitors = visitors; 41 } 42 43 public void visitInfo(final List<SessionInfo> sessionInfos, 44 final Collection<ExecutionData> executionData) throws IOException { 45 for (final IReportVisitor v : visitors) { 46 v.visitInfo(sessionInfos, executionData); 47 } 48 } 49 50 public void visitEnd() throws IOException { 51 for (final IReportVisitor v : visitors) { 52 v.visitEnd(); 53 } 54 } 55 56} 57 58class MultiGroupVisitor implements IReportGroupVisitor { 59 60 private final List<? extends IReportGroupVisitor> visitors; 61 62 MultiGroupVisitor(final List<? extends IReportGroupVisitor> visitors) { 63 this.visitors = visitors; 64 } 65 66 public void visitBundle(final IBundleCoverage bundle, 67 final ISourceFileLocator locator) throws IOException { 68 for (final IReportGroupVisitor v : visitors) { 69 v.visitBundle(bundle, locator); 70 } 71 } 72 73 public IReportGroupVisitor visitGroup(final String name) throws IOException { 74 final List<IReportGroupVisitor> children = new ArrayList<IReportGroupVisitor>(); 75 for (final IReportGroupVisitor v : visitors) { 76 children.add(v.visitGroup(name)); 77 } 78 return new MultiGroupVisitor(children); 79 } 80 81} 82