130 lines
4.0 KiB
Java
130 lines
4.0 KiB
Java
package net.sf.jasperreports.crosstabs.fill.calculation;
|
|
|
|
import net.sf.jasperreports.engine.JRException;
|
|
import net.sf.jasperreports.engine.fill.AbstractValueProvider;
|
|
import net.sf.jasperreports.engine.fill.JRCalculable;
|
|
import net.sf.jasperreports.engine.fill.JRDistinctCountExtendedIncrementerFactory;
|
|
import net.sf.jasperreports.engine.fill.JRExtendedIncrementer;
|
|
import net.sf.jasperreports.engine.fill.JRExtendedIncrementerFactory;
|
|
|
|
public class MeasureDefinition {
|
|
protected final byte calculation;
|
|
|
|
protected final JRExtendedIncrementerFactory incrementerFactory;
|
|
|
|
protected final Class valueClass;
|
|
|
|
protected final boolean isSystemDefined;
|
|
|
|
public MeasureDefinition(Class valueClass, byte calculation, JRExtendedIncrementerFactory incrementerFactory) {
|
|
this(valueClass, calculation, incrementerFactory, false);
|
|
}
|
|
|
|
protected MeasureDefinition(Class valueClass, byte calculation, JRExtendedIncrementerFactory incrementerFactory, boolean isSystemDefined) {
|
|
this.valueClass = valueClass;
|
|
this.calculation = calculation;
|
|
this.incrementerFactory = incrementerFactory;
|
|
this.isSystemDefined = isSystemDefined;
|
|
}
|
|
|
|
public static MeasureDefinition createHelperMeasure(MeasureDefinition measure, byte helperCalculation) {
|
|
return new MeasureDefinition(measure.valueClass, helperCalculation, measure.incrementerFactory, true);
|
|
}
|
|
|
|
public static MeasureDefinition createDistinctCountHelperMeasure(MeasureDefinition measure) {
|
|
return new MeasureDefinition(measure.valueClass, (byte)0, (JRExtendedIncrementerFactory)JRDistinctCountExtendedIncrementerFactory.getInstance(), true);
|
|
}
|
|
|
|
public byte getCalculation() {
|
|
return this.calculation;
|
|
}
|
|
|
|
public JRExtendedIncrementerFactory getIncrementerFactory() {
|
|
return this.incrementerFactory;
|
|
}
|
|
|
|
public JRExtendedIncrementer getIncrementer() {
|
|
return this.incrementerFactory.getExtendedIncrementer(this.calculation);
|
|
}
|
|
|
|
protected boolean isSystemDefined() {
|
|
return this.isSystemDefined;
|
|
}
|
|
|
|
public Class getValueClass() {
|
|
return this.valueClass;
|
|
}
|
|
|
|
protected static final AbstractValueProvider VALUE_PROVIDER = new AbstractValueProvider() {
|
|
public Object getValue(JRCalculable calculable) {
|
|
return calculable.getValue();
|
|
}
|
|
};
|
|
|
|
public class MeasureValue implements JRCalculable {
|
|
private Object value;
|
|
|
|
private MeasureValue[] helpers;
|
|
|
|
private boolean initialized;
|
|
|
|
private JRExtendedIncrementer incrementer;
|
|
|
|
private final MeasureDefinition this$0;
|
|
|
|
public MeasureValue() {
|
|
this.value = null;
|
|
this.helpers = new MeasureValue[3];
|
|
this.incrementer = MeasureDefinition.this.getIncrementer();
|
|
init();
|
|
}
|
|
|
|
protected void init() {
|
|
this.value = this.incrementer.initialValue();
|
|
setInitialized(true);
|
|
}
|
|
|
|
public void addValue(Object addValue) throws JRException {
|
|
this.value = this.incrementer.increment(this, addValue, MeasureDefinition.VALUE_PROVIDER);
|
|
setInitialized(false);
|
|
}
|
|
|
|
public void addValue(MeasureValue measureValue) throws JRException {
|
|
if (!measureValue.isInitialized()) {
|
|
this.value = this.incrementer.combine(this, measureValue, MeasureDefinition.VALUE_PROVIDER);
|
|
setInitialized(false);
|
|
}
|
|
}
|
|
|
|
public Object getValue() {
|
|
return this.value;
|
|
}
|
|
|
|
public String toString() {
|
|
return String.valueOf(getValue());
|
|
}
|
|
|
|
public MeasureValue setHelper(MeasureValue helperVariable, byte type) {
|
|
MeasureValue old = this.helpers[type];
|
|
this.helpers[type] = helperVariable;
|
|
return old;
|
|
}
|
|
|
|
public boolean isInitialized() {
|
|
return this.initialized;
|
|
}
|
|
|
|
public Object getIncrementedValue() {
|
|
return this.value;
|
|
}
|
|
|
|
public JRCalculable getHelperVariable(byte helperType) {
|
|
return this.helpers[helperType];
|
|
}
|
|
|
|
public void setInitialized(boolean isInitialized) {
|
|
this.initialized = isInitialized;
|
|
}
|
|
}
|
|
}
|