/** * Build a DecimatingSampleFilter on which you call processSamples() * * @param startTime The start time we're considering values, or null, meaning all time * @param endTime The end time we're considering values, or null, meaning all time * @param outputCount The number of samples to generate * @param sampleCount The number of samples to be scanned. sampleCount must be >= outputCount * @param pollingInterval The polling interval, used to compute sample counts assuming no gaps * @param decimationMode The decimation mode determines how samples will be combined to crate an output point. * @param sampleProcessor The implementor of the TimeRangeSampleProcessor abstract class */ public DecimatingSampleFilter(final DateTime startTime, final DateTime endTime, final int outputCount, final int sampleCount, final TimeSpan pollingInterval, final DecimationMode decimationMode, final TimeRangeSampleProcessor sampleProcessor) { super(startTime, endTime); if (outputCount <= 0 || sampleCount <= 0 || outputCount > sampleCount) { throw new IllegalArgumentException(String.format("In DecimatingSampleFilter, outputCount is %d but sampleCount is %d", outputCount, sampleCount)); } this.outputCount = outputCount; this.pollingInterval = pollingInterval; this.decimationMode = decimationMode; this.sampleProcessor = sampleProcessor; initializeFilterHistory(sampleCount); }
final long millisTilEnd = adjustedEndMillis - time.getMillis(); final int sampleCount = Math.max(outputCount, (int) (millisTilEnd / pollingInterval.getMillis())); initializeFilterHistory(sampleCount);