package pl.llp.aircasting.tracking;
import java.util.*;
public class MeasurementsBuffer {
private static final long INTERVAL = 60000;
private long lastGettingTime;
private List<Double> values;
public MeasurementsBuffer() {
lastGettingTime = oneIntervalAgo();
values = new ArrayList<Double>();
}
public void add(Double value) {
values.add(value);
}
public Double get() {
if(isGettable())
return getAverage();
else
return null;
}
public boolean isGettable() {
return !values.isEmpty() && oneIntervalAgo() >= lastGettingTime;
}
private double getAverage() {
double average = calculateAverage();
values.clear();
lastGettingTime = System.currentTimeMillis();
return average;
}
private double calculateAverage() {
int size = values.size();
double sum = 0;
for (int i = 0; i < size; i++)
sum += values.get(i);
double average = sum / size;
return average;
}
private long oneIntervalAgo() {
return System.currentTimeMillis() - INTERVAL;
}
}