package net.sf.jasperreports.charts.design;

import net.sf.jasperreports.charts.JRHighLowDataset;
import net.sf.jasperreports.engine.JRChartDataset;
import net.sf.jasperreports.engine.JRExpression;
import net.sf.jasperreports.engine.JRExpressionCollector;
import net.sf.jasperreports.engine.JRHyperlink;
import net.sf.jasperreports.engine.design.JRDesignChartDataset;
import net.sf.jasperreports.engine.design.JRVerifier;

public class JRDesignHighLowDataset extends JRDesignChartDataset implements JRHighLowDataset {
  private static final long serialVersionUID = 10200L;
  
  public static final String PROPERTY_CLOSE_EXPRESSION = "closeExpression";
  
  public static final String PROPERTY_DATE_EXPRESSION = "dateExpression";
  
  public static final String PROPERTY_HIGH_EXPRESSION = "highExpression";
  
  public static final String PROPERTY_ITEM_HYPERLINK = "itemHyperlink";
  
  public static final String PROPERTY_LOW_EXPRESSION = "lowExpression";
  
  public static final String PROPERTY_OPEN_EXPRESSION = "openExpression";
  
  public static final String PROPERTY_SERIES_EXPRESSION = "seriesExpression";
  
  public static final String PROPERTY_VOLUME_EXPRESSION = "volumeExpression";
  
  protected JRExpression seriesExpression;
  
  protected JRExpression dateExpression;
  
  protected JRExpression highExpression;
  
  protected JRExpression lowExpression;
  
  protected JRExpression openExpression;
  
  protected JRExpression closeExpression;
  
  protected JRExpression volumeExpression;
  
  private JRHyperlink itemHyperlink;
  
  public JRDesignHighLowDataset(JRChartDataset dataset) {
    super(dataset);
  }
  
  public JRExpression getSeriesExpression() {
    return this.seriesExpression;
  }
  
  public void setSeriesExpression(JRExpression seriesExpression) {
    Object old = this.seriesExpression;
    this.seriesExpression = seriesExpression;
    getEventSupport().firePropertyChange("seriesExpression", old, this.seriesExpression);
  }
  
  public JRExpression getDateExpression() {
    return this.dateExpression;
  }
  
  public void setDateExpression(JRExpression dateExpression) {
    Object old = this.dateExpression;
    this.dateExpression = dateExpression;
    getEventSupport().firePropertyChange("dateExpression", old, this.dateExpression);
  }
  
  public JRExpression getHighExpression() {
    return this.highExpression;
  }
  
  public void setHighExpression(JRExpression highExpression) {
    Object old = this.highExpression;
    this.highExpression = highExpression;
    getEventSupport().firePropertyChange("highExpression", old, this.highExpression);
  }
  
  public JRExpression getLowExpression() {
    return this.lowExpression;
  }
  
  public void setLowExpression(JRExpression lowExpression) {
    Object old = this.lowExpression;
    this.lowExpression = lowExpression;
    getEventSupport().firePropertyChange("lowExpression", old, this.lowExpression);
  }
  
  public JRExpression getOpenExpression() {
    return this.openExpression;
  }
  
  public void setOpenExpression(JRExpression openExpression) {
    Object old = this.openExpression;
    this.openExpression = openExpression;
    getEventSupport().firePropertyChange("openExpression", old, this.openExpression);
  }
  
  public JRExpression getCloseExpression() {
    return this.closeExpression;
  }
  
  public void setCloseExpression(JRExpression closeExpression) {
    Object old = this.closeExpression;
    this.closeExpression = closeExpression;
    getEventSupport().firePropertyChange("closeExpression", old, this.closeExpression);
  }
  
  public JRExpression getVolumeExpression() {
    return this.volumeExpression;
  }
  
  public void setVolumeExpression(JRExpression volumeExpression) {
    Object old = this.volumeExpression;
    this.volumeExpression = volumeExpression;
    getEventSupport().firePropertyChange("volumeExpression", old, this.volumeExpression);
  }
  
  public byte getDatasetType() {
    return 7;
  }
  
  public void collectExpressions(JRExpressionCollector collector) {
    collector.collect(this);
  }
  
  public JRHyperlink getItemHyperlink() {
    return this.itemHyperlink;
  }
  
  public void setItemHyperlink(JRHyperlink itemHyperlink) {
    Object old = this.itemHyperlink;
    this.itemHyperlink = itemHyperlink;
    getEventSupport().firePropertyChange("itemHyperlink", old, this.itemHyperlink);
  }
  
  public void validate(JRVerifier verifier) {
    verifier.verify(this);
  }
  
  public Object clone() {
    JRDesignHighLowDataset clone = (JRDesignHighLowDataset)super.clone();
    if (this.seriesExpression != null)
      clone.seriesExpression = (JRExpression)this.seriesExpression.clone(); 
    if (this.dateExpression != null)
      clone.dateExpression = (JRExpression)this.dateExpression.clone(); 
    if (this.highExpression != null)
      clone.highExpression = (JRExpression)this.highExpression.clone(); 
    if (this.lowExpression != null)
      clone.lowExpression = (JRExpression)this.lowExpression.clone(); 
    if (this.openExpression != null)
      clone.openExpression = (JRExpression)this.openExpression.clone(); 
    if (this.closeExpression != null)
      clone.closeExpression = (JRExpression)this.closeExpression.clone(); 
    if (this.volumeExpression != null)
      clone.volumeExpression = (JRExpression)this.volumeExpression.clone(); 
    if (this.itemHyperlink != null)
      clone.itemHyperlink = (JRHyperlink)this.itemHyperlink.clone(); 
    return clone;
  }
}
