package jas.hist;
import jas.plot.DataArea;
import jas.plot.DateAxis;
import jas.plot.DoubleAxis;
import jas.plot.Legend;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.util.TimeZone;
final class DateDataManager extends BinnedDataManager
{
DateDataManager(JASHist plot, DataArea da, Legend l, StatisticsBlock stats, int bins)
{
super(plot, da,l,stats,bins);
// Configure the Axes
xAxis = new DateAxis();
DoubleAxis yAxis = new DoubleAxis();
yAxis.setUseSuggestedRange(true);
xm.setDataManager(this,true, xAxis);
ym[0].setDataManager(this,false,yAxis);
new DateAxisListener(xm);
xm.setBins(bins);
//createYAxis(1); // todo: something better
}
JASHistData add(DataSource data)
{
if (data instanceof Rebinnable1DHistogramData)
{
Rebinnable1DHistogramData d = (Rebinnable1DHistogramData) data;
// We only support adding items with date axis
if (d.getAxisType() != d.DATE) throw new DataManagerException("Incompatible data type for axis");
}
else
{
XYDataSource d = (XYDataSource) data;
// We only support adding items with date axis
if (d.getAxisType() != d.DATE) throw new DataManagerException("Incompatible data type for axis");
}
JASHistData jhd = super.add(data);
TimeZone tz = jhd.getStyle().getTimeZone();
if (tz != null) xAxis.setTimeZone(tz);
return jhd;
}
void styleUpdate(JASHistData data)
{
TimeZone tz = data.getStyle().getTimeZone();
if (tz != null) xAxis.setTimeZone(tz);
super.styleUpdate(data);
}
private void readObject(ObjectInputStream in) throws IOException, ClassNotFoundException
{
in.defaultReadObject();
new DateAxisListener(xm);
}
protected void calcMinMaxBins(double x1, double x2)
{
long iLow = (long) (x1*1000);
long iHigh = (long) (x2*1000);
long oldXMin = xAxis.getAxisMin();
long oldXMax = xAxis.getAxisMax();
if (iLow != oldXMin || iHigh != oldXMax)
{
xAxis.setMin(iLow);
xAxis.setMax(iHigh);
xAxis.getAxis().invalidate();
}
}
private DateAxis xAxis;
}