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.base;
029:
030: import java.io.Serializable;
031:
032: import net.sf.jasperreports.crosstabs.JRCrosstabMeasure;
033: import net.sf.jasperreports.engine.JRConstants;
034: import net.sf.jasperreports.engine.JRExpression;
035: import net.sf.jasperreports.engine.JRRuntimeException;
036: import net.sf.jasperreports.engine.JRVariable;
037: import net.sf.jasperreports.engine.base.JRBaseObjectFactory;
038: import net.sf.jasperreports.engine.util.JRClassLoader;
039:
040: /**
041: * Base read-only crosstab measure implementation.
042: *
043: * @author Lucian Chirita (lucianc@users.sourceforge.net)
044: * @version $Id: JRBaseCrosstabMeasure.java 1712 2007-04-30 18:04:51Z teodord $
045: */
046: public class JRBaseCrosstabMeasure implements JRCrosstabMeasure,
047: Serializable {
048: private static final long serialVersionUID = JRConstants.SERIAL_VERSION_UID;
049:
050: protected String name;
051: protected String valueClassName;
052: protected String valueClassRealName = null;
053: protected Class valueClass;
054: protected JRExpression expression;
055: protected byte calculation = JRVariable.CALCULATION_COUNT;
056: protected String incrementerFactoryClassName;
057: protected String incrementerFactoryClassRealName;
058: protected Class incrementerFactoryClass;
059: protected byte percentageOfType = JRCrosstabMeasure.PERCENTAGE_TYPE_NONE;
060: protected String percentageCalculatorClassName;
061: protected String percentageCalculatorClassRealName;
062: protected Class percentageCalculatorClass;
063: protected JRVariable variable;
064:
065: protected JRBaseCrosstabMeasure() {
066: }
067:
068: public JRBaseCrosstabMeasure(JRCrosstabMeasure measure,
069: JRBaseObjectFactory factory) {
070: factory.put(measure, this );
071:
072: this .name = measure.getName();
073: this .valueClassName = measure.getValueClassName();
074: this .expression = factory.getExpression(measure
075: .getValueExpression());
076: this .calculation = measure.getCalculation();
077: this .incrementerFactoryClassName = measure
078: .getIncrementerFactoryClassName();
079: this .percentageOfType = measure.getPercentageOfType();
080: this .percentageCalculatorClassName = measure
081: .getPercentageCalculatorClassName();
082: this .variable = factory.getVariable(measure.getVariable());
083: }
084:
085: public String getName() {
086: return name;
087: }
088:
089: public String getValueClassName() {
090: return valueClassName;
091: }
092:
093: public JRExpression getValueExpression() {
094: return expression;
095: }
096:
097: public byte getCalculation() {
098: return calculation;
099: }
100:
101: public String getIncrementerFactoryClassName() {
102: return incrementerFactoryClassName;
103: }
104:
105: public byte getPercentageOfType() {
106: return percentageOfType;
107: }
108:
109: public Class getIncrementerFactoryClass() {
110: if (incrementerFactoryClass == null) {
111: String className = getIncrementerFactoryClassRealName();
112: if (className != null) {
113: try {
114: incrementerFactoryClass = JRClassLoader
115: .loadClassForName(className);
116: } catch (ClassNotFoundException e) {
117: throw new JRRuntimeException(
118: "Could not load measure incrementer class",
119: e);
120: }
121: }
122: }
123:
124: return incrementerFactoryClass;
125: }
126:
127: /**
128: *
129: */
130: private String getIncrementerFactoryClassRealName() {
131: if (incrementerFactoryClassRealName == null) {
132: incrementerFactoryClassRealName = JRClassLoader
133: .getClassRealName(incrementerFactoryClassName);
134: }
135:
136: return incrementerFactoryClassRealName;
137: }
138:
139: public Class getValueClass() {
140: if (valueClass == null) {
141: String className = getValueClassRealName();
142: if (className != null) {
143: try {
144: valueClass = JRClassLoader
145: .loadClassForName(className);
146: } catch (ClassNotFoundException e) {
147: throw new JRRuntimeException(
148: "Could not load bucket value class", e);
149: }
150: }
151: }
152:
153: return valueClass;
154: }
155:
156: /**
157: *
158: */
159: private String getValueClassRealName() {
160: if (valueClassRealName == null) {
161: valueClassRealName = JRClassLoader
162: .getClassRealName(valueClassName);
163: }
164:
165: return valueClassRealName;
166: }
167:
168: public JRVariable getVariable() {
169: return variable;
170: }
171:
172: public String getPercentageCalculatorClassName() {
173: return percentageCalculatorClassName;
174: }
175:
176: public Class getPercentageCalculatorClass() {
177: if (percentageCalculatorClass == null) {
178: String className = getPercentageCalculatorClassRealName();
179: if (className != null) {
180: try {
181: percentageCalculatorClass = JRClassLoader
182: .loadClassForName(className);
183: } catch (ClassNotFoundException e) {
184: throw new JRRuntimeException(
185: "Could not load measure percentage calculator class",
186: e);
187: }
188: }
189: }
190:
191: return percentageCalculatorClass;
192: }
193:
194: /**
195: *
196: */
197: private String getPercentageCalculatorClassRealName() {
198: if (percentageCalculatorClassRealName == null) {
199: percentageCalculatorClassRealName = JRClassLoader
200: .getClassRealName(percentageCalculatorClassName);
201: }
202:
203: return percentageCalculatorClassRealName;
204: }
205:
206: }
|