package com.dronecontrol.perceptual.components.filters; import com.google.inject.Inject; import com.dronecontrol.perceptual.data.body.Coordinate; import java.util.Date; public class SimpleFilter implements Filter { private static final long TIME_UNTIL_RESET = 100000; private KalmanFilterLinear2D filter; private long lastResetTimeStamp; @Inject public SimpleFilter(KalmanFilterLinear2D filter) { this.filter = filter; } public Coordinate getFilteredCoordinate(Coordinate coordinate) { if (coordinate == null) { return filter.updateAndGetCoordinate(coordinate); } resetCoordinateIfNecessary(coordinate); return filter.updateAndGetCoordinate(coordinate); } private void resetCoordinateIfNecessary(Coordinate coordinate) { if (getTimeSinceLastReset() > TIME_UNTIL_RESET) { lastResetTimeStamp = getCurrentTimeStamp(); resetFilter(coordinate); } } private long getTimeSinceLastReset() { return getCurrentTimeStamp() - lastResetTimeStamp; } private long getCurrentTimeStamp() { return new Date().getTime(); } private void resetFilter(Coordinate coordinate) { filter.resetFilter(coordinate); } }