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.engine.fill;
029:
030: import java.io.Serializable;
031:
032: import net.sf.jasperreports.engine.JRConstants;
033: import net.sf.jasperreports.engine.JRExpression;
034: import net.sf.jasperreports.engine.JRGroup;
035:
036: /**
037: * An evaluation time during the report fill process.
038: *
039: * @author Lucian Chirita (lucianc@users.sourceforge.net)
040: * @version $Id: JREvaluationTime.java 1677 2007-03-29 11:44:30Z teodord $
041: */
042: public class JREvaluationTime implements Serializable {
043: /**
044: *
045: */
046: private static final long serialVersionUID = JRConstants.SERIAL_VERSION_UID;
047:
048: /**
049: * Evaluation time corresponding to {@link JRExpression#EVALUATION_TIME_REPORT JRExpression.EVALUATION_TIME_REPORT}.
050: */
051: public static final JREvaluationTime EVALUATION_TIME_REPORT = new JREvaluationTime(
052: JRExpression.EVALUATION_TIME_REPORT, null, null);
053: /**
054: * Evaluation time corresponding to {@link JRExpression#EVALUATION_TIME_PAGE JRExpression.EVALUATION_TIME_PAGE}.
055: */
056: public static final JREvaluationTime EVALUATION_TIME_PAGE = new JREvaluationTime(
057: JRExpression.EVALUATION_TIME_PAGE, null, null);
058: /**
059: * Evaluation time corresponding to {@link JRExpression#EVALUATION_TIME_COLUMN JRExpression.EVALUATION_TIME_COLUMN}.
060: */
061: public static final JREvaluationTime EVALUATION_TIME_COLUMN = new JREvaluationTime(
062: JRExpression.EVALUATION_TIME_COLUMN, null, null);
063: /**
064: * Evaluation time corresponding to {@link JRExpression#EVALUATION_TIME_NOW JRExpression.EVALUATION_TIME_NOW}.
065: */
066: public static final JREvaluationTime EVALUATION_TIME_NOW = new JREvaluationTime(
067: JRExpression.EVALUATION_TIME_NOW, null, null);
068:
069: /**
070: * Returns the evaluation time corresponding to
071: * {@link JRExpression#EVALUATION_TIME_GROUP JRExpression.EVALUATION_TIME_GROUP} for a specific group.
072: *
073: * @param groupName the group name
074: * @return corresponding group evaluation time
075: */
076: public static JREvaluationTime getGroupEvaluationTime(
077: String groupName) {
078: return new JREvaluationTime(JRExpression.EVALUATION_TIME_GROUP,
079: groupName, null);
080: }
081:
082: /**
083: * Returns the evaluation time corresponding to
084: * {@link JRExpression#EVALUATION_TIME_BAND JRExpression.EVALUATION_TIME_BAND} for a specific band.
085: *
086: * @param band the band
087: * @return corresponding band evaluation time
088: */
089: public static JREvaluationTime getBandEvaluationTime(JRFillBand band) {
090: return new JREvaluationTime(JRExpression.EVALUATION_TIME_BAND,
091: null, band);
092: }
093:
094: /**
095: * Returns the evaluation time corresponding to an evaluation time type.
096: *
097: * @param type the evaluation time type
098: * @param group the group used for {@link JRExpression#EVALUATION_TIME_GROUP JRExpression.EVALUATION_TIME_GROUP}
099: * evaluation time type
100: * @param band the band used for {@link JRExpression#EVALUATION_TIME_BAND JRExpression.EVALUATION_TIME_BAND}
101: * evaluation time type
102: * @return the evaluation time corresponding to an evaluation time type
103: */
104: public static JREvaluationTime getEvaluationTime(byte type,
105: JRGroup group, JRFillBand band) {
106: JREvaluationTime evaluationTime;
107:
108: switch (type) {
109: case JRExpression.EVALUATION_TIME_REPORT:
110: evaluationTime = EVALUATION_TIME_REPORT;
111: break;
112: case JRExpression.EVALUATION_TIME_PAGE:
113: evaluationTime = EVALUATION_TIME_PAGE;
114: break;
115: case JRExpression.EVALUATION_TIME_COLUMN:
116: evaluationTime = EVALUATION_TIME_COLUMN;
117: break;
118: case JRExpression.EVALUATION_TIME_GROUP:
119: evaluationTime = getGroupEvaluationTime(group.getName());
120: break;
121: case JRExpression.EVALUATION_TIME_BAND:
122: evaluationTime = getBandEvaluationTime(band);
123: break;
124: default:
125: evaluationTime = null;
126: break;
127: }
128:
129: return evaluationTime;
130: }
131:
132: private final byte type;
133: private final String groupName;
134: private final int bandId;
135: private final int hash;
136:
137: private JREvaluationTime(byte type, String groupName,
138: JRFillBand band) {
139: this .type = type;
140: this .groupName = groupName;
141: this .bandId = band == null ? 0 : band.getId();
142:
143: this .hash = computeHash();
144: }
145:
146: private int computeHash() {
147: int hashCode = type;
148: hashCode = 31 * hashCode
149: + (groupName == null ? 0 : groupName.hashCode());
150: hashCode = 31 * hashCode + bandId;
151: return hashCode;
152: }
153:
154: public boolean equals(Object obj) {
155: if (obj == this ) {
156: return true;
157: }
158:
159: JREvaluationTime e = (JREvaluationTime) obj;
160:
161: boolean eq = e.type == type;
162:
163: if (eq) {
164: switch (type) {
165: case JRExpression.EVALUATION_TIME_GROUP:
166: eq = groupName.equals(e.groupName);
167: break;
168: case JRExpression.EVALUATION_TIME_BAND:
169: eq = bandId == e.bandId;
170: break;
171: }
172: }
173:
174: return eq;
175: }
176:
177: public int hashCode() {
178: return hash;
179: }
180: }
|