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