1 /******************************************************************************* 2 * Copyright (c) 2009, 2018 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 *******************************************************************************/ 12 package org.jacoco.report.internal.html.resources; 13 14 import java.io.IOException; 15 import java.io.InputStream; 16 import java.io.OutputStream; 17 18 import org.jacoco.core.analysis.ICoverageNode.ElementType; 19 import org.jacoco.report.internal.ReportOutputFolder; 20 21 /** 22 * Static resource that are included with the coverage report and might be 23 * referenced from created HTML pages. 24 */ 25 public class Resources { 26 27 /** The name of the style sheet */ 28 public static final String STYLESHEET = "report.css"; 29 30 /** The name of the prettify style sheet */ 31 public static final String PRETTIFY_STYLESHEET = "prettify.css"; 32 33 /** The name of the prettify script */ 34 public static final String PRETTIFY_SCRIPT = "prettify.js"; 35 36 /** The name of the sort script */ 37 public static final String SORT_SCRIPT = "sort.js"; 38 39 /** The name of the red part of the coverage bar */ 40 public static final String REDBAR = "redbar.gif"; 41 42 /** The name of the green part of the coverage bar */ 43 public static final String GREENBAR = "greenbar.gif"; 44 45 private final ReportOutputFolder folder; 46 47 /** 48 * Attaches resources to the report with the given root folder. 49 * 50 * @param root 51 * root folder of the report 52 */ Resources(final ReportOutputFolder root)53 public Resources(final ReportOutputFolder root) { 54 folder = root.subFolder("jacoco-resources"); 55 } 56 57 /** 58 * Returns a relative link to a static resource. 59 * 60 * @param base 61 * base folder from where the link should be created 62 * @param name 63 * name of the static resource, see constants in this class 64 * @return relative link 65 */ getLink(final ReportOutputFolder base, final String name)66 public String getLink(final ReportOutputFolder base, final String name) { 67 return folder.getLink(base, name); 68 } 69 70 /** 71 * Determines the style sheet class for the given element type. 72 * 73 * @param type 74 * type of the element 75 * @return style class name 76 */ getElementStyle(final ElementType type)77 public static String getElementStyle(final ElementType type) { 78 switch (type) { 79 case GROUP: 80 return Styles.EL_GROUP; 81 case BUNDLE: 82 return Styles.EL_BUNDLE; 83 case PACKAGE: 84 return Styles.EL_PACKAGE; 85 case SOURCEFILE: 86 return Styles.EL_SOURCE; 87 case CLASS: 88 return Styles.EL_CLASS; 89 case METHOD: 90 return Styles.EL_METHOD; 91 } 92 throw new AssertionError("Unknown element type: " + type); 93 } 94 95 /** 96 * Copies all static resources into the report. 97 * 98 * @throws IOException 99 * if the resources can't be written to the report 100 */ copyResources()101 public void copyResources() throws IOException { 102 copyResource(STYLESHEET); 103 copyResource("report.gif"); 104 copyResource("group.gif"); 105 copyResource("bundle.gif"); 106 copyResource("package.gif"); 107 copyResource("source.gif"); 108 copyResource("class.gif"); 109 copyResource("method.gif"); 110 copyResource("session.gif"); 111 copyResource("sort.gif"); 112 copyResource("up.gif"); 113 copyResource("down.gif"); 114 copyResource("branchfc.gif"); 115 copyResource("branchnc.gif"); 116 copyResource("branchpc.gif"); 117 copyResource(REDBAR); 118 copyResource(GREENBAR); 119 copyResource(PRETTIFY_STYLESHEET); 120 copyResource(PRETTIFY_SCRIPT); 121 copyResource(SORT_SCRIPT); 122 } 123 copyResource(final String name)124 private void copyResource(final String name) throws IOException { 125 final InputStream in = Resources.class.getResourceAsStream(name); 126 final OutputStream out = folder.createFile(name); 127 final byte[] buffer = new byte[256]; 128 int len; 129 while ((len = in.read(buffer)) != -1) { 130 out.write(buffer, 0, len); 131 } 132 in.close(); 133 out.close(); 134 } 135 136 } 137