001: /*
002: * ============================================================================
003: * GNU Lesser General Public License
004: * ============================================================================
005: *
006: * JasperReports - Free Java report-generating library.
007: * Copyright (C) 2001-2006 JasperSoft Corporation http://www.jaspersoft.com
008: *
009: * This library is free software; you can redistribute it and/or
010: * modify it under the terms of the GNU Lesser General Public
011: * License as published by the Free Software Foundation; either
012: * version 2.1 of the License, or (at your option) any later version.
013: *
014: * This library is distributed in the hope that it will be useful,
015: * but WITHOUT ANY WARRANTY; without even the implied warranty of
016: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
017: * Lesser General Public License for more details.
018: *
019: * You should have received a copy of the GNU Lesser General Public
020: * License along with this library; if not, write to the Free Software
021: * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
022: *
023: * JasperSoft Corporation
024: * 303 Second Street, Suite 450 North
025: * San Francisco, CA 94107
026: * http://www.jaspersoft.com
027: */
028: package net.sf.jasperreports.crosstabs;
029:
030: import net.sf.jasperreports.engine.JRExpression;
031: import net.sf.jasperreports.engine.JRVariable;
032:
033: /**
034: * Crosstab measure interface.
035: * <p>
036: * A measure is a value that is accumulated by the crosstab and is displayed
037: * in the crosstab cells.
038: *
039: * @author Lucian Chirita (lucianc@users.sourceforge.net)
040: * @version $Id: JRCrosstabMeasure.java 1229 2006-04-19 10:27:35Z teodord $
041: */
042: public interface JRCrosstabMeasure {
043: /**
044: * Percentage type indicating that the value will not be calculated
045: * as a percentage.
046: */
047: public static final byte PERCENTAGE_TYPE_NONE = 0;
048:
049: /**
050: * Percentage type indicating that the value will be calculated as percentage
051: * of the grand total value.
052: */
053: public static final byte PERCENTAGE_TYPE_GRAND_TOTAL = 1;
054:
055: /**
056: * Returns the name of the measure.
057: *
058: * @return the name of the measure
059: * @see #getVariable()
060: */
061: public String getName();
062:
063: /**
064: * Returns the name of the value class for this measure.
065: *
066: * @return the name of the value class for this measure
067: */
068: public String getValueClassName();
069:
070: /**
071: * Returns the value class of this measure.
072: *
073: * @return the value class of this measure
074: */
075: public Class getValueClass();
076:
077: /**
078: * Returns the measure expression.
079: *
080: * @return the measure expression
081: */
082: public JRExpression getValueExpression();
083:
084: /**
085: * Returns the calculation type which will be performed on the measure values.
086: * <p>
087: * The incrementer factory associated with this measure will create
088: * an incrementer which will sum the measure values.
089: * <p>
090: * The possible calculation type are the same as the ones used for variables
091: * (see {@link JRVariable#getCalculation() JRVariable.getCalculation()} with
092: * the exception of {@link JRVariable#CALCULATION_SYSTEM JRVariable.CALCULATION_SYSTEM}.
093: *
094: * @return the calculation type which will be performed on the measure values
095: * @see #getIncrementerFactoryClassName()
096: * @see net.sf.jasperreports.engine.fill.JRExtendedIncrementerFactory
097: * @see net.sf.jasperreports.engine.fill.JRExtendedIncrementer
098: */
099: public byte getCalculation();
100:
101: /**
102: * Returns the incrementer factory class name.
103: * <p>
104: * Crosstab measures require extended incrementers, therefore
105: * the incrementer class should implement
106: * {@link net.sf.jasperreports.engine.fill.JRExtendedIncrementerFactory JRExtendedIncrementerFactory}.
107: *
108: * @return the incrementer factory class name
109: */
110: public String getIncrementerFactoryClassName();
111:
112: /**
113: * Returns the incrementer factory class.
114: *
115: * @return the incrementer factory class
116: * @see #getIncrementerFactoryClassName()
117: */
118: public Class getIncrementerFactoryClass();
119:
120: /**
121: * Returns the percentage calculation type performed on this measure.
122: * <p>
123: * Currently, only percentage out of grand total is supported.
124: * <p>
125: * The possible values are:
126: * <ul>
127: * <li>{@link #PERCENTAGE_TYPE_NONE PERCENTAGE_TYPE_NONE}</li>
128: * <li>{@link #PERCENTAGE_TYPE_GRAND_TOTAL PERCENTAGE_TYPE_GRAND_TOTAL}</li>
129: * </ul>
130: * <p>
131: * If percentage calculation is required, the value class should be one of the built-in supported
132: * percentage types or the percentage calculator class should be specified.
133: *
134: * @return the percentage calculation type
135: * @see net.sf.jasperreports.crosstabs.fill.JRPercentageCalculatorFactory#hasBuiltInCalculator(Class)
136: * @see #getPercentageCalculatorClassName()
137: */
138: public byte getPercentageOfType();
139:
140: /**
141: * Returns the percentage calculator class name.
142: *
143: * @return the percentage calculator class name
144: */
145: public String getPercentageCalculatorClassName();
146:
147: /**
148: * Returns the percentage calcualtor class.
149: *
150: * @return the percentage calcualtor class
151: */
152: public Class getPercentageCalculatorClass();
153:
154: /**
155: * Returns the variable associated with this measure.
156: * <p>
157: * The variable can be used inside the crosstab data cells as the
158: * measure value. The variable has the same name and value class as
159: * the measure.
160: *
161: * @return the variable associated with this measure
162: */
163: public JRVariable getVariable();
164: }
|