| /******************************************************************************* |
| * Copyright (c) 2009, 2018 Mountainminds GmbH & Co. KG and Contributors |
| * All rights reserved. This program and the accompanying materials |
| * are made available under the terms of the Eclipse Public License v1.0 |
| * which accompanies this distribution, and is available at |
| * http://www.eclipse.org/legal/epl-v10.html |
| * |
| * Contributors: |
| * Marc R. Hoffmann - initial API and implementation |
| * |
| *******************************************************************************/ |
| package org.jacoco.report.internal.html.page; |
| |
| import java.io.IOException; |
| import java.io.Reader; |
| import java.util.HashMap; |
| import java.util.Map; |
| |
| import org.jacoco.core.analysis.IPackageCoverage; |
| import org.jacoco.core.analysis.ISourceFileCoverage; |
| import org.jacoco.report.ISourceFileLocator; |
| import org.jacoco.report.internal.ReportOutputFolder; |
| import org.jacoco.report.internal.html.HTMLElement; |
| import org.jacoco.report.internal.html.IHTMLReportContext; |
| import org.jacoco.report.internal.html.ILinkable; |
| import org.jacoco.report.internal.html.resources.Styles; |
| |
| /** |
| * Page showing coverage information for a Java package. The page contains a |
| * table with all classes of the package. |
| */ |
| public class PackageSourcePage extends TablePage<IPackageCoverage> { |
| |
| private final ISourceFileLocator locator; |
| private final Map<String, ILinkable> sourceFilePages; |
| private final ILinkable packagePage; |
| |
| /** |
| * Creates a new visitor in the given context. |
| * |
| * @param node |
| * coverage data for this package |
| * @param parent |
| * optional hierarchical parent |
| * @param locator |
| * source locator |
| * @param folder |
| * base folder to create this page in |
| * @param context |
| * settings context |
| * @param packagePage |
| * page listing the classes of this package |
| */ |
| public PackageSourcePage(final IPackageCoverage node, |
| final ReportPage parent, final ISourceFileLocator locator, |
| final ReportOutputFolder folder, final IHTMLReportContext context, |
| final ILinkable packagePage) { |
| super(node, parent, folder, context); |
| this.locator = locator; |
| this.packagePage = packagePage; |
| this.sourceFilePages = new HashMap<String, ILinkable>(); |
| } |
| |
| @Override |
| public void render() throws IOException { |
| renderSourceFilePages(); |
| super.render(); |
| } |
| |
| /** |
| * Returns the link to the source file page of the source file with the |
| * given name. If no source file was located, <code>null</code> is |
| * returned.. |
| */ |
| ILinkable getSourceFilePage(final String name) { |
| return sourceFilePages.get(name); |
| } |
| |
| private final void renderSourceFilePages() throws IOException { |
| final String packagename = getNode().getName(); |
| for (final ISourceFileCoverage s : getNode().getSourceFiles()) { |
| final String sourcename = s.getName(); |
| final Reader reader = locator |
| .getSourceFile(packagename, sourcename); |
| if (reader == null) { |
| addItem(new SourceFileItem(s)); |
| } else { |
| final SourceFilePage sourcePage = new SourceFilePage(s, reader, |
| locator.getTabWidth(), this, folder, context); |
| sourcePage.render(); |
| sourceFilePages.put(sourcename, sourcePage); |
| addItem(sourcePage); |
| } |
| |
| } |
| } |
| |
| @Override |
| protected String getOnload() { |
| return "initialSort(['breadcrumb', 'coveragetable'])"; |
| } |
| |
| @Override |
| protected String getFileName() { |
| return "index.source.html"; |
| } |
| |
| @Override |
| public String getLinkLabel() { |
| return context.getLanguageNames().getPackageName(getNode().getName()); |
| } |
| |
| @Override |
| protected void infoLinks(final HTMLElement span) throws IOException { |
| final String link = packagePage.getLink(folder); |
| span.a(link, Styles.EL_CLASS).text("Classes"); |
| super.infoLinks(span); |
| } |
| |
| } |