PackagePage.java revision 10a3ed3d5af2cbfbec2b35405d8d9420a9bf8776
1/******************************************************************************* 2 * Copyright (c) Copyright (c) Copyright (c) 2009, 2012 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; 15import java.io.Reader; 16import java.util.HashMap; 17import java.util.Map; 18 19import org.jacoco.core.analysis.IClassCoverage; 20import org.jacoco.core.analysis.IPackageCoverage; 21import org.jacoco.core.analysis.ISourceFileCoverage; 22import org.jacoco.report.ISourceFileLocator; 23import org.jacoco.report.internal.ReportOutputFolder; 24import org.jacoco.report.internal.html.IHTMLReportContext; 25import org.jacoco.report.internal.html.ILinkable; 26 27/** 28 * Page showing coverage information for a Java package. The page contains a 29 * table with all classes of the package. 30 */ 31public class PackagePage extends TablePage<IPackageCoverage> { 32 33 private final ISourceFileLocator locator; 34 35 /** 36 * Creates a new visitor in the given context. 37 * 38 * @param node 39 * @param parent 40 * @param locator 41 * @param folder 42 * @param context 43 */ 44 public PackagePage(final IPackageCoverage node, final ReportPage parent, 45 final ISourceFileLocator locator, final ReportOutputFolder folder, 46 final IHTMLReportContext context) { 47 super(node, parent, folder, context); 48 this.locator = locator; 49 } 50 51 @Override 52 public void render() throws IOException { 53 final Map<String, ILinkable> sourceFiles = renderSourceFiles(); 54 renderClasses(sourceFiles); 55 super.render(); 56 } 57 58 private final Map<String, ILinkable> renderSourceFiles() throws IOException { 59 final Map<String, ILinkable> sourceFiles = new HashMap<String, ILinkable>(); 60 final String packagename = getNode().getName(); 61 for (final ISourceFileCoverage s : getNode().getSourceFiles()) { 62 final String sourcename = s.getName(); 63 final Reader reader = locator 64 .getSourceFile(packagename, sourcename); 65 if (reader != null) { 66 final SourceFilePage sourcePage = new SourceFilePage(s, reader, 67 locator.getTabWidth(), this, folder, context); 68 sourcePage.render(); 69 sourceFiles.put(sourcename, sourcePage); 70 } 71 72 } 73 return sourceFiles; 74 } 75 76 private void renderClasses(final Map<String, ILinkable> sourceFiles) 77 throws IOException { 78 for (final IClassCoverage c : getNode().getClasses()) { 79 final ClassPage page = new ClassPage(c, this, sourceFiles.get(c 80 .getSourceFileName()), folder, context); 81 page.render(); 82 addItem(page); 83 } 84 } 85 86 @Override 87 protected String getOnload() { 88 return "initialSort(['breadcrumb', 'coveragetable'])"; 89 } 90 91 @Override 92 protected String getFileName() { 93 return "index.html"; 94 } 95 96 @Override 97 public String getLinkLabel() { 98 return context.getLanguageNames().getPackageName(getNode().getName()); 99 } 100 101} 102