PackagePage.java
1/*******************************************************************************
2 * Copyright (c) 2009 Mountainminds GmbH & Co. KG and others
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 * $Id: $
12 *******************************************************************************/
13package org.jacoco.report.html;
14
15import java.io.IOException;
16import java.util.ArrayList;
17import java.util.HashMap;
18import java.util.List;
19import java.util.Map;
20
21import org.jacoco.core.analysis.ClassCoverage;
22import org.jacoco.core.analysis.ICoverageNode;
23import org.jacoco.core.analysis.SourceFileCoverage;
24import org.jacoco.core.analysis.ICoverageNode.ElementType;
25import org.jacoco.report.IReportVisitor;
26import org.jacoco.report.ISourceFileLocator;
27import org.jacoco.report.ReportOutputFolder;
28
29/**
30 * Page showing coverage information for a Java package. The page contains a
31 * table with all classes of the package.
32 *
33 * @author Marc R. Hoffmann
34 * @version $Revision: $
35 */
36public class PackagePage extends ReportPage {
37
38 private final List<ClassPage> classes = new ArrayList<ClassPage>();
39
40 private final Map<String, SourceFilePage> sourceFiles = new HashMap<String, SourceFilePage>();
41
42 /**
43 * Creates a new visitor in the given context.
44 *
45 * @param node
46 * @param parent
47 * @param outputFolder
48 * @param context
49 */
50 public PackagePage(final ICoverageNode node, final ReportPage parent,
51 final ReportOutputFolder outputFolder,
52 final IHTMLReportContext context) {
53 super(node, parent, outputFolder, context);
54 }
55
56 public IReportVisitor visitChild(final ICoverageNode node) {
57 final ElementType type = node.getElementType();
58 switch (type) {
59 case SOURCEFILE:
60 final SourceFilePage sourcePage = new SourceFilePage(
61 (SourceFileCoverage) node, this, outputFolder, context);
62 sourceFiles.put(node.getName(), sourcePage);
63 return sourcePage;
64 case CLASS:
65 final ClassPage classPage = new ClassPage((ClassCoverage) node,
66 this, sourceFiles, outputFolder, context);
67 classes.add(classPage);
68 return classPage;
69 }
70 throw new IllegalStateException("Unexpected element type " + type);
71 }
72
73 @Override
74 public void visitEnd(final ISourceFileLocator sourceFileLocator)
75 throws IOException {
76 super.visitEnd(sourceFileLocator);
77 // free memory, otherwise we will keep the complete tree:
78 classes.clear();
79 sourceFiles.clear();
80 }
81
82 @Override
83 protected void content(final HTMLElement body,
84 final ISourceFileLocator sourceFileLocator) throws IOException {
85 context.getTable(getNode().getElementType()).render(body, classes,
86 getNode(), context.getResources(), outputFolder);
87 }
88
89 @Override
90 protected String getFileName() {
91 return "index.html";
92 }
93
94 @Override
95 public String getLabel() {
96 return context.getLanguageNames().getPackageName(getNode().getName());
97 }
98
99 @Override
100 protected ReportOutputFolder getFolder(final ReportOutputFolder base) {
101 return base.subFolder(getLabel());
102 }
103
104}