package net.sf.jasperreports.charts.base;

import java.awt.Color;
import net.sf.jasperreports.charts.JRCandlestickPlot;
import net.sf.jasperreports.charts.JRTimeAxisFormat;
import net.sf.jasperreports.charts.JRValueAxisFormat;
import net.sf.jasperreports.engine.JRChart;
import net.sf.jasperreports.engine.JRChartPlot;
import net.sf.jasperreports.engine.JRExpression;
import net.sf.jasperreports.engine.JRExpressionCollector;
import net.sf.jasperreports.engine.JRFont;
import net.sf.jasperreports.engine.JRStyleContainer;
import net.sf.jasperreports.engine.base.JRBaseChartPlot;
import net.sf.jasperreports.engine.base.JRBaseFont;
import net.sf.jasperreports.engine.base.JRBaseObjectFactory;
import net.sf.jasperreports.engine.util.JRStyleResolver;

public class JRBaseCandlestickPlot extends JRBaseChartPlot implements JRCandlestickPlot {
  private static final long serialVersionUID = 10200L;
  
  public static final String PROPERTY_SHOW_VOLUME = "showVolume";
  
  protected JRExpression timeAxisLabelExpression = null;
  
  protected JRFont timeAxisLabelFont = null;
  
  protected Color timeAxisLabelColor = null;
  
  protected JRFont timeAxisTickLabelFont = null;
  
  protected Color timeAxisTickLabelColor = null;
  
  protected String timeAxisTickLabelMask = null;
  
  protected Color timeAxisLineColor = null;
  
  protected JRExpression valueAxisLabelExpression = null;
  
  protected JRFont valueAxisLabelFont = null;
  
  protected Color valueAxisLabelColor = null;
  
  protected JRFont valueAxisTickLabelFont = null;
  
  protected Color valueAxisTickLabelColor = null;
  
  protected String valueAxisTickLabelMask = null;
  
  protected Color valueAxisLineColor = null;
  
  protected boolean isShowVolume = true;
  
  protected JRBaseCandlestickPlot(JRChartPlot candlestickPlot, JRChart chart) {
    super(candlestickPlot, chart);
  }
  
  public JRBaseCandlestickPlot(JRCandlestickPlot candlestickPlot, JRBaseObjectFactory factory) {
    super((JRChartPlot)candlestickPlot, factory);
    this.isShowVolume = candlestickPlot.isShowVolume();
    this.timeAxisLabelExpression = factory.getExpression(candlestickPlot.getTimeAxisLabelExpression());
    this.timeAxisLabelFont = (JRFont)new JRBaseFont(null, null, (JRStyleContainer)candlestickPlot.getChart(), candlestickPlot.getTimeAxisLabelFont());
    this.timeAxisLabelColor = candlestickPlot.getOwnTimeAxisLabelColor();
    this.timeAxisTickLabelFont = (JRFont)new JRBaseFont(null, null, (JRStyleContainer)candlestickPlot.getChart(), candlestickPlot.getTimeAxisTickLabelFont());
    this.timeAxisTickLabelColor = candlestickPlot.getOwnTimeAxisTickLabelColor();
    this.timeAxisTickLabelMask = candlestickPlot.getTimeAxisTickLabelMask();
    this.timeAxisLineColor = candlestickPlot.getTimeAxisLineColor();
    this.valueAxisLabelExpression = factory.getExpression(candlestickPlot.getValueAxisLabelExpression());
    this.valueAxisLabelFont = (JRFont)new JRBaseFont(null, null, (JRStyleContainer)candlestickPlot.getChart(), candlestickPlot.getValueAxisLabelFont());
    this.valueAxisLabelColor = candlestickPlot.getOwnValueAxisLabelColor();
    this.valueAxisTickLabelFont = (JRFont)new JRBaseFont(null, null, (JRStyleContainer)candlestickPlot.getChart(), candlestickPlot.getValueAxisTickLabelFont());
    this.valueAxisTickLabelColor = candlestickPlot.getOwnValueAxisTickLabelColor();
    this.valueAxisTickLabelMask = candlestickPlot.getValueAxisTickLabelMask();
    this.valueAxisLineColor = candlestickPlot.getValueAxisTickLabelColor();
  }
  
  public JRExpression getTimeAxisLabelExpression() {
    return this.timeAxisLabelExpression;
  }
  
  public JRFont getTimeAxisLabelFont() {
    return this.timeAxisLabelFont;
  }
  
  public Color getTimeAxisLabelColor() {
    return JRStyleResolver.getTimeAxisLabelColor((JRTimeAxisFormat)this, (JRChartPlot)this);
  }
  
  public Color getOwnTimeAxisLabelColor() {
    return this.timeAxisLabelColor;
  }
  
  public JRFont getTimeAxisTickLabelFont() {
    return this.timeAxisTickLabelFont;
  }
  
  public Color getTimeAxisTickLabelColor() {
    return JRStyleResolver.getTimeAxisTickLabelColor((JRTimeAxisFormat)this, (JRChartPlot)this);
  }
  
  public Color getOwnTimeAxisTickLabelColor() {
    return this.timeAxisTickLabelColor;
  }
  
  public String getTimeAxisTickLabelMask() {
    return this.timeAxisTickLabelMask;
  }
  
  public Color getTimeAxisLineColor() {
    return JRStyleResolver.getTimeAxisLineColor((JRTimeAxisFormat)this, (JRChartPlot)this);
  }
  
  public Color getOwnTimeAxisLineColor() {
    return this.timeAxisLineColor;
  }
  
  public JRExpression getValueAxisLabelExpression() {
    return this.valueAxisLabelExpression;
  }
  
  public JRFont getValueAxisLabelFont() {
    return this.valueAxisLabelFont;
  }
  
  public Color getValueAxisLabelColor() {
    return JRStyleResolver.getValueAxisLabelColor((JRValueAxisFormat)this, (JRChartPlot)this);
  }
  
  public Color getOwnValueAxisLabelColor() {
    return this.valueAxisLabelColor;
  }
  
  public JRFont getValueAxisTickLabelFont() {
    return this.valueAxisTickLabelFont;
  }
  
  public Color getValueAxisTickLabelColor() {
    return JRStyleResolver.getValueAxisTickLabelColor((JRValueAxisFormat)this, (JRChartPlot)this);
  }
  
  public Color getOwnValueAxisTickLabelColor() {
    return this.valueAxisTickLabelColor;
  }
  
  public String getValueAxisTickLabelMask() {
    return this.valueAxisTickLabelMask;
  }
  
  public Color getValueAxisLineColor() {
    return JRStyleResolver.getValueAxisLineColor((JRValueAxisFormat)this, (JRChartPlot)this);
  }
  
  public Color getOwnValueAxisLineColor() {
    return this.valueAxisLineColor;
  }
  
  public boolean isShowVolume() {
    return this.isShowVolume;
  }
  
  public void setShowVolume(boolean ShowVolume) {
    boolean old = this.isShowVolume;
    this.isShowVolume = ShowVolume;
    getEventSupport().firePropertyChange("showVolume", old, this.isShowVolume);
  }
  
  public void collectExpressions(JRExpressionCollector collector) {
    collector.collect(this);
  }
  
  public Object clone(JRChart parentChart) {
    JRBaseCandlestickPlot clone = (JRBaseCandlestickPlot)super.clone(parentChart);
    if (this.timeAxisLabelExpression != null)
      clone.timeAxisLabelExpression = (JRExpression)this.timeAxisLabelExpression.clone(); 
    if (this.valueAxisLabelExpression != null)
      clone.valueAxisLabelExpression = (JRExpression)this.valueAxisLabelExpression.clone(); 
    return clone;
  }
}
