Added BufferedDataReader to read and store in memory X amount (currently 10) of VortexGrid objects.
Updated DssDataReader::getDto to increase performance by avoiding read of entire DssCatalog for every call.
Cached the catalogPathnameList when first initiated to retrieve the corresponding DSS record; it is also used for generating a list of VortexGridRecord.
Added DataReader::getTimeRecords to retrieve VortexTimeRecord with only the grid's startTime and endTime - this helps in searching for a particular grid based on time, without needing to store heavy data in memory.
Added TemporalDataReader to read grid data based on the specified time or time period.
TemporalDataReader utilizes BufferedDataReader to get grid data, and thus avoids any possible out of memory errors due to large data being stored in memory.
TemporalDataReader uses a TreeRangeMap to store and retrieve the indices of VortexGrids that matches with the specified time period - this helps to reduce search time for relevant grids.
TemporalDataReader also uses a TreeMap to store indices of VortexGrids, but only for instant grids - where the grid's startTime is equal to its endTime.
Based on this setup of using indices and unmodifiable and once-initialized catalogPathList to retrieve specific grid record, we can avoid concurrency issues and be thread-safe.
Added a utility class - GridDataProcessor, to calculate time-weighted accumulation and average data for the provided grids and specified time period.
The functions to calculate the time weighted data uses linear interpolation to approximate the data in case of partial data.
If there is no data in any part of the specified time period, the value for the specified time period would be undefined; this also include the case where the specified time period is out of bounds, or outside available data.
The TemporalDataReader uses GridDataProcessor to calculate the grid's data for the specified time.
Added TemporalDataReaderTest to test read for various grid types (accumulation, average, and instantaneous).
Resolves: HMS-2877