PackagePage.java revision 34cd880f4e52a32b9f88ed4ea687b8f3f892395b
1/*******************************************************************************
2 * Copyright (c) 2009, 2017 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.internal.html.page;
13
14import java.io.IOException;
15
16import org.jacoco.core.analysis.IClassCoverage;
17import org.jacoco.core.analysis.IPackageCoverage;
18import org.jacoco.report.ISourceFileLocator;
19import org.jacoco.report.internal.ReportOutputFolder;
20import org.jacoco.report.internal.html.HTMLElement;
21import org.jacoco.report.internal.html.IHTMLReportContext;
22import org.jacoco.report.internal.html.ILinkable;
23import org.jacoco.report.internal.html.resources.Styles;
24
25/**
26 * Page showing coverage information for a Java package. The page contains a
27 * table with all classes of the package.
28 */
29public class PackagePage extends TablePage<IPackageCoverage> {
30
31	private final PackageSourcePage packageSourcePage;
32	private final boolean sourceCoverageExists;
33
34	/**
35	 * Creates a new visitor in the given context.
36	 *
37	 * @param node
38	 *            coverage data for this package
39	 * @param parent
40	 *            optional hierarchical parent
41	 * @param locator
42	 *            source locator
43	 * @param folder
44	 *            base folder to create this page in
45	 * @param context
46	 *            settings context
47	 */
48	public PackagePage(final IPackageCoverage node, final ReportPage parent,
49			final ISourceFileLocator locator, final ReportOutputFolder folder,
50			final IHTMLReportContext context) {
51		super(node, parent, folder, context);
52		packageSourcePage = new PackageSourcePage(node, parent, locator,
53				folder, context, this);
54		sourceCoverageExists = !node.getSourceFiles().isEmpty();
55	}
56
57	@Override
58	public void render() throws IOException {
59		if (sourceCoverageExists) {
60			packageSourcePage.render();
61		}
62		renderClasses();
63		super.render();
64	}
65
66	private void renderClasses() throws IOException {
67		for (final IClassCoverage c : getNode().getClasses()) {
68			final ILinkable sourceFilePage = packageSourcePage
69					.getSourceFilePage(c.getSourceFileName());
70			final ClassPage page = new ClassPage(c, this, sourceFilePage,
71					folder, context);
72			page.render();
73			addItem(page);
74		}
75	}
76
77	@Override
78	protected String getOnload() {
79		return "initialSort(['breadcrumb', 'coveragetable'])";
80	}
81
82	@Override
83	protected String getFileName() {
84		return "index.html";
85	}
86
87	@Override
88	public String getLinkLabel() {
89		return context.getLanguageNames().getPackageName(getNode().getName());
90	}
91
92	@Override
93	protected void infoLinks(final HTMLElement span) throws IOException {
94		if (sourceCoverageExists) {
95			final String link = packageSourcePage.getLink(folder);
96			span.a(link, Styles.EL_SOURCE).text("Source Files");
97		}
98		super.infoLinks(span);
99	}
100
101}
102