001 /** 002 * www.jcoverage.com 003 * Copyright (C)2003 jcoverage ltd. 004 * 005 * This file is part of jcoverage. 006 * 007 * jcoverage is free software; you can redistribute it and/or modify 008 * it under the terms of the GNU General Public License as published 009 * by the Free Software Foundation; either version 2 of the License, 010 * or (at your option) any later version. 011 * 012 * jcoverage is distributed in the hope that it will be useful, but 013 * WITHOUT ANY WARRANTY; without even the implied warranty of 014 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 015 * General Public License for more details. 016 * 017 * You should have received a copy of the GNU General Public License 018 * along with jcoverage; if not, write to the Free Software 019 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 020 * USA 021 * 022 */ 023 package com.jcoverage.reporting; 024 025 import java.util.*; 026 027 /** 028 * A page containing information at the same report level. 029 */ 030 public interface Page extends Closeable { 031 032 /** 033 * Create a new line in the page. Lines can fall into categories, 034 * used for tables and sectioning. This information is used by 035 * formats, so they can request lines by category. 036 */ 037 Line createLine(LineCategory category); 038 039 /** 040 * Add a reference to a line. Unlike the {@link 041 * #createLine(LineCategory)} method, no connections are made 042 * between this page and line. 043 */ 044 void addLineReference(Line line,LineCategory category); 045 046 Line lookupLineByField(LineCategory category,Column column,Object value); 047 048 /** 049 * The page can 'contain' any number of categories (tables) which, 050 * in turn, contain any number of lines. This method provides 051 * access to those lines. 052 * @return the lines stored in this page against the category, or an 053 * empty set. Should never return null. 054 */ 055 Set getLines(LineCategory category); 056 057 void setReport(Report report); 058 059 /** 060 * @return the line that summarizes this detail page, null if this 061 * is not a detail page. The terminology of master and detail comes 062 * from the database world where heirarchical reports which show 063 * information in a parent-child format are often referred to as 064 * master-detail reports. 065 */ 066 Line getMasterLine(); 067 068 /** 069 * @see #getMasterLine() 070 */ 071 void setMasterLine(Line masterLine); 072 073 /** 074 * Get the line categories that are valid for this page. 075 */ 076 LineCategory[] getCategories(); 077 078 /* 079 * TODO: This isn't optimal in terms of memory usage - categories 080 * are common to all pages of a particular type, so a PageDefinition 081 * class or similar should be invented. 082 */ 083 void addCategory(LineCategory category); 084 085 String getLabel(); 086 087 }