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