/*
* Copyright (c) 2012 Patrick Meyer
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package com.itemanalysis.jmetrik.graph.histogram;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import com.itemanalysis.psychometrics.histogram.Histogram;
import org.jfree.data.DomainOrder;
import org.jfree.data.general.AbstractDataset;
import org.jfree.data.xy.IntervalXYDataset;
public class HistogramChartDataset extends AbstractDataset implements IntervalXYDataset{
private HashMap<Comparable, Histogram> histogram = null;
private ArrayList<Comparable> seriesKeys = null;
public HistogramChartDataset(){
super();
histogram = new HashMap<Comparable, Histogram>();
seriesKeys = new ArrayList<Comparable>();
}
public void addHistogram(Comparable seriesKey, Histogram histogram){
this.histogram.put(seriesKey, histogram);
this.seriesKeys.add(seriesKey);
}
public Histogram getHistogram(Comparable seriesKey){
return histogram.get(seriesKey);
}
public Comparable getSeriesKey(int series){
return seriesKeys.get(series);
}
public Number getX(int series, int item){
Histogram h = histogram.get(getSeriesKey(series));
Double d = h.getPointAt(item);
// Double d = new Double(h.getBinAt(item).getMidPoint());
return d;
}
public double getXValue(int series, int item){
Double d = (Double)getX(series, item);
return d.doubleValue();
}
public Number getY(int series, int item) {
Histogram h = histogram.get(getSeriesKey(series));
Double d = null;
// d = new Double(h.getBinAt(item).getFrequency());
d = new Double(h.getValueAt(item));
return d;
}
public double getYValue(int series, int item){
Double d = (Double)getY(series, item);
return d.doubleValue();
}
public Number getStartX(int series, int item){
Histogram h = histogram.get(seriesKeys.get(series));
Double d = null;
d = new Double(h.getBinAt(item).getLowerBound());
return d;
}
public Number getEndX(int series, int item){
Histogram h = histogram.get(seriesKeys.get(series));
Double d = null;
d = new Double(h.getBinAt(item).getUpperBound());
return d;
}
public double getStartXValue(int series, int item){
Double d = (Double)getStartX(series, item);
return d.doubleValue();
}
public double getEndXValue(int series, int item){
Double d = (Double)getEndX(series, item);
return d.doubleValue();
}
public Number getStartY(int series, int item){
return getY(series, item);
}
public Number getEndY(int series, int item){
return getY(series, item);
}
public double getStartYValue(int series, int item){
Double d = (Double)getStartY(series, item);
return d.doubleValue();
}
public double getEndYValue(int series, int item){
Double d = (Double)getEndY(series, item);
return d.doubleValue();
}
public int getItemCount(int series){
Histogram h = histogram.get(getSeriesKey(series));
return h.getNumberOfBins();
}
public DomainOrder getDomainOrder(){
return DomainOrder.NONE;
}
public int getSeriesCount(){
return seriesKeys.size();
}
public int indexOf(Comparable seriesKey){
int seriesCount = getSeriesCount();
for(int s=0; s<seriesCount; s++){
if(getSeriesKey(s).equals(seriesKey)){
return s;
}
}
return -1;
}
public Iterator<Comparable> iterator(){
return histogram.keySet().iterator();
}
}