first commit
This commit is contained in:
@@ -0,0 +1,240 @@
|
||||
package net.sf.jasperreports.charts.fill;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
import net.sf.jasperreports.charts.JRHighLowDataset;
|
||||
import net.sf.jasperreports.engine.JRChartDataset;
|
||||
import net.sf.jasperreports.engine.JRException;
|
||||
import net.sf.jasperreports.engine.JRExpression;
|
||||
import net.sf.jasperreports.engine.JRExpressionCollector;
|
||||
import net.sf.jasperreports.engine.JRHyperlink;
|
||||
import net.sf.jasperreports.engine.JRHyperlinkHelper;
|
||||
import net.sf.jasperreports.engine.JRPrintHyperlink;
|
||||
import net.sf.jasperreports.engine.JRRuntimeException;
|
||||
import net.sf.jasperreports.engine.design.JRVerifier;
|
||||
import net.sf.jasperreports.engine.fill.JRCalculator;
|
||||
import net.sf.jasperreports.engine.fill.JRExpressionEvalException;
|
||||
import net.sf.jasperreports.engine.fill.JRFillChartDataset;
|
||||
import net.sf.jasperreports.engine.fill.JRFillExpressionEvaluator;
|
||||
import net.sf.jasperreports.engine.fill.JRFillHyperlinkHelper;
|
||||
import net.sf.jasperreports.engine.fill.JRFillObjectFactory;
|
||||
import org.jfree.data.general.Dataset;
|
||||
import org.jfree.data.xy.DefaultHighLowDataset;
|
||||
|
||||
public class JRFillHighLowDataset extends JRFillChartDataset implements JRHighLowDataset {
|
||||
private String series = null;
|
||||
|
||||
private List elements = new ArrayList();
|
||||
|
||||
private Date date = null;
|
||||
|
||||
private Number high = null;
|
||||
|
||||
private Number low = null;
|
||||
|
||||
private Number open = null;
|
||||
|
||||
private Number close = null;
|
||||
|
||||
private Number volume = null;
|
||||
|
||||
private JRPrintHyperlink itemHyperlink;
|
||||
|
||||
private List itemHyperlinks;
|
||||
|
||||
public JRFillHighLowDataset(JRHighLowDataset dataset, JRFillObjectFactory factory) {
|
||||
super((JRChartDataset)dataset, factory);
|
||||
}
|
||||
|
||||
protected void customInitialize() {
|
||||
this.elements = new ArrayList();
|
||||
this.itemHyperlinks = new ArrayList();
|
||||
}
|
||||
|
||||
protected void customEvaluate(JRCalculator calculator) throws JRExpressionEvalException {
|
||||
this.series = (String)calculator.evaluate(getSeriesExpression());
|
||||
this.date = (Date)calculator.evaluate(getDateExpression());
|
||||
this.high = (Number)calculator.evaluate(getHighExpression());
|
||||
this.low = (Number)calculator.evaluate(getLowExpression());
|
||||
this.open = (Number)calculator.evaluate(getOpenExpression());
|
||||
this.close = (Number)calculator.evaluate(getCloseExpression());
|
||||
this.volume = (Number)calculator.evaluate(getVolumeExpression());
|
||||
if (hasItemHyperlink())
|
||||
evaluateSectionHyperlink(calculator);
|
||||
}
|
||||
|
||||
protected void evaluateSectionHyperlink(JRCalculator calculator) throws JRExpressionEvalException {
|
||||
try {
|
||||
this.itemHyperlink = JRFillHyperlinkHelper.evaluateHyperlink(getItemHyperlink(), (JRFillExpressionEvaluator)calculator, (byte)3);
|
||||
} catch (JRExpressionEvalException e) {
|
||||
throw e;
|
||||
} catch (JRException e) {
|
||||
throw new JRRuntimeException(e);
|
||||
}
|
||||
}
|
||||
|
||||
protected void customIncrement() {
|
||||
this.elements.add(new HighLowElement(this.date, this.high, this.low, this.open, this.close, this.volume));
|
||||
if (hasItemHyperlink())
|
||||
this.itemHyperlinks.add(this.itemHyperlink);
|
||||
}
|
||||
|
||||
public Dataset getCustomDataset() {
|
||||
int size = this.elements.size();
|
||||
if (size > 0) {
|
||||
Date[] dateArray = new Date[size];
|
||||
double[] highArray = new double[size];
|
||||
double[] lowArray = new double[size];
|
||||
double[] openArray = new double[size];
|
||||
double[] closeArray = new double[size];
|
||||
double[] volumeArray = new double[size];
|
||||
for (int i = 0; i < this.elements.size(); i++) {
|
||||
HighLowElement bean = this.elements.get(i);
|
||||
dateArray[i] = new Date(bean.getDate().getTime());
|
||||
highArray[i] = bean.getHigh().doubleValue();
|
||||
lowArray[i] = bean.getLow().doubleValue();
|
||||
openArray[i] = bean.getOpen().doubleValue();
|
||||
closeArray[i] = bean.getClose().doubleValue();
|
||||
volumeArray[i] = bean.getVolume().doubleValue();
|
||||
}
|
||||
return (Dataset)new DefaultHighLowDataset(this.series, dateArray, highArray, lowArray, openArray, closeArray, volumeArray);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
public JRExpression getSeriesExpression() {
|
||||
return ((JRHighLowDataset)this.parent).getSeriesExpression();
|
||||
}
|
||||
|
||||
public JRExpression getDateExpression() {
|
||||
return ((JRHighLowDataset)this.parent).getDateExpression();
|
||||
}
|
||||
|
||||
public JRExpression getHighExpression() {
|
||||
return ((JRHighLowDataset)this.parent).getHighExpression();
|
||||
}
|
||||
|
||||
public JRExpression getLowExpression() {
|
||||
return ((JRHighLowDataset)this.parent).getLowExpression();
|
||||
}
|
||||
|
||||
public JRExpression getOpenExpression() {
|
||||
return ((JRHighLowDataset)this.parent).getOpenExpression();
|
||||
}
|
||||
|
||||
public JRExpression getCloseExpression() {
|
||||
return ((JRHighLowDataset)this.parent).getCloseExpression();
|
||||
}
|
||||
|
||||
public JRExpression getVolumeExpression() {
|
||||
return ((JRHighLowDataset)this.parent).getVolumeExpression();
|
||||
}
|
||||
|
||||
private static class HighLowElement {
|
||||
Date date;
|
||||
|
||||
Number high;
|
||||
|
||||
Number low;
|
||||
|
||||
Number open;
|
||||
|
||||
Number close;
|
||||
|
||||
Number volume;
|
||||
|
||||
public HighLowElement(Date date, Number high, Number low, Number open, Number close, Number volume) {
|
||||
if (date == null)
|
||||
throw new JRRuntimeException("Date value is null in high-low series.");
|
||||
this.date = date;
|
||||
if (high == null)
|
||||
throw new JRRuntimeException("High value is null in high-low series.");
|
||||
this.high = high;
|
||||
if (low == null)
|
||||
throw new JRRuntimeException("Low value is null in high-low series.");
|
||||
this.low = low;
|
||||
if (open == null)
|
||||
throw new JRRuntimeException("Open value is null in high-low series.");
|
||||
this.open = open;
|
||||
if (close == null)
|
||||
throw new JRRuntimeException("Close value is null in high-low series.");
|
||||
this.close = close;
|
||||
if (volume == null)
|
||||
throw new JRRuntimeException("Volume value is null in high-low series.");
|
||||
this.volume = volume;
|
||||
}
|
||||
|
||||
public Date getDate() {
|
||||
return this.date;
|
||||
}
|
||||
|
||||
public void setDate(Date date) {
|
||||
this.date = date;
|
||||
}
|
||||
|
||||
public Number getHigh() {
|
||||
return this.high;
|
||||
}
|
||||
|
||||
public void setHigh(Number high) {
|
||||
this.high = high;
|
||||
}
|
||||
|
||||
public Number getLow() {
|
||||
return this.low;
|
||||
}
|
||||
|
||||
public void setLow(Number low) {
|
||||
this.low = low;
|
||||
}
|
||||
|
||||
public Number getOpen() {
|
||||
return this.open;
|
||||
}
|
||||
|
||||
public void setOpen(Number open) {
|
||||
this.open = open;
|
||||
}
|
||||
|
||||
public Number getClose() {
|
||||
return this.close;
|
||||
}
|
||||
|
||||
public void setClose(Number close) {
|
||||
this.close = close;
|
||||
}
|
||||
|
||||
public Number getVolume() {
|
||||
return this.volume;
|
||||
}
|
||||
|
||||
public void setVolume(Number volume) {
|
||||
this.volume = volume;
|
||||
}
|
||||
}
|
||||
|
||||
public byte getDatasetType() {
|
||||
return 7;
|
||||
}
|
||||
|
||||
public void collectExpressions(JRExpressionCollector collector) {
|
||||
collector.collect(this);
|
||||
}
|
||||
|
||||
public JRHyperlink getItemHyperlink() {
|
||||
return ((JRHighLowDataset)this.parent).getItemHyperlink();
|
||||
}
|
||||
|
||||
public boolean hasItemHyperlink() {
|
||||
return !JRHyperlinkHelper.isEmpty(getItemHyperlink());
|
||||
}
|
||||
|
||||
public List getItemHyperlinks() {
|
||||
return this.itemHyperlinks;
|
||||
}
|
||||
|
||||
public void validate(JRVerifier verifier) {
|
||||
verifier.verify(this);
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user