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