diff options
Diffstat (limited to 'src/org/traccar/events/MotionEventHandler.java')
-rw-r--r-- | src/org/traccar/events/MotionEventHandler.java | 30 |
1 files changed, 18 insertions, 12 deletions
diff --git a/src/org/traccar/events/MotionEventHandler.java b/src/org/traccar/events/MotionEventHandler.java index 306fa8a4e..54b6b922d 100644 --- a/src/org/traccar/events/MotionEventHandler.java +++ b/src/org/traccar/events/MotionEventHandler.java @@ -1,6 +1,8 @@ package org.traccar.events; import java.sql.SQLException; +import java.util.ArrayList; +import java.util.Collection; import org.traccar.BaseEventHandler; import org.traccar.Context; @@ -19,18 +21,17 @@ public class MotionEventHandler extends BaseEventHandler { } @Override - protected Event analizePosition(Position position) { - Event event = null; - + protected Collection<Event> analizePosition(Position position) { + Collection<Event> result = null; if (!isLastPosition()) { - return event; + return null; } double speed = position.getSpeed(); boolean valid = position.getValid(); Device device = Context.getIdentityManager().getDeviceById(position.getDeviceId()); if (device == null) { - return event; + return null; } String motion = device.getMotion(); if (motion == null) { @@ -38,21 +39,26 @@ public class MotionEventHandler extends BaseEventHandler { } if (valid && speed > SPEED_THRESHOLD && !motion.equals(Device.STATUS_MOVING)) { Context.getConnectionManager().updateDevice(position.getDeviceId(), Device.STATUS_MOVING, null); - event = new Event(Event.TYPE_DEVICE_MOVING, position.getDeviceId(), position.getId()); + result = new ArrayList<>(); + result.add(new Event(Event.TYPE_DEVICE_MOVING, position.getDeviceId(), position.getId())); } else if (valid && speed < SPEED_THRESHOLD && motion.equals(Device.STATUS_MOVING)) { Context.getConnectionManager().updateDevice(position.getDeviceId(), Device.STATUS_STOPPED, null); - event = new Event(Event.TYPE_DEVICE_STOPPED, position.getDeviceId(), position.getId()); + result = new ArrayList<>(); + result.add(new Event(Event.TYPE_DEVICE_STOPPED, position.getDeviceId(), position.getId())); } try { - if (event != null && !Context.getDataManager().getLastEvents( - position.getDeviceId(), event.getType(), suppressRepeated).isEmpty()) { - event = null; + if (result != null && !result.isEmpty()) { + for (Event event : result) { + if (!Context.getDataManager().getLastEvents(position.getDeviceId(), + event.getType(), suppressRepeated).isEmpty()) { + event = null; + } + } } - } catch (SQLException error) { Log.warning(error); } - return event; + return result; } } |