## org.jfree.data.time
Class DynamicTimeSeriesCollection

    java.lang.Object
      org.jfree.data.general.AbstractDataset
          org.jfree.data.general.AbstractSeriesDataset
              org.jfree.data.xy.AbstractXYDataset
                  org.jfree.data.xy.AbstractIntervalXYDataset
                      org.jfree.data.time.DynamicTimeSeriesCollection

All Implemented Interfaces:
  java.io.ObjectInputValidation, java.io.Serializable, java.lang.Cloneable, java.util.EventListener, DomainInfo, Dataset, SeriesChangeListener, SeriesDataset, RangeInfo, IntervalXYDataset, XYDataset

    public class DynamicTimeSeriesCollection

extends AbstractIntervalXYDataset
implements IntervalXYDataset, DomainInfo, RangeInfo

A dynamic dataset.

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.

Author:
  Irv Thomae.
See Also:
  Serialized Form

Nested Class Summary
`protected class` `DynamicTimeSeriesCollection.ValueSequence` A wrapper for a fixed array of float values.

Field Summary
`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 Summary
`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.

Method Summary
`void` `addSeries(float[] values, int seriesNumber, java.lang.String seriesName)` 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.String` `getSeriesName(int series)` Returns the name of 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` `setSeriesName(int seriesNumber, java.lang.String newName)` 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)` ??

Methods inherited from class org.jfree.data.xy.AbstractIntervalXYDataset
`getEndXValue, getEndYValue, getStartXValue, getStartYValue`

Methods inherited from class org.jfree.data.xy.AbstractXYDataset
`getDomainOrder, getXValue`

Methods inherited from class org.jfree.data.general.AbstractSeriesDataset
`seriesChanged`

Methods inherited from class org.jfree.data.general.AbstractDataset
`addChangeListener, clone, fireDatasetChanged, getGroup, notifyListeners, removeChangeListener, setGroup, validateObject`

Methods inherited from class java.lang.Object
`equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

Methods inherited from interface org.jfree.data.xy.IntervalXYDataset
`getEndXValue, getEndYValue, getStartXValue, getStartYValue`

Methods inherited from interface org.jfree.data.xy.XYDataset
`getDomainOrder, getXValue`

Methods inherited from interface org.jfree.data.general.Dataset
`addChangeListener, getGroup, removeChangeListener, setGroup`

Field Detail

### START

    public static final int START

  Useful constant for controlling the x-value returned for a time period.

  See Also:
    Constant Field Values

### MIDDLE

    public static final int MIDDLE

  Useful constant for controlling the x-value returned for a time period.

  See Also:
    Constant Field Values

### END

    public static final int END

  Useful constant for controlling the x-value returned for a time period.

  See Also:
    Constant Field Values

### historyCount

    protected int historyCount

  The history count.

### pointsInTime

    protected RegularTimePeriod[] pointsInTime

  Storage for the x-values.

### valueHistory

    protected DynamicTimeSeriesCollection.ValueSequence[] valueHistory

  An array for storing the objects that represent each series.

### workingCalendar

    protected java.util.Calendar workingCalendar

  A working calendar (to recycle)

Constructor Detail

### DynamicTimeSeriesCollection

    public DynamicTimeSeriesCollection(int nSeries,
                                       int nMoments)

  Constructs a dataset with capacity for N series, tied to default timezone.

  Parameters:
    `nSeries` - the number of series to be accommodated.
    `nMoments` - the number of TimePeriods to be spanned.

### DynamicTimeSeriesCollection

    public DynamicTimeSeriesCollection(int nSeries,
                                       int nMoments,
                                       java.util.TimeZone zone)

  Constructs an empty dataset, tied to a specific timezone.

  Parameters:
    `nSeries` - the number of series to be accommodated
    `nMoments` - the number of TimePeriods to be spanned
    `zone` - the timezone.

### DynamicTimeSeriesCollection

    public DynamicTimeSeriesCollection(int nSeries,
                                       int nMoments,
                                       RegularTimePeriod timeSample)

  Creates a new dataset.

  Parameters:
    `nSeries` - the number of series.
    `nMoments` - the number of items per series.
    `timeSample` - a time period sample.

### DynamicTimeSeriesCollection

    public DynamicTimeSeriesCollection(int nSeries,
                                       int nMoments,
                                       RegularTimePeriod timeSample,
                                       java.util.TimeZone zone)

  Creates a new dataset.

  Parameters:
    `nSeries` - the number of series.
    `nMoments` - the number of items per series.
    `timeSample` - a time period sample.
    `zone` - the time zone.

Method Detail

### setTimeBase

    public long setTimeBase(RegularTimePeriod start)

  Fill the pointsInTime with times using TimePeriod.next(): Will silently return if the time array was already populated. Also computes the data cached for later use by methods implementing the DomainInfo interface:

  Parameters:
    `start` - the start.
  Returns:
    ??.

### findDomainLimits

    protected void findDomainLimits()

  Finds the domain limits.

  Note: this doesn't need to be synchronized because it's called from within another method that already is.

### getPosition

    public int getPosition()

  Returns the x position type (START, MIDDLE or END).

  Returns:
    The x position type.

### setPosition

    public void setPosition(int position)

  Sets the x position type (START, MIDDLE or END).

  Parameters:
    `position` - The x position type.

### addSeries

    public void addSeries(float[] values,
                          int seriesNumber,
                          java.lang.String seriesName)

  Adds a series to the dataset. Only the y-values are supplied, the x-values are specified elsewhere.

  Parameters:
    `values` - the y-values.
    `seriesNumber` - the series index (zero-based).
    `seriesName` - the seriesName. Use this as-is during setup only, or add the synchronized keyword around the copy loop.

### setSeriesName

    public void setSeriesName(int seriesNumber,
                              java.lang.String newName)

  Sets the name of a series.

  If planning to add values individually.

  Parameters:
    `seriesNumber` - the series.
    `newName` - the new name.

### addValue

    public void addValue(int seriesNumber,
                         int index,
                         float value)

  Adds a value to a series.

  Parameters:
    `seriesNumber` - the series index.
    `index` - ??.
    `value` - the value.

### getSeriesCount

    public int getSeriesCount()

  Returns the number of series in the collection.

  Specified by:
    `getSeriesCount` in interface `SeriesDataset`
  Specified by:
    `getSeriesCount` in class `AbstractSeriesDataset`
  Returns:
    The series count.

### getItemCount

    public int getItemCount(int series)

  Returns the number of items in a series.

  For this implementation, all series have the same number of items.

  Specified by:
    `getItemCount` in interface `XYDataset`
  Parameters:
    `series` - the series index (zero-based).
  Returns:
    The item count.

### translateGet

    protected int translateGet(int toFetch)

  Re-map an index, for use in retrieving data.

  Parameters:
    `toFetch` - the index.
  Returns:
    The translated index.

### offsetFromNewest

    public int offsetFromNewest(int delta)

  Returns the actual index to a time offset by "delta" from newestAt.

  Parameters:
    `delta` - the delta.
  Returns:
    The offset.

### offsetFromOldest

    public int offsetFromOldest(int delta)

  ??

  Parameters:
    `delta` - ??
  Returns:
    The offset.

### wrapOffset

    protected int wrapOffset(int protoIndex)

  ??

  Parameters:
    `protoIndex` - the index.
  Returns:
    The offset.

### advanceTime

    public 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.

  Returns:
    The new time period.

### invalidateRangeInfo

    public void invalidateRangeInfo()

  Invalidates the range info.

### findMaxValue

    protected double findMaxValue()

  Returns the maximum value.

  Returns:
    The maximum value.

### getOldestIndex

    public int getOldestIndex()

  Returns the index of the oldest data item.

  Returns:
    The index.

### getNewestIndex

    public int getNewestIndex()

  Returns the index of the newest data item.

  Returns:
    The index.

### appendData

    public void appendData(float[] newData)

  Appends new data.

  Parameters:
    `newData` - the data.

### appendData

    public void appendData(float[] newData,
                           int insertionIndex,
                           int refresh)

  Appends data at specified index, for loading up with data from file(s).

  Parameters:
    `newData` - the data
    `insertionIndex` - the index value at which to put it
    `refresh` - value of n in "refresh the display on every nth call" (ignored if <= 0 )

### getNewestTime

    public RegularTimePeriod getNewestTime()

  Returns the newest time.

  Returns:
    The newest time.

### getOldestTime

    public RegularTimePeriod getOldestTime()

  Returns the oldest time.

  Returns:
    The oldest time.

### getX

    public java.lang.Number getX(int series,
                                 int item)

  Returns the x-value.

  Specified by:
    `getX` in interface `XYDataset`
  Parameters:
    `series` - the series index (zero-based).
    `item` - the item index (zero-based).
  Returns:
    The value.

### getYValue

    public double getYValue(int series,
                            int item)

  Returns the y-value.

  Specified by:
    `getYValue` in interface `XYDataset`
  Overrides:
    `getYValue` in class `AbstractXYDataset`
  Parameters:
    `series` - the series index (zero-based).
    `item` - the item index (zero-based).
  Returns:
    The value.

### getY

    public java.lang.Number getY(int series,
                                 int item)

  Returns the y-value.

  Specified by:
    `getY` in interface `XYDataset`
  Parameters:
    `series` - the series index (zero-based).
    `item` - the item index (zero-based).
  Returns:
    The value.

### getStartX

    public java.lang.Number getStartX(int series,
                                      int item)

  Returns the start x-value.

  Specified by:
    `getStartX` in interface `IntervalXYDataset`
  Parameters:
    `series` - the series index (zero-based).
    `item` - the item index (zero-based).
  Returns:
    The value.

### getEndX

    public java.lang.Number getEndX(int series,
                                    int item)

  Returns the end x-value.

  Specified by:
    `getEndX` in interface `IntervalXYDataset`
  Parameters:
    `series` - the series index (zero-based).
    `item` - the item index (zero-based).
  Returns:
    The value.

### getStartY

    public java.lang.Number getStartY(int series,
                                      int item)

  Returns the start y-value.

  Specified by:
    `getStartY` in interface `IntervalXYDataset`
  Parameters:
    `series` - the series index (zero-based).
    `item` - the item index (zero-based).
  Returns:
    The value.

### getEndY

    public java.lang.Number getEndY(int series,
                                    int item)

  Returns the end y-value.

  Specified by:
    `getEndY` in interface `IntervalXYDataset`
  Parameters:
    `series` - the series index (zero-based).
    `item` - the item index (zero-based).
  Returns:
    The value.

### getSeriesName

    public java.lang.String getSeriesName(int series)

  Returns the name of a series.

  Specified by:
    `getSeriesName` in interface `SeriesDataset`
  Specified by:
    `getSeriesName` in class `AbstractSeriesDataset`
  Parameters:
    `series` - the series index (zero-based).
  Returns:
    The name.

### fireSeriesChanged

    protected void fireSeriesChanged()

  Sends a `SeriesChangeEvent` to all registered listeners.

### getDomainLowerBound

    public double getDomainLowerBound(boolean includeInterval)

  Returns the minimum x-value in the dataset.

  Specified by:
    `getDomainLowerBound` in interface `DomainInfo`
  Parameters:
    `includeInterval` - a flag that determines whether or not the x-interval is taken into account.
  Returns:
    The minimum value.

### getDomainUpperBound

    public double getDomainUpperBound(boolean includeInterval)

  Returns the maximum x-value in the dataset.

  Specified by:
    `getDomainUpperBound` in interface `DomainInfo`
  Parameters:
    `includeInterval` - a flag that determines whether or not the x-interval is taken into account.
  Returns:
    The maximum value.

### getDomainBounds

    public Range getDomainBounds(boolean includeInterval)

  Returns the range of the values in this dataset's domain.

  Specified by:
    `getDomainBounds` in interface `DomainInfo`
  Parameters:
    `includeInterval` - a flag that determines whether or not the x-interval is taken into account.
  Returns:
    The range.

### getRangeLowerBound

    public double getRangeLowerBound(boolean includeInterval)

  Returns the minimum range value.

  Specified by:
    `getRangeLowerBound` in interface `RangeInfo`
  Parameters:
    `includeInterval` - a flag that determines whether or not the y-interval is taken into account.
  Returns:
    The minimum range value.

### getRangeUpperBound

    public double getRangeUpperBound(boolean includeInterval)

  Returns the maximum range value.

  Specified by:
    `getRangeUpperBound` in interface `RangeInfo`
  Parameters:
    `includeInterval` - a flag that determines whether or not the y-interval is taken into account.
  Returns:
    The maximum range value.

### getRangeBounds

    public Range getRangeBounds(boolean includeInterval)

  Returns the value range.

  Specified by:
    `getRangeBounds` in interface `RangeInfo`
  Parameters:
    `includeInterval` - a flag that determines whether or not the y-interval is taken into account.
  Returns:
    The range.