public class DynamicTimeSeriesCollection extends AbstractIntervalXYDataset implements IntervalXYDataset, DomainInfo, RangeInfo
Like FastTimeSeriesCollection, this class is a functional replacement for JFreeChart's TimeSeriesCollection _and_ TimeSeries classes. FastTimeSeriesCollection is appropriate for a fixed time range; for real-time applications this subclass adds the ability to append new data and discard the oldest. In this class, the arrays used in FastTimeSeriesCollection become FIFO's. NOTE:As presented here, all data is assumed >= 0, an assumption which is embodied only in methods associated with interface RangeInfo.
Modifier and Type | Class and Description |
---|---|
protected class |
DynamicTimeSeriesCollection.ValueSequence
A wrapper for a fixed array of float values.
|
Modifier and Type | Field and Description |
---|---|
static int |
END
Useful constant for controlling the x-value returned for a time period.
|
protected int |
historyCount
The history count.
|
static int |
MIDDLE
Useful constant for controlling the x-value returned for a time period.
|
protected RegularTimePeriod[] |
pointsInTime
Storage for the x-values.
|
static int |
START
Useful constant for controlling the x-value returned for a time
period.
|
protected DynamicTimeSeriesCollection.ValueSequence[] |
valueHistory
An array for storing the objects that represent each series.
|
protected java.util.Calendar |
workingCalendar
A working calendar (to recycle)
|
Constructor and Description |
---|
DynamicTimeSeriesCollection(int nSeries,
int nMoments)
Constructs a dataset with capacity for N series, tied to default
timezone.
|
DynamicTimeSeriesCollection(int nSeries,
int nMoments,
RegularTimePeriod timeSample)
Creates a new dataset.
|
DynamicTimeSeriesCollection(int nSeries,
int nMoments,
RegularTimePeriod timeSample,
java.util.TimeZone zone)
Creates a new dataset.
|
DynamicTimeSeriesCollection(int nSeries,
int nMoments,
java.util.TimeZone zone)
Constructs an empty dataset, tied to a specific timezone.
|
Modifier and Type | Method and Description |
---|---|
void |
addSeries(float[] values,
int seriesNumber,
java.lang.Comparable seriesKey)
Adds a series to the dataset.
|
void |
addValue(int seriesNumber,
int index,
float value)
Adds a value to a series.
|
RegularTimePeriod |
advanceTime()
Adjust the array offset as needed when a new time-period is added:
Increments the indices "oldestAt" and "newestAt", mod(array length),
zeroes the series values at newestAt, returns the new TimePeriod.
|
void |
appendData(float[] newData)
Appends new data.
|
void |
appendData(float[] newData,
int insertionIndex,
int refresh)
Appends data at specified index, for loading up with data from file(s).
|
protected void |
findDomainLimits()
Finds the domain limits.
|
protected double |
findMaxValue()
Returns the maximum value.
|
protected void |
fireSeriesChanged()
Sends a
SeriesChangeEvent to all registered listeners. |
Range |
getDomainBounds(boolean includeInterval)
Returns the range of the values in this dataset's domain.
|
double |
getDomainLowerBound(boolean includeInterval)
Returns the minimum x-value in the dataset.
|
double |
getDomainUpperBound(boolean includeInterval)
Returns the maximum x-value in the dataset.
|
java.lang.Number |
getEndX(int series,
int item)
Returns the end x-value.
|
java.lang.Number |
getEndY(int series,
int item)
Returns the end y-value.
|
int |
getItemCount(int series)
Returns the number of items in a series.
|
int |
getNewestIndex()
Returns the index of the newest data item.
|
RegularTimePeriod |
getNewestTime()
Returns the newest time.
|
int |
getOldestIndex()
Returns the index of the oldest data item.
|
RegularTimePeriod |
getOldestTime()
Returns the oldest time.
|
int |
getPosition()
Returns the x position type (START, MIDDLE or END).
|
Range |
getRangeBounds(boolean includeInterval)
Returns the value range.
|
double |
getRangeLowerBound(boolean includeInterval)
Returns the minimum range value.
|
double |
getRangeUpperBound(boolean includeInterval)
Returns the maximum range value.
|
int |
getSeriesCount()
Returns the number of series in the collection.
|
java.lang.Comparable |
getSeriesKey(int series)
Returns the key for a series.
|
java.lang.Number |
getStartX(int series,
int item)
Returns the start x-value.
|
java.lang.Number |
getStartY(int series,
int item)
Returns the start y-value.
|
java.lang.Number |
getX(int series,
int item)
Returns the x-value.
|
java.lang.Number |
getY(int series,
int item)
Returns the y-value.
|
double |
getYValue(int series,
int item)
Returns the y-value.
|
void |
invalidateRangeInfo()
Invalidates the range info.
|
int |
offsetFromNewest(int delta)
Returns the actual index to a time offset by "delta" from newestAt.
|
int |
offsetFromOldest(int delta)
??
|
void |
setPosition(int position)
Sets the x position type (START, MIDDLE or END).
|
void |
setSeriesKey(int seriesNumber,
java.lang.Comparable key)
Sets the name of a series.
|
long |
setTimeBase(RegularTimePeriod start)
Fill the pointsInTime with times using TimePeriod.next():
Will silently return if the time array was already populated.
|
protected int |
translateGet(int toFetch)
Re-map an index, for use in retrieving data.
|
protected int |
wrapOffset(int protoIndex)
??
|
getEndXValue, getEndYValue, getStartXValue, getStartYValue
getDomainOrder, getXValue
indexOf, seriesChanged
addChangeListener, clone, fireDatasetChanged, getGroup, getNotify, hasListener, notifyListeners, removeChangeListener, setGroup, setNotify, validateObject
equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
getEndXValue, getEndYValue, getStartXValue, getStartYValue
getDomainOrder, getXValue
indexOf
addChangeListener, getGroup, removeChangeListener, setGroup
public static final int START
public static final int MIDDLE
public static final int END
protected int historyCount
protected RegularTimePeriod[] pointsInTime
protected DynamicTimeSeriesCollection.ValueSequence[] valueHistory
protected java.util.Calendar workingCalendar
public DynamicTimeSeriesCollection(int nSeries, int nMoments)
nSeries
- the number of series to be accommodated.nMoments
- the number of TimePeriods to be spanned.public DynamicTimeSeriesCollection(int nSeries, int nMoments, java.util.TimeZone zone)
nSeries
- the number of series to be accommodatednMoments
- the number of TimePeriods to be spannedzone
- the timezone.public DynamicTimeSeriesCollection(int nSeries, int nMoments, RegularTimePeriod timeSample)
nSeries
- the number of series.nMoments
- the number of items per series.timeSample
- a time period sample.public DynamicTimeSeriesCollection(int nSeries, int nMoments, RegularTimePeriod timeSample, java.util.TimeZone zone)
nSeries
- the number of series.nMoments
- the number of items per series.timeSample
- a time period sample.zone
- the time zone.public long setTimeBase(RegularTimePeriod start)
start
- the start.protected void findDomainLimits()
public int getPosition()
public void setPosition(int position)
position
- The x position type.public void addSeries(float[] values, int seriesNumber, java.lang.Comparable seriesKey)
values
- the y-values.seriesNumber
- the series index (zero-based).seriesKey
- the series key.
Use this as-is during setup only, or add the synchronized keyword around
the copy loop.public void setSeriesKey(int seriesNumber, java.lang.Comparable key)
seriesNumber
- the series.key
- the new key.public void addValue(int seriesNumber, int index, float value)
seriesNumber
- the series index.index
- ??.value
- the value.public int getSeriesCount()
getSeriesCount
in interface SeriesDataset
getSeriesCount
in class AbstractSeriesDataset
public int getItemCount(int series)
For this implementation, all series have the same number of items.
getItemCount
in interface XYDataset
series
- the series index (zero-based).protected int translateGet(int toFetch)
toFetch
- the index.public int offsetFromNewest(int delta)
delta
- the delta.public int offsetFromOldest(int delta)
delta
- ??protected int wrapOffset(int protoIndex)
protoIndex
- the index.public RegularTimePeriod advanceTime()
public void invalidateRangeInfo()
protected double findMaxValue()
public int getOldestIndex()
public int getNewestIndex()
public void appendData(float[] newData)
newData
- the data.public void appendData(float[] newData, int insertionIndex, int refresh)
newData
- the datainsertionIndex
- the index value at which to put itrefresh
- value of n in "refresh the display on every nth call"
(ignored if <= 0 )public RegularTimePeriod getNewestTime()
public RegularTimePeriod getOldestTime()
public java.lang.Number getX(int series, int item)
public double getYValue(int series, int item)
getYValue
in interface XYDataset
getYValue
in class AbstractXYDataset
series
- the series index (zero-based).item
- the item index (zero-based).public java.lang.Number getY(int series, int item)
public java.lang.Number getStartX(int series, int item)
getStartX
in interface IntervalXYDataset
series
- the series index (zero-based).item
- the item index (zero-based).public java.lang.Number getEndX(int series, int item)
getEndX
in interface IntervalXYDataset
series
- the series index (zero-based).item
- the item index (zero-based).public java.lang.Number getStartY(int series, int item)
getStartY
in interface IntervalXYDataset
series
- the series index (zero-based).item
- the item index (zero-based).public java.lang.Number getEndY(int series, int item)
getEndY
in interface IntervalXYDataset
series
- the series index (zero-based).item
- the item index (zero-based).public java.lang.Comparable getSeriesKey(int series)
getSeriesKey
in interface SeriesDataset
getSeriesKey
in class AbstractSeriesDataset
series
- the series index (zero-based).protected void fireSeriesChanged()
SeriesChangeEvent
to all registered listeners.public double getDomainLowerBound(boolean includeInterval)
getDomainLowerBound
in interface DomainInfo
includeInterval
- a flag that determines whether or not the
x-interval is taken into account.public double getDomainUpperBound(boolean includeInterval)
getDomainUpperBound
in interface DomainInfo
includeInterval
- a flag that determines whether or not the
x-interval is taken into account.public Range getDomainBounds(boolean includeInterval)
getDomainBounds
in interface DomainInfo
includeInterval
- a flag that determines whether or not the
x-interval is taken into account.public double getRangeLowerBound(boolean includeInterval)
getRangeLowerBound
in interface RangeInfo
includeInterval
- a flag that determines whether or not the
y-interval is taken into account.public double getRangeUpperBound(boolean includeInterval)
getRangeUpperBound
in interface RangeInfo
includeInterval
- a flag that determines whether or not the
y-interval is taken into account.public Range getRangeBounds(boolean includeInterval)
getRangeBounds
in interface RangeInfo
includeInterval
- a flag that determines whether or not the
y-interval is taken into account.