package org.geogebra.web.web.gui.view.dataCollection;
import java.util.ArrayList;
import org.geogebra.common.plugin.SensorLogger.Types;
/**
*
*/
public class Frequency {
/** time in ms to keep the last received data */
private final static int TIME_TO_KEEP = 1000;
private ArrayList<Double> timestamps = new ArrayList<Double>();
private Types type;
private int frequency;
private DataCollection data;
private int lastDataCount = 0;
/**
*
* @param type
* {@link Types sensorType}
* @param data
* {@link DataCollection}
*/
public Frequency(Types type, DataCollection data) {
this.type = type;
this.data = data;
}
public synchronized void addTimestamp(double time, int dataCount) {
if (dataCount < this.lastDataCount) {
clearTimestamps();
}
this.lastDataCount = dataCount;
this.timestamps.add(time);
removeOldValues();
calcualteFreq();
updateUI();
}
private void removeOldValues() {
ArrayList<Double> x = new ArrayList<Double>();
for (int i = timestamps.size() - 1; i >= 0; i--) {
if (timestamps.get(i) > timestamps.get(timestamps.size() - 1)
- TIME_TO_KEEP) {
x.add(timestamps.get(i));
}
}
this.timestamps = x;
}
public void clearTimestamps() {
this.timestamps.clear();
}
private void updateUI() {
data.updateRealFrequency(this.type, this.frequency);
}
private void calcualteFreq() {
this.frequency = this.timestamps.size();
}
public Types getType() {
return this.type;
}
}