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.design;
029:
030: import java.beans.PropertyChangeListener;
031: import java.beans.PropertyChangeSupport;
032:
033: import net.sf.jasperreports.crosstabs.base.JRBaseCrosstabMeasure;
034: import net.sf.jasperreports.engine.JRConstants;
035: import net.sf.jasperreports.engine.JRExpression;
036: import net.sf.jasperreports.engine.JRVariable;
037: import net.sf.jasperreports.engine.design.JRDesignVariable;
038:
039: /**
040: * Crosstab measure implementation to be used for report designing.
041: *
042: * @author Lucian Chirita (lucianc@users.sourceforge.net)
043: * @version $Id: JRDesignCrosstabMeasure.java 1244 2006-04-28 08:22:38Z lucianc $
044: */
045: public class JRDesignCrosstabMeasure extends JRBaseCrosstabMeasure {
046: private static final long serialVersionUID = JRConstants.SERIAL_VERSION_UID;
047:
048: public static final String PROPERTY_VALUE_CLASS = "valueClassName";
049:
050: /** Property change support mechanism. */
051: private transient PropertyChangeSupport propSupport;
052:
053: private JRDesignVariable designVariable;
054:
055: /**
056: * Creates a crosstab measure.
057: */
058: public JRDesignCrosstabMeasure() {
059: super ();
060:
061: variable = designVariable = new JRDesignVariable();
062: designVariable.setCalculation(JRVariable.CALCULATION_SYSTEM);
063: designVariable.setSystemDefined(true);
064: }
065:
066: /**
067: * Sets the calculation type.
068: *
069: * @param calculation the calculation type
070: * @see net.sf.jasperreports.crosstabs.JRCrosstabMeasure#getCalculation()
071: */
072: public void setCalculation(byte calculation) {
073: this .calculation = calculation;
074: }
075:
076: /**
077: * Sets the measure value expression.
078: *
079: * @param expression the measure value expression.
080: * @see net.sf.jasperreports.crosstabs.JRCrosstabMeasure#getValueExpression()
081: */
082: public void setValueExpression(JRExpression expression) {
083: this .expression = expression;
084: }
085:
086: /**
087: * Sets the incrementer factory class name.
088: *
089: * @param incrementerFactoryClassName the incrementer factory class name
090: * @see net.sf.jasperreports.crosstabs.JRCrosstabMeasure#getIncrementerFactoryClassName()
091: */
092: public void setIncrementerFactoryClassName(
093: String incrementerFactoryClassName) {
094: this .incrementerFactoryClassName = incrementerFactoryClassName;
095: this .incrementerFactoryClass = null;
096: }
097:
098: /**
099: * Sets the measure name.
100: *
101: * @param name the measure name
102: * @see net.sf.jasperreports.crosstabs.JRCrosstabMeasure#getName()
103: */
104: public void setName(String name) {
105: this .name = name;
106: designVariable.setName(name);
107: }
108:
109: /**
110: * Sets the percentage calculation type.
111: *
112: * @param percentageOfType the percentage calculation type
113: * @see net.sf.jasperreports.crosstabs.JRCrosstabMeasure#getPercentageOfType()
114: */
115: public void setPercentageOfType(byte percentageOfType) {
116: this .percentageOfType = percentageOfType;
117: }
118:
119: /**
120: * Sets the percentage calculator class name.
121: *
122: * @param percentageCalculatorClassName the percentage calculator class name
123: * @see net.sf.jasperreports.crosstabs.JRCrosstabMeasure#getPercentageCalculatorClassName()
124: */
125: public void setPercentageCalculatorClassName(
126: String percentageCalculatorClassName) {
127: this .percentageCalculatorClassName = percentageCalculatorClassName;
128: this .percentageCalculatorClass = null;
129: }
130:
131: /**
132: * Sets the measure value class name.
133: *
134: * @param valueClassName the measure value class name
135: * @see net.sf.jasperreports.crosstabs.JRCrosstabMeasure#getValueClassName()
136: */
137: public void setValueClassName(String valueClassName) {
138: String oldValue = this .valueClassName;
139:
140: this .valueClassName = valueClassName;
141: this .valueClass = null;
142: designVariable.setValueClassName(valueClassName);
143:
144: getPropertyChangeSupport().firePropertyChange(
145: PROPERTY_VALUE_CLASS, oldValue, this .valueClassName);
146: }
147:
148: /**
149: * Add a property listener to listen to all properties of this class.
150: *
151: * @param l
152: * The property listener to add.
153: *
154: * @see #removePropertyChangeListener(PropertyChangeListener)
155: */
156: public void addPropertyChangeListener(PropertyChangeListener l) {
157: getPropertyChangeSupport().addPropertyChangeListener(l);
158: }
159:
160: /**
161: * Add a property listener to receive property change events for only one
162: * specific property.
163: *
164: * @param propName
165: * The property to listen to.
166: * @param l
167: * The property listener to add.
168: *
169: * @see #removePropertyChangeListener(String, PropertyChangeListener)
170: */
171: public void addPropertyChangeListener(String propName,
172: PropertyChangeListener l) {
173: getPropertyChangeSupport().addPropertyChangeListener(propName,
174: l);
175: }
176:
177: /**
178: * Remove a property change listener registered for all properties.
179: *
180: * This will only remove listeners that were added through the
181: * {@link #addPropertyChangeListener(PropertyChangeListener) addPropertyChangeListener(PropertyChangeListener)}
182: * method.
183: *
184: * @param l
185: * The listener to remove.
186: */
187: public void removePropertyChangeListener(PropertyChangeListener l) {
188: getPropertyChangeSupport().removePropertyChangeListener(l);
189: }
190:
191: /**
192: * Remove a property change listener registered for a specific property.
193: *
194: * @param propName
195: * The property to listen to.
196: * @param l
197: * The listener to remove.
198: */
199: public void removePropertyChangeListener(String propName,
200: PropertyChangeListener l) {
201: getPropertyChangeSupport().removePropertyChangeListener(
202: propName, l);
203: }
204:
205: /**
206: * Get the property change support object for this class. Because the
207: * property change support object has to be transient, it may need to be
208: * created.
209: *
210: * @return The property change support object.
211: */
212: protected PropertyChangeSupport getPropertyChangeSupport() {
213: if (propSupport == null) {
214: propSupport = new PropertyChangeSupport(this);
215: }
216: return propSupport;
217: }
218: }
|