1e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov/******************************************************************************* 234cd880f4e52a32b9f88ed4ea687b8f3f892395bEvgeny Mandrikov * Copyright (c) 2009, 2017 Mountainminds GmbH & Co. KG and Contributors 3e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov * All rights reserved. This program and the accompanying materials 4e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov * are made available under the terms of the Eclipse Public License v1.0 5e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov * which accompanies this distribution, and is available at 6e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov * http://www.eclipse.org/legal/epl-v10.html 7e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov * 8e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov * Contributors: 9e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov * Marc R. Hoffmann - initial API and implementation 10e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov * 11e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov *******************************************************************************/ 12e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikovpackage org.jacoco.report.internal.html.page; 13e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov 14e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikovimport java.io.IOException; 15e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikovimport java.util.ArrayList; 16e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikovimport java.util.List; 17e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov 18e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikovimport org.jacoco.core.analysis.ICoverageNode; 19e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikovimport org.jacoco.report.internal.ReportOutputFolder; 20e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikovimport org.jacoco.report.internal.html.HTMLElement; 21e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikovimport org.jacoco.report.internal.html.IHTMLReportContext; 22e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikovimport org.jacoco.report.internal.html.resources.Resources; 23e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikovimport org.jacoco.report.internal.html.table.ITableItem; 24e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov 25e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov/** 26e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov * Report page that contains a table of items linked to other pages. 27e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov * 28e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov * @param29e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov * type of the node represented by this page 30e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov */ 31e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikovpublic abstract class TablePage<NodeType extends ICoverageNode> extends 32e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov NodePage<NodeType> { 33e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov 34e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov private final List<ITableItem> items = new ArrayList<ITableItem>(); 35e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov 36e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov /** 37e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov * Creates a new node page. 38e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov * 39e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov * @param node 40e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov * corresponding node 41e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov * @param parent 42e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov * optional hierarchical parent 43e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov * @param folder 44e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov * base folder to create this report in 45e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov * @param context 46e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov * settings context 47e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov */ 48e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov protected TablePage(final NodeType node, final ReportPage parent, 49e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov final ReportOutputFolder folder, final IHTMLReportContext context) { 50e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov super(node, parent, folder, context); 51e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov } 52e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov 53e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov /** 54e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov * Adds the given item to the table. Method must be called before the page 55e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov * is rendered. 56e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov * 57e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov * @param item 5857f7cf06888f1e34f9ab2e3129c3d433826ecbe1Marc R. Hoffmann * table item to add 59e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov */ 60e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov public void addItem(final ITableItem item) { 61e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov items.add(item); 62e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov } 63e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov 64e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov @Override 65e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov protected void head(final HTMLElement head) throws IOException { 66e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov super.head(head); 67e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov head.script("text/javascript", 68e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov context.getResources().getLink(folder, Resources.SORT_SCRIPT)); 69e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov } 70e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov 71e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov @Override 72e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov protected void content(final HTMLElement body) throws IOException { 73e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov context.getTable().render(body, items, getNode(), 74e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov context.getResources(), folder); 75e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov // free memory, otherwise we will keep the complete page tree: 76e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov items.clear(); 77e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov } 78e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov 79e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov} 80