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