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 }