/* * JABM - Java Agent-Based Modeling Toolkit * Copyright (C) 2013 Steve Phelps * * 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. */ package net.sourceforge.jabm.report; import java.io.Serializable; import java.util.ArrayList; import java.util.Collection; import java.util.HashMap; import java.util.Iterator; import org.apache.commons.math3.stat.Frequency; import org.jfree.data.DomainOrder; import org.jfree.data.general.AbstractDataset; import org.jfree.data.xy.XYDataset; public class FrequencyByTimeDataset extends AbstractDataset implements XYDataset, Serializable { protected ArrayList<Frequency> frequencyByTime; protected int t = 0; protected HashMap<Integer,Comparable<?>> categories; protected int categoryCount = 0; public FrequencyByTimeDataset() { super(); frequencyByTime = new ArrayList<Frequency>(); categories = new HashMap<Integer,Comparable<?>>(); } public void addNewSample(Frequency f) { frequencyByTime.add(f); updateCategories(f); t++; fireDatasetChanged(); } public void updateCategories(Frequency f) { @SuppressWarnings("rawtypes") Iterator<Comparable<?>> it = f.valuesIterator(); while (it.hasNext()) { Comparable<?> category = it.next(); registerCategory(category); } } public void registerCategory(Comparable<?> category) { if (!categories.containsValue(category)) { categories.put(categoryCount++, category); } } public void fireDatasetChanged() { super.fireDatasetChanged(); } public DomainOrder getDomainOrder() { // TODO Auto-generated method stub return null; } public int getItemCount(int series) { return t; } public Number getX(int series, int item) { return item; } public double getXValue(int series, int item) { return item; } public Number getY(int series, int item) { Comparable<?> category = categories.get(series); assert category != null; return frequencyByTime.get(item).getCount(category); } public double getYValue(int series, int item) { return getY(series, item).doubleValue(); } public int getSeriesCount() { return categoryCount; } @SuppressWarnings("rawtypes") public Comparable getSeriesKey(int series) { Object category = categories.get(series); return category.toString(); } @SuppressWarnings("rawtypes") public int indexOf(Comparable seriesKey) { // TODO Auto-generated method stub return 0; } public int size() { return t; } public void initialiseCategories(Collection<Comparable<?>> initCategories) { for (Comparable<?> category : initCategories) { registerCategory(category); } } }