package net.sf.jasperreports.charts.design;

import java.awt.Color;
import java.util.ArrayList;
import java.util.Collection;
import net.sf.jasperreports.charts.JRDataRange;
import net.sf.jasperreports.charts.JRValueDisplay;
import net.sf.jasperreports.charts.base.JRBaseMeterPlot;
import net.sf.jasperreports.charts.util.JRMeterInterval;
import net.sf.jasperreports.engine.JRChart;
import net.sf.jasperreports.engine.JRChartPlot;
import net.sf.jasperreports.engine.JRException;

public class JRDesignMeterPlot extends JRBaseMeterPlot {
  private static final long serialVersionUID = 10200L;
  
  public static final String PROPERTY_DATA_RANGE = "dataRange";
  
  public static final String PROPERTY_METER_ANGLE = "meterAngle";
  
  public static final String PROPERTY_METER_BACKGROUND_COLOR = "meterBackgroundColor";
  
  public static final String PROPERTY_NEEDLE_COLOR = "needleColor";
  
  public static final String PROPERTY_SHAPE = "shape";
  
  public static final String PROPERTY_TICK_COLOR = "tickColor";
  
  public static final String PROPERTY_TICK_INTERVAL = "tickInterval";
  
  public static final String PROPERTY_UNITS = "units";
  
  public static final String PROPERTY_VALUE_DISPLAY = "valueDisplay";
  
  public static final String PROPERTY_INTERVALS = "intervals";
  
  public JRDesignMeterPlot(JRChartPlot meterPlot, JRChart chart) {
    super(meterPlot, chart);
  }
  
  public void setDataRange(JRDataRange dataRange) throws JRException {
    Object old = this.dataRange;
    this.dataRange = dataRange;
    getEventSupport().firePropertyChange("dataRange", old, this.dataRange);
  }
  
  public void setValueDisplay(JRValueDisplay valueDisplay) {
    Object old = this.valueDisplay;
    this.valueDisplay = valueDisplay;
    getEventSupport().firePropertyChange("valueDisplay", old, this.valueDisplay);
  }
  
  public void setShape(byte shape) throws JRException {
    if (shape < 0 || shape > 2)
      throw new JRException("Unknown shape for MeterPlot"); 
    byte old = this.shape;
    this.shape = shape;
    getEventSupport().firePropertyChange("shape", old, this.shape);
  }
  
  public void addInterval(JRMeterInterval interval) {
    this.intervals.add(interval);
    getEventSupport().fireCollectionElementAddedEvent("intervals", interval, this.intervals.size() - 1);
  }
  
  public void clearIntervals() {
    setIntervals((Collection)null);
  }
  
  public void setIntervals(Collection intervals) {
    Object old = new ArrayList(this.intervals);
    this.intervals.clear();
    if (intervals != null)
      this.intervals.addAll(intervals); 
    getEventSupport().firePropertyChange("intervals", old, this.intervals);
  }
  
  public void setMeterAngle(int meterAngle) {
    int old = this.meterAngle;
    this.meterAngle = meterAngle;
    getEventSupport().firePropertyChange("meterAngle", old, this.meterAngle);
  }
  
  public void setUnits(String units) {
    Object old = this.units;
    this.units = units;
    getEventSupport().firePropertyChange("units", old, this.units);
  }
  
  public void setTickInterval(double tickInterval) {
    double old = this.tickInterval;
    this.tickInterval = tickInterval;
    getEventSupport().firePropertyChange("tickInterval", old, this.tickInterval);
  }
  
  public void setMeterBackgroundColor(Color meterBackgroundColor) {
    Object old = this.meterBackgroundColor;
    this.meterBackgroundColor = meterBackgroundColor;
    getEventSupport().firePropertyChange("meterBackgroundColor", old, this.meterBackgroundColor);
  }
  
  public void setNeedleColor(Color needleColor) {
    Object old = this.needleColor;
    this.needleColor = needleColor;
    getEventSupport().firePropertyChange("needleColor", old, this.needleColor);
  }
  
  public void setTickColor(Color tickColor) {
    Object old = this.tickColor;
    this.tickColor = tickColor;
    getEventSupport().firePropertyChange("tickColor", old, this.tickColor);
  }
}
