001/* *********************************************************************** * 002 * project: org.matsim.* 003 * * 004 * *********************************************************************** * 005 * * 006 * copyright : (C) 2013 by the members listed in the COPYING, * 007 * LICENSE and WARRANTY file. * 008 * email : info at matsim dot org * 009 * * 010 * *********************************************************************** * 011 * * 012 * This program is free software; you can redistribute it and/or modify * 013 * it under the terms of the GNU General Public License as published by * 014 * the Free Software Foundation; either version 2 of the License, or * 015 * (at your option) any later version. * 016 * See also COPYING, LICENSE and WARRANTY file * 017 * * 018 * *********************************************************************** */ 019 020package org.matsim.contrib.util.chart; 021 022import java.util.*; 023 024import org.jfree.data.general.DatasetChangeEvent; 025import org.jfree.data.xy.*; 026import org.matsim.api.core.v01.Coord; 027 028/** 029 * @author michalm 030 */ 031@SuppressWarnings("serial") 032public class CoordDataset extends AbstractXYDataset implements XYDataset { 033 public interface CoordSource { 034 int getCount(); 035 036 Coord getCoord(int item); 037 } 038 039 private List<Comparable<String>> seriesKeys; 040 private List<CoordSource> seriesList; 041 042 public CoordDataset() { 043 seriesKeys = new ArrayList<>(); 044 seriesList = new ArrayList<>(); 045 } 046 047 @Override 048 public int getSeriesCount() { 049 return seriesList.size(); 050 } 051 052 @Override 053 public Comparable<String> getSeriesKey(int series) { 054 return seriesKeys.get(series); 055 } 056 057 @Override 058 public int getItemCount(int series) { 059 return seriesList.get(series).getCount(); 060 } 061 062 @Override 063 public Number getX(int series, int item) { 064 return new Double(getXValue(series, item)); 065 } 066 067 @Override 068 public double getXValue(int series, int item) { 069 return getItem(series, item).getX(); 070 } 071 072 @Override 073 public Number getY(int series, int item) { 074 return new Double(getYValue(series, item)); 075 } 076 077 @Override 078 public double getYValue(int series, int item) { 079 return getItem(series, item).getY(); 080 } 081 082 public String getText(int series, int item) { 083 return getItem(series, item).toString(); 084 } 085 086 public Coord getItem(int series, int item) { 087 return seriesList.get(series).getCoord(item); 088 } 089 090 public void addSeries(String seriesKey, CoordSource data) { 091 if (seriesKey == null) { 092 throw new IllegalArgumentException("The 'seriesKey' cannot be null."); 093 } 094 095 if (data == null) { 096 throw new IllegalArgumentException("The 'data' is null."); 097 } 098 099 int seriesIndex = indexOf(seriesKey); 100 101 if (seriesIndex == -1) { // add a new series 102 seriesKeys.add(seriesKey); 103 seriesList.add(data); 104 } else { // replace an existing series 105 seriesList.set(seriesIndex, data); 106 } 107 108 notifyListeners(new DatasetChangeEvent(this, this)); 109 } 110 111 public void removeSeries(String seriesKey) { 112 int seriesIndex = indexOf(seriesKey); 113 114 if (seriesIndex >= 0) { 115 seriesKeys.remove(seriesIndex); 116 seriesList.remove(seriesIndex); 117 118 notifyListeners(new DatasetChangeEvent(this, this)); 119 } 120 } 121}