From d31f68d80a8e3ae75fa0c2f02b9ca258486a3cad Mon Sep 17 00:00:00 2001 From: Abyss777 Date: Wed, 26 Jul 2017 17:52:27 +0500 Subject: - Implement base manager classes as generics - Remame getDeviceById and getDeviceByUniqueId functions --- src/org/traccar/events/OverspeedEventHandler.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src/org/traccar/events/OverspeedEventHandler.java') diff --git a/src/org/traccar/events/OverspeedEventHandler.java b/src/org/traccar/events/OverspeedEventHandler.java index 00c3845d2..795892f40 100644 --- a/src/org/traccar/events/OverspeedEventHandler.java +++ b/src/org/traccar/events/OverspeedEventHandler.java @@ -37,7 +37,7 @@ public class OverspeedEventHandler extends BaseEventHandler { @Override protected Collection analyzePosition(Position position) { - Device device = Context.getIdentityManager().getDeviceById(position.getDeviceId()); + Device device = Context.getIdentityManager().getById(position.getDeviceId()); if (device == null) { return null; } -- cgit v1.2.3 From 532e0a98d469573a575dc595554792cbbd4cd953 Mon Sep 17 00:00:00 2001 From: Abyss777 Date: Thu, 10 Aug 2017 13:31:18 +0500 Subject: Implement delayed overspeed events --- src/org/traccar/database/ConnectionManager.java | 58 ++++++++++----- src/org/traccar/database/DeviceManager.java | 7 +- src/org/traccar/events/MotionEventHandler.java | 10 +-- src/org/traccar/events/OverspeedEventHandler.java | 66 +++++++++++++---- src/org/traccar/model/DeviceState.java | 20 +++++ .../traccar/events/OverspeedEventHandlerTest.java | 85 ++++++++++++++++++++++ 6 files changed, 203 insertions(+), 43 deletions(-) create mode 100644 test/org/traccar/events/OverspeedEventHandlerTest.java (limited to 'src/org/traccar/events/OverspeedEventHandler.java') diff --git a/src/org/traccar/database/ConnectionManager.java b/src/org/traccar/database/ConnectionManager.java index 1c5d4428a..ee2a7bb47 100644 --- a/src/org/traccar/database/ConnectionManager.java +++ b/src/org/traccar/database/ConnectionManager.java @@ -21,6 +21,7 @@ import org.jboss.netty.util.TimerTask; import org.traccar.Context; import org.traccar.GlobalTimer; import org.traccar.Protocol; +import org.traccar.events.OverspeedEventHandler; import org.traccar.helper.Log; import org.traccar.model.Device; import org.traccar.model.DeviceState; @@ -44,7 +45,10 @@ public class ConnectionManager { private final long deviceTimeout; private final boolean enableStatusEvents; + private final boolean updateDeviceState; private TripsConfig tripsConfig = null; + private long minimalOverspeedDuration; + private boolean overspeedNotRepeat; private final Map activeDevices = new ConcurrentHashMap<>(); private final Map> listeners = new ConcurrentHashMap<>(); @@ -53,8 +57,11 @@ public class ConnectionManager { public ConnectionManager() { deviceTimeout = Context.getConfig().getLong("status.timeout", DEFAULT_TIMEOUT) * 1000; enableStatusEvents = Context.getConfig().getBoolean("event.enable"); - if (Context.getConfig().getBoolean("status.updateDeviceState")) { + updateDeviceState = Context.getConfig().getBoolean("status.updateDeviceState"); + if (updateDeviceState) { tripsConfig = ReportUtils.initTripsConfig(); + minimalOverspeedDuration = Context.getConfig().getLong("event.overspeed.minimalDuration") * 1000; + overspeedNotRepeat = Context.getConfig().getBoolean("event.overspeed.notRepeat"); } } @@ -87,28 +94,24 @@ public class ConnectionManager { if (enableStatusEvents && !status.equals(oldStatus)) { String eventType; - Event stateEvent = null; + Set events = new HashSet<>(); switch (status) { case Device.STATUS_ONLINE: eventType = Event.TYPE_DEVICE_ONLINE; break; case Device.STATUS_UNKNOWN: eventType = Event.TYPE_DEVICE_UNKNOWN; - if (tripsConfig != null) { - stateEvent = updateDeviceState(deviceId); + if (updateDeviceState) { + events.addAll(updateDeviceState(deviceId)); } break; default: eventType = Event.TYPE_DEVICE_OFFLINE; - if (tripsConfig != null) { - stateEvent = updateDeviceState(deviceId); + if (updateDeviceState) { + events.addAll(updateDeviceState(deviceId)); } break; } - Set events = new HashSet<>(); - if (stateEvent != null) { - events.add(stateEvent); - } events.add(new Event(eventType, deviceId)); Context.getNotificationManager().updateEvents(events, null); } @@ -142,26 +145,41 @@ public class ConnectionManager { updateDevice(device); } - public Event updateDeviceState(long deviceId) { + public Set updateDeviceState(long deviceId) { DeviceState deviceState = Context.getDeviceManager().getDeviceState(deviceId); - if (deviceState == null || deviceState.getMotionState() == null) { - return null; - } - Event result = null; - Boolean oldMotion = deviceState.getMotionState(); + Set result = new HashSet<>(); long currentTime = System.currentTimeMillis(); - boolean newMotion = !oldMotion; - Position motionPosition = deviceState.getMotionPosition(); - if (motionPosition != null) { + if (deviceState.getMotionState() != null && deviceState.getMotionPosition() != null) { + boolean newMotion = !deviceState.getMotionState(); + Position motionPosition = deviceState.getMotionPosition(); long motionTime = motionPosition.getFixTime().getTime() + (newMotion ? tripsConfig.getMinimalTripDuration() : tripsConfig.getMinimalParkingDuration()); if (motionTime <= currentTime) { String eventType = newMotion ? Event.TYPE_DEVICE_MOVING : Event.TYPE_DEVICE_STOPPED; - result = new Event(eventType, motionPosition.getDeviceId(), motionPosition.getId()); + result.add(new Event(eventType, motionPosition.getDeviceId(), motionPosition.getId())); deviceState.setMotionState(newMotion); deviceState.setMotionPosition(null); } } + if (deviceState.getOverspeedState() != null && !deviceState.getOverspeedState() + && deviceState.getOverspeedPosition() != null) { + double speedLimit = Context.getDeviceManager().lookupAttributeDouble(deviceId, + OverspeedEventHandler.ATTRIBUTE_SPEED_LIMIT, 0, false); + if (speedLimit != 0) { + Position overspeedPosition = deviceState.getOverspeedPosition(); + long overspeedTime = overspeedPosition.getFixTime().getTime(); + if (overspeedTime + minimalOverspeedDuration <= currentTime) { + Event event = new Event(Event.TYPE_DEVICE_OVERSPEED, overspeedPosition.getDeviceId(), + overspeedPosition.getId()); + event.set("speed", overspeedPosition.getSpeed()); + event.set(OverspeedEventHandler.ATTRIBUTE_SPEED_LIMIT, speedLimit); + result.add(event); + deviceState.setOverspeedState(overspeedNotRepeat); + deviceState.setOverspeedPosition(null); + } + } + } + return result; } diff --git a/src/org/traccar/database/DeviceManager.java b/src/org/traccar/database/DeviceManager.java index 3b7e5c617..a485d6dc6 100644 --- a/src/org/traccar/database/DeviceManager.java +++ b/src/org/traccar/database/DeviceManager.java @@ -392,7 +392,12 @@ public class DeviceManager extends BaseObjectManager implements Identity } public DeviceState getDeviceState(long deviceId) { - return deviceStates.get(deviceId); + DeviceState deviceState = deviceStates.get(deviceId); + if (deviceState == null) { + deviceState = new DeviceState(); + deviceStates.put(deviceId, deviceState); + } + return deviceState; } public void setDeviceState(long deviceId, DeviceState deviceState) { diff --git a/src/org/traccar/events/MotionEventHandler.java b/src/org/traccar/events/MotionEventHandler.java index 228b43c0f..ed21d7b83 100644 --- a/src/org/traccar/events/MotionEventHandler.java +++ b/src/org/traccar/events/MotionEventHandler.java @@ -77,7 +77,8 @@ public class MotionEventHandler extends BaseEventHandler { @Override protected Collection analyzePosition(Position position) { - Device device = Context.getIdentityManager().getById(position.getDeviceId()); + long deviceId = position.getDeviceId(); + Device device = Context.getIdentityManager().getById(deviceId); if (device == null) { return null; } @@ -86,14 +87,9 @@ public class MotionEventHandler extends BaseEventHandler { } Event result = null; - - long deviceId = position.getDeviceId(); DeviceState deviceState = Context.getDeviceManager().getDeviceState(deviceId); - if (deviceState == null) { - deviceState = new DeviceState(); - deviceState.setMotionState(position.getBoolean(Position.KEY_MOTION)); - } else if (deviceState.getMotionState() == null) { + if (deviceState.getMotionState() == null) { deviceState.setMotionState(position.getBoolean(Position.KEY_MOTION)); } else { result = updateMotionState(deviceState, position, tripsConfig); diff --git a/src/org/traccar/events/OverspeedEventHandler.java b/src/org/traccar/events/OverspeedEventHandler.java index 795892f40..3b91fed4d 100644 --- a/src/org/traccar/events/OverspeedEventHandler.java +++ b/src/org/traccar/events/OverspeedEventHandler.java @@ -21,6 +21,7 @@ import java.util.Collections; import org.traccar.BaseEventHandler; import org.traccar.Context; import org.traccar.model.Device; +import org.traccar.model.DeviceState; import org.traccar.model.Event; import org.traccar.model.Position; @@ -29,15 +30,51 @@ public class OverspeedEventHandler extends BaseEventHandler { public static final String ATTRIBUTE_SPEED_LIMIT = "speedLimit"; private boolean notRepeat; + private long minimalDuration; public OverspeedEventHandler() { notRepeat = Context.getConfig().getBoolean("event.overspeed.notRepeat"); + minimalDuration = Context.getConfig().getLong("event.overspeed.minimalDuration") * 1000; + } + + public static Event updateOverspeedState(DeviceState deviceState, Position position, double speedLimit, + long minimalOverspeedDuration, boolean notRepeat) { + Event result = null; + + Boolean oldOverspeed = deviceState.getOverspeedState(); + + long currentTime = position.getFixTime().getTime(); + boolean newOverspeed = position.getSpeed() > speedLimit; + if (newOverspeed && !oldOverspeed) { + if (deviceState.getOverspeedPosition() == null) { + deviceState.setOverspeedPosition(position); + } + } else if (oldOverspeed && !newOverspeed) { + deviceState.setOverspeedState(false); + deviceState.setOverspeedPosition(null); + } else { + deviceState.setOverspeedPosition(null); + } + Position overspeedPosition = deviceState.getOverspeedPosition(); + if (overspeedPosition != null) { + long overspeedTime = overspeedPosition.getFixTime().getTime(); + if (newOverspeed && overspeedTime + minimalOverspeedDuration <= currentTime) { + result = new Event(Event.TYPE_DEVICE_OVERSPEED, overspeedPosition.getDeviceId(), + overspeedPosition.getId()); + result.set("speed", overspeedPosition.getSpeed()); + result.set(ATTRIBUTE_SPEED_LIMIT, speedLimit); + deviceState.setOverspeedState(notRepeat); + deviceState.setOverspeedPosition(null); + } + } + return result; } @Override protected Collection analyzePosition(Position position) { - Device device = Context.getIdentityManager().getById(position.getDeviceId()); + long deviceId = position.getDeviceId(); + Device device = Context.getIdentityManager().getById(deviceId); if (device == null) { return null; } @@ -45,24 +82,23 @@ public class OverspeedEventHandler extends BaseEventHandler { return null; } - double speed = position.getSpeed(); - double speedLimit = Context.getDeviceManager() - .lookupAttributeDouble(device.getId(), ATTRIBUTE_SPEED_LIMIT, 0, false); + double speedLimit = Context.getDeviceManager().lookupAttributeDouble(deviceId, ATTRIBUTE_SPEED_LIMIT, 0, false); if (speedLimit == 0) { return null; } - double oldSpeed = 0; - if (notRepeat) { - Position lastPosition = Context.getIdentityManager().getLastPosition(position.getDeviceId()); - if (lastPosition != null) { - oldSpeed = lastPosition.getSpeed(); - } + + Event result = null; + DeviceState deviceState = Context.getDeviceManager().getDeviceState(deviceId); + + if (deviceState.getOverspeedState() == null) { + deviceState.setOverspeedState(position.getSpeed() > speedLimit); + } else { + result = updateOverspeedState(deviceState, position, speedLimit, minimalDuration, notRepeat); } - if (speed > speedLimit && oldSpeed <= speedLimit) { - Event event = new Event(Event.TYPE_DEVICE_OVERSPEED, position.getDeviceId(), position.getId()); - event.set("speed", speed); - event.set(ATTRIBUTE_SPEED_LIMIT, speedLimit); - return Collections.singleton(event); + + Context.getDeviceManager().setDeviceState(deviceId, deviceState); + if (result != null) { + return Collections.singleton(result); } return null; } diff --git a/src/org/traccar/model/DeviceState.java b/src/org/traccar/model/DeviceState.java index 3626b9953..f2d0ff614 100644 --- a/src/org/traccar/model/DeviceState.java +++ b/src/org/traccar/model/DeviceState.java @@ -38,4 +38,24 @@ public class DeviceState { return motionPosition; } + private Boolean overspeedState; + + public void setOverspeedState(boolean overspeedState) { + this.overspeedState = overspeedState; + } + + public Boolean getOverspeedState() { + return overspeedState; + } + + private Position overspeedPosition; + + public void setOverspeedPosition(Position overspeedPosition) { + this.overspeedPosition = overspeedPosition; + } + + public Position getOverspeedPosition() { + return overspeedPosition; + } + } diff --git a/test/org/traccar/events/OverspeedEventHandlerTest.java b/test/org/traccar/events/OverspeedEventHandlerTest.java new file mode 100644 index 000000000..25bbb4319 --- /dev/null +++ b/test/org/traccar/events/OverspeedEventHandlerTest.java @@ -0,0 +1,85 @@ +package org.traccar.events; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertTrue; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertNull; + +import java.text.DateFormat; +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.TimeZone; + +import org.junit.Test; +import org.traccar.BaseTest; +import org.traccar.model.DeviceState; +import org.traccar.model.Event; +import org.traccar.model.Position; + +public class OverspeedEventHandlerTest extends BaseTest { + + private Date date(String time) throws ParseException { + DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + dateFormat.setTimeZone(TimeZone.getTimeZone("UTC")); + return dateFormat.parse(time); + } + + private void testOverspeed(boolean notRepeat) throws Exception { + Position position = new Position(); + position.setTime(date("2017-01-01 00:00:00")); + position.setSpeed(50); + DeviceState deviceState = new DeviceState(); + deviceState.setOverspeedState(false); + + Event event = OverspeedEventHandler.updateOverspeedState(deviceState, position, 40, 15000, notRepeat); + assertNull(event); + assertFalse(deviceState.getOverspeedState()); + assertEquals(position, deviceState.getOverspeedPosition()); + + Position nextPosition = new Position(); + nextPosition.setTime(date("2017-01-01 00:00:10")); + nextPosition.setSpeed(55); + + event = OverspeedEventHandler.updateOverspeedState(deviceState, nextPosition, 40, 15000, notRepeat); + assertNull(event); + + nextPosition.setTime(date("2017-01-01 00:00:20")); + + event = OverspeedEventHandler.updateOverspeedState(deviceState, nextPosition, 40, 15000, notRepeat); + assertNotNull(event); + assertEquals(Event.TYPE_DEVICE_OVERSPEED, event.getType()); + assertEquals(50, event.getDouble("speed"), 0.1); + assertEquals(40, event.getDouble(OverspeedEventHandler.ATTRIBUTE_SPEED_LIMIT), 0.1); + + assertEquals(notRepeat, deviceState.getOverspeedState()); + assertNull(deviceState.getOverspeedPosition()); + + nextPosition.setTime(date("2017-01-01 00:00:30")); + event = OverspeedEventHandler.updateOverspeedState(deviceState, nextPosition, 40, 15000, notRepeat); + assertNull(event); + assertEquals(notRepeat, deviceState.getOverspeedState()); + + if (notRepeat) { + assertNull(deviceState.getOverspeedPosition()); + } else { + assertNotNull(deviceState.getOverspeedPosition()); + } + + nextPosition.setTime(date("2017-01-01 00:00:40")); + nextPosition.setSpeed(30); + + event = OverspeedEventHandler.updateOverspeedState(deviceState, nextPosition, 40, 15000, notRepeat); + assertNull(event); + assertFalse(deviceState.getOverspeedState()); + assertNull(deviceState.getOverspeedPosition()); + } + + @Test + public void testOverspeedEventHandler() throws Exception { + testOverspeed(false); + testOverspeed(true); + } + +} -- cgit v1.2.3 From 2e459d8d591ee9d3578a38d981e7c1c13eb3c389 Mon Sep 17 00:00:00 2001 From: Abyss777 Date: Fri, 11 Aug 2017 09:22:53 +0500 Subject: Move state updates from ConnectionManager to proper event handlers --- src/org/traccar/database/ConnectionManager.java | 40 ++++++---------------- src/org/traccar/events/MotionEventHandler.java | 18 ++++++++++ src/org/traccar/events/OverspeedEventHandler.java | 20 +++++++++++ .../org/traccar/events/MotionEventHandlerTest.java | 21 +++++++++++- .../traccar/events/OverspeedEventHandlerTest.java | 30 ++++++++++++---- 5 files changed, 93 insertions(+), 36 deletions(-) (limited to 'src/org/traccar/events/OverspeedEventHandler.java') diff --git a/src/org/traccar/database/ConnectionManager.java b/src/org/traccar/database/ConnectionManager.java index ee2a7bb47..b1dd1b726 100644 --- a/src/org/traccar/database/ConnectionManager.java +++ b/src/org/traccar/database/ConnectionManager.java @@ -21,6 +21,7 @@ import org.jboss.netty.util.TimerTask; import org.traccar.Context; import org.traccar.GlobalTimer; import org.traccar.Protocol; +import org.traccar.events.MotionEventHandler; import org.traccar.events.OverspeedEventHandler; import org.traccar.helper.Log; import org.traccar.model.Device; @@ -148,36 +149,17 @@ public class ConnectionManager { public Set updateDeviceState(long deviceId) { DeviceState deviceState = Context.getDeviceManager().getDeviceState(deviceId); Set result = new HashSet<>(); - long currentTime = System.currentTimeMillis(); - if (deviceState.getMotionState() != null && deviceState.getMotionPosition() != null) { - boolean newMotion = !deviceState.getMotionState(); - Position motionPosition = deviceState.getMotionPosition(); - long motionTime = motionPosition.getFixTime().getTime() - + (newMotion ? tripsConfig.getMinimalTripDuration() : tripsConfig.getMinimalParkingDuration()); - if (motionTime <= currentTime) { - String eventType = newMotion ? Event.TYPE_DEVICE_MOVING : Event.TYPE_DEVICE_STOPPED; - result.add(new Event(eventType, motionPosition.getDeviceId(), motionPosition.getId())); - deviceState.setMotionState(newMotion); - deviceState.setMotionPosition(null); - } + + Event event = MotionEventHandler.updateMotionState(deviceState, tripsConfig); + if (event != null) { + result.add(event); } - if (deviceState.getOverspeedState() != null && !deviceState.getOverspeedState() - && deviceState.getOverspeedPosition() != null) { - double speedLimit = Context.getDeviceManager().lookupAttributeDouble(deviceId, - OverspeedEventHandler.ATTRIBUTE_SPEED_LIMIT, 0, false); - if (speedLimit != 0) { - Position overspeedPosition = deviceState.getOverspeedPosition(); - long overspeedTime = overspeedPosition.getFixTime().getTime(); - if (overspeedTime + minimalOverspeedDuration <= currentTime) { - Event event = new Event(Event.TYPE_DEVICE_OVERSPEED, overspeedPosition.getDeviceId(), - overspeedPosition.getId()); - event.set("speed", overspeedPosition.getSpeed()); - event.set(OverspeedEventHandler.ATTRIBUTE_SPEED_LIMIT, speedLimit); - result.add(event); - deviceState.setOverspeedState(overspeedNotRepeat); - deviceState.setOverspeedPosition(null); - } - } + + event = OverspeedEventHandler.updateOverspeedState(deviceState, Context.getDeviceManager(). + lookupAttributeDouble(deviceId, OverspeedEventHandler.ATTRIBUTE_SPEED_LIMIT, 0, false), + minimalOverspeedDuration, overspeedNotRepeat); + if (event != null) { + result.add(event); } return result; diff --git a/src/org/traccar/events/MotionEventHandler.java b/src/org/traccar/events/MotionEventHandler.java index ed21d7b83..1a8cb0ef8 100644 --- a/src/org/traccar/events/MotionEventHandler.java +++ b/src/org/traccar/events/MotionEventHandler.java @@ -36,6 +36,24 @@ public class MotionEventHandler extends BaseEventHandler { tripsConfig = ReportUtils.initTripsConfig(); } + public static Event updateMotionState(DeviceState deviceState, TripsConfig tripsConfig) { + Event result = null; + if (deviceState.getMotionState() != null && deviceState.getMotionPosition() != null) { + boolean newMotion = !deviceState.getMotionState(); + Position motionPosition = deviceState.getMotionPosition(); + long currentTime = System.currentTimeMillis(); + long motionTime = motionPosition.getFixTime().getTime() + + (newMotion ? tripsConfig.getMinimalTripDuration() : tripsConfig.getMinimalParkingDuration()); + if (motionTime <= currentTime) { + String eventType = newMotion ? Event.TYPE_DEVICE_MOVING : Event.TYPE_DEVICE_STOPPED; + result = new Event(eventType, motionPosition.getDeviceId(), motionPosition.getId()); + deviceState.setMotionState(newMotion); + deviceState.setMotionPosition(null); + } + } + return result; + } + public static Event updateMotionState(DeviceState deviceState, Position position, TripsConfig tripsConfig) { Event result = null; Boolean oldMotion = deviceState.getMotionState(); diff --git a/src/org/traccar/events/OverspeedEventHandler.java b/src/org/traccar/events/OverspeedEventHandler.java index 3b91fed4d..f0bf8a032 100644 --- a/src/org/traccar/events/OverspeedEventHandler.java +++ b/src/org/traccar/events/OverspeedEventHandler.java @@ -37,6 +37,26 @@ public class OverspeedEventHandler extends BaseEventHandler { minimalDuration = Context.getConfig().getLong("event.overspeed.minimalDuration") * 1000; } + public static Event updateOverspeedState(DeviceState deviceState, double speedLimit, + long minimalDuration, boolean notRepeat) { + Event result = null; + if (deviceState.getOverspeedState() != null && !deviceState.getOverspeedState() + && deviceState.getOverspeedPosition() != null && speedLimit != 0) { + long currentTime = System.currentTimeMillis(); + Position overspeedPosition = deviceState.getOverspeedPosition(); + long overspeedTime = overspeedPosition.getFixTime().getTime(); + if (overspeedTime + minimalDuration <= currentTime) { + result = new Event(Event.TYPE_DEVICE_OVERSPEED, overspeedPosition.getDeviceId(), + overspeedPosition.getId()); + result.set("speed", overspeedPosition.getSpeed()); + result.set(ATTRIBUTE_SPEED_LIMIT, speedLimit); + deviceState.setOverspeedState(notRepeat); + deviceState.setOverspeedPosition(null); + } + } + return result; + } + public static Event updateOverspeedState(DeviceState deviceState, Position position, double speedLimit, long minimalOverspeedDuration, boolean notRepeat) { Event result = null; diff --git a/test/org/traccar/events/MotionEventHandlerTest.java b/test/org/traccar/events/MotionEventHandlerTest.java index c44f3f4eb..9df573244 100644 --- a/test/org/traccar/events/MotionEventHandlerTest.java +++ b/test/org/traccar/events/MotionEventHandlerTest.java @@ -27,7 +27,7 @@ public class MotionEventHandlerTest extends BaseTest { } @Test - public void testMotionEventHandler() throws Exception { + public void testMotionWithPosition() throws Exception { TripsConfig tripsConfig = new TripsConfig(500, 300 * 1000, 300 * 1000, false, 0); Position position = new Position(); @@ -64,4 +64,23 @@ public class MotionEventHandlerTest extends BaseTest { assertNull(deviceState.getMotionPosition()); } + @Test + public void testMotionWithStatus() throws Exception { + TripsConfig tripsConfig = new TripsConfig(500, 300 * 1000, 300 * 1000, false, 0); + + Position position = new Position(); + position.setTime(new Date(System.currentTimeMillis() - 360000)); + position.set(Position.KEY_MOTION, true); + DeviceState deviceState = new DeviceState(); + deviceState.setMotionState(false); + deviceState.setMotionPosition(position); + + Event event = MotionEventHandler.updateMotionState(deviceState, tripsConfig); + + assertNotNull(event); + assertEquals(Event.TYPE_DEVICE_MOVING, event.getType()); + assertTrue(deviceState.getMotionState()); + assertNull(deviceState.getMotionPosition()); + } + } diff --git a/test/org/traccar/events/OverspeedEventHandlerTest.java b/test/org/traccar/events/OverspeedEventHandlerTest.java index 25bbb4319..eae0917c0 100644 --- a/test/org/traccar/events/OverspeedEventHandlerTest.java +++ b/test/org/traccar/events/OverspeedEventHandlerTest.java @@ -2,7 +2,6 @@ package org.traccar.events; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; -import static org.junit.Assert.assertTrue; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertNull; @@ -26,7 +25,7 @@ public class OverspeedEventHandlerTest extends BaseTest { return dateFormat.parse(time); } - private void testOverspeed(boolean notRepeat) throws Exception { + private void testOverspeedWithPosition(boolean notRepeat) throws Exception { Position position = new Position(); position.setTime(date("2017-01-01 00:00:00")); position.setSpeed(50); @@ -55,12 +54,12 @@ public class OverspeedEventHandlerTest extends BaseTest { assertEquals(notRepeat, deviceState.getOverspeedState()); assertNull(deviceState.getOverspeedPosition()); - + nextPosition.setTime(date("2017-01-01 00:00:30")); event = OverspeedEventHandler.updateOverspeedState(deviceState, nextPosition, 40, 15000, notRepeat); assertNull(event); assertEquals(notRepeat, deviceState.getOverspeedState()); - + if (notRepeat) { assertNull(deviceState.getOverspeedPosition()); } else { @@ -76,10 +75,29 @@ public class OverspeedEventHandlerTest extends BaseTest { assertNull(deviceState.getOverspeedPosition()); } + private void testOverspeedWithStatus(boolean notRepeat) throws Exception { + Position position = new Position(); + position.setTime(new Date(System.currentTimeMillis() - 30000)); + position.setSpeed(50); + DeviceState deviceState = new DeviceState(); + deviceState.setOverspeedState(false); + deviceState.setOverspeedPosition(position); + + Event event = OverspeedEventHandler.updateOverspeedState(deviceState, 40, 15000, notRepeat); + + assertNotNull(event); + assertEquals(Event.TYPE_DEVICE_OVERSPEED, event.getType()); + assertEquals(notRepeat, deviceState.getOverspeedState()); + + } + @Test public void testOverspeedEventHandler() throws Exception { - testOverspeed(false); - testOverspeed(true); + testOverspeedWithPosition(false); + testOverspeedWithPosition(true); + + testOverspeedWithStatus(false); + testOverspeedWithStatus(true); } } -- cgit v1.2.3 From 32a0fee0b092e488662ed29b7b7f1f303ae57e0f Mon Sep 17 00:00:00 2001 From: Abyss777 Date: Fri, 11 Aug 2017 15:06:09 +0500 Subject: Make Overspeed and Motion events handlers singleton and move some code to function --- src/org/traccar/BasePipelineFactory.java | 4 +-- src/org/traccar/Context.java | 20 +++++++++++ src/org/traccar/database/ConnectionManager.java | 18 ++-------- src/org/traccar/events/MotionEventHandler.java | 34 +++++++++--------- src/org/traccar/events/OverspeedEventHandler.java | 40 ++++++++++------------ .../org/traccar/events/MotionEventHandlerTest.java | 14 ++++---- .../traccar/events/OverspeedEventHandlerTest.java | 17 +++++---- 7 files changed, 79 insertions(+), 68 deletions(-) (limited to 'src/org/traccar/events/OverspeedEventHandler.java') diff --git a/src/org/traccar/BasePipelineFactory.java b/src/org/traccar/BasePipelineFactory.java index b368c800d..da8060071 100644 --- a/src/org/traccar/BasePipelineFactory.java +++ b/src/org/traccar/BasePipelineFactory.java @@ -165,9 +165,9 @@ public abstract class BasePipelineFactory implements ChannelPipelineFactory { if (Context.getConfig().getBoolean("event.enable")) { commandResultEventHandler = new CommandResultEventHandler(); - overspeedEventHandler = new OverspeedEventHandler(); + overspeedEventHandler = Context.getOverspeedEventHandler(); fuelDropEventHandler = new FuelDropEventHandler(); - motionEventHandler = new MotionEventHandler(); + motionEventHandler = Context.getMotionEventHandler(); geofenceEventHandler = new GeofenceEventHandler(); alertEventHandler = new AlertEventHandler(); ignitionEventHandler = new IgnitionEventHandler(); diff --git a/src/org/traccar/Context.java b/src/org/traccar/Context.java index 306a37e83..4bcc1468b 100644 --- a/src/org/traccar/Context.java +++ b/src/org/traccar/Context.java @@ -41,6 +41,8 @@ import org.traccar.database.GeofenceManager; import org.traccar.database.GroupsManager; import org.traccar.database.StatisticsManager; import org.traccar.database.UsersManager; +import org.traccar.events.MotionEventHandler; +import org.traccar.events.OverspeedEventHandler; import org.traccar.geocoder.BingMapsGeocoder; import org.traccar.geocoder.FactualGeocoder; import org.traccar.geocoder.GeocodeFarmGeocoder; @@ -65,6 +67,7 @@ import org.traccar.geolocation.GeolocationProvider; import org.traccar.geolocation.MozillaGeolocationProvider; import org.traccar.geolocation.OpenCellIdGeolocationProvider; import org.traccar.notification.EventForwarder; +import org.traccar.reports.ReportUtils; import org.traccar.smpp.SmppClient; import org.traccar.web.WebServer; @@ -229,6 +232,18 @@ public final class Context { return smppClient; } + private static MotionEventHandler motionEventHandler; + + public static MotionEventHandler getMotionEventHandler() { + return motionEventHandler; + } + + private static OverspeedEventHandler overspeedEventHandler; + + public static OverspeedEventHandler getOverspeedEventHandler() { + return overspeedEventHandler; + } + public static void init(String[] arguments) throws Exception { config = new Config(); @@ -350,6 +365,11 @@ public final class Context { velocityEngine = new VelocityEngine(); velocityEngine.init(velocityProperties); + + motionEventHandler = new MotionEventHandler(ReportUtils.initTripsConfig()); + overspeedEventHandler = new OverspeedEventHandler( + Context.getConfig().getLong("event.overspeed.minimalDuration") * 1000, + Context.getConfig().getBoolean("event.overspeed.notRepeat")); } serverManager = new ServerManager(); diff --git a/src/org/traccar/database/ConnectionManager.java b/src/org/traccar/database/ConnectionManager.java index b1dd1b726..7a0a6d30d 100644 --- a/src/org/traccar/database/ConnectionManager.java +++ b/src/org/traccar/database/ConnectionManager.java @@ -21,15 +21,12 @@ import org.jboss.netty.util.TimerTask; import org.traccar.Context; import org.traccar.GlobalTimer; import org.traccar.Protocol; -import org.traccar.events.MotionEventHandler; import org.traccar.events.OverspeedEventHandler; import org.traccar.helper.Log; import org.traccar.model.Device; import org.traccar.model.DeviceState; import org.traccar.model.Event; import org.traccar.model.Position; -import org.traccar.reports.ReportUtils; -import org.traccar.reports.model.TripsConfig; import java.net.SocketAddress; import java.sql.SQLException; @@ -47,9 +44,6 @@ public class ConnectionManager { private final long deviceTimeout; private final boolean enableStatusEvents; private final boolean updateDeviceState; - private TripsConfig tripsConfig = null; - private long minimalOverspeedDuration; - private boolean overspeedNotRepeat; private final Map activeDevices = new ConcurrentHashMap<>(); private final Map> listeners = new ConcurrentHashMap<>(); @@ -59,11 +53,6 @@ public class ConnectionManager { deviceTimeout = Context.getConfig().getLong("status.timeout", DEFAULT_TIMEOUT) * 1000; enableStatusEvents = Context.getConfig().getBoolean("event.enable"); updateDeviceState = Context.getConfig().getBoolean("status.updateDeviceState"); - if (updateDeviceState) { - tripsConfig = ReportUtils.initTripsConfig(); - minimalOverspeedDuration = Context.getConfig().getLong("event.overspeed.minimalDuration") * 1000; - overspeedNotRepeat = Context.getConfig().getBoolean("event.overspeed.notRepeat"); - } } public void addActiveDevice(long deviceId, Protocol protocol, Channel channel, SocketAddress remoteAddress) { @@ -150,14 +139,13 @@ public class ConnectionManager { DeviceState deviceState = Context.getDeviceManager().getDeviceState(deviceId); Set result = new HashSet<>(); - Event event = MotionEventHandler.updateMotionState(deviceState, tripsConfig); + Event event = Context.getMotionEventHandler().updateMotionState(deviceState); if (event != null) { result.add(event); } - event = OverspeedEventHandler.updateOverspeedState(deviceState, Context.getDeviceManager(). - lookupAttributeDouble(deviceId, OverspeedEventHandler.ATTRIBUTE_SPEED_LIMIT, 0, false), - minimalOverspeedDuration, overspeedNotRepeat); + event = Context.getOverspeedEventHandler().updateOverspeedState(deviceState, Context.getDeviceManager(). + lookupAttributeDouble(deviceId, OverspeedEventHandler.ATTRIBUTE_SPEED_LIMIT, 0, false)); if (event != null) { result.add(event); } diff --git a/src/org/traccar/events/MotionEventHandler.java b/src/org/traccar/events/MotionEventHandler.java index 1a8cb0ef8..b20a11999 100644 --- a/src/org/traccar/events/MotionEventHandler.java +++ b/src/org/traccar/events/MotionEventHandler.java @@ -32,11 +32,20 @@ public class MotionEventHandler extends BaseEventHandler { private TripsConfig tripsConfig; - public MotionEventHandler() { - tripsConfig = ReportUtils.initTripsConfig(); + public MotionEventHandler(TripsConfig tripsConfig) { + this.tripsConfig = tripsConfig; } - public static Event updateMotionState(DeviceState deviceState, TripsConfig tripsConfig) { + private Event newEvent(DeviceState deviceState, boolean newMotion) { + String eventType = newMotion ? Event.TYPE_DEVICE_MOVING : Event.TYPE_DEVICE_STOPPED; + Event event = new Event(eventType, deviceState.getMotionPosition().getDeviceId(), + deviceState.getMotionPosition().getId()); + deviceState.setMotionState(newMotion); + deviceState.setMotionPosition(null); + return event; + } + + public Event updateMotionState(DeviceState deviceState) { Event result = null; if (deviceState.getMotionState() != null && deviceState.getMotionPosition() != null) { boolean newMotion = !deviceState.getMotionState(); @@ -45,16 +54,13 @@ public class MotionEventHandler extends BaseEventHandler { long motionTime = motionPosition.getFixTime().getTime() + (newMotion ? tripsConfig.getMinimalTripDuration() : tripsConfig.getMinimalParkingDuration()); if (motionTime <= currentTime) { - String eventType = newMotion ? Event.TYPE_DEVICE_MOVING : Event.TYPE_DEVICE_STOPPED; - result = new Event(eventType, motionPosition.getDeviceId(), motionPosition.getId()); - deviceState.setMotionState(newMotion); - deviceState.setMotionPosition(null); + result = newEvent(deviceState, newMotion); } } return result; } - public static Event updateMotionState(DeviceState deviceState, Position position, TripsConfig tripsConfig) { + public Event updateMotionState(DeviceState deviceState, Position position) { Event result = null; Boolean oldMotion = deviceState.getMotionState(); @@ -75,17 +81,11 @@ public class MotionEventHandler extends BaseEventHandler { if (newMotion) { if (motionTime + tripsConfig.getMinimalTripDuration() <= currentTime || distance >= tripsConfig.getMinimalTripDistance()) { - result = new Event(Event.TYPE_DEVICE_MOVING, motionPosition.getDeviceId(), - motionPosition.getId()); - deviceState.setMotionState(true); - deviceState.setMotionPosition(null); + result = newEvent(deviceState, newMotion); } } else { if (motionTime + tripsConfig.getMinimalParkingDuration() <= currentTime) { - result = new Event(Event.TYPE_DEVICE_STOPPED, motionPosition.getDeviceId(), - motionPosition.getId()); - deviceState.setMotionState(false); - deviceState.setMotionPosition(null); + result = newEvent(deviceState, newMotion); } } } @@ -110,7 +110,7 @@ public class MotionEventHandler extends BaseEventHandler { if (deviceState.getMotionState() == null) { deviceState.setMotionState(position.getBoolean(Position.KEY_MOTION)); } else { - result = updateMotionState(deviceState, position, tripsConfig); + result = updateMotionState(deviceState, position); } Context.getDeviceManager().setDeviceState(deviceId, deviceState); if (result != null) { diff --git a/src/org/traccar/events/OverspeedEventHandler.java b/src/org/traccar/events/OverspeedEventHandler.java index f0bf8a032..953af6b33 100644 --- a/src/org/traccar/events/OverspeedEventHandler.java +++ b/src/org/traccar/events/OverspeedEventHandler.java @@ -32,13 +32,22 @@ public class OverspeedEventHandler extends BaseEventHandler { private boolean notRepeat; private long minimalDuration; - public OverspeedEventHandler() { - notRepeat = Context.getConfig().getBoolean("event.overspeed.notRepeat"); - minimalDuration = Context.getConfig().getLong("event.overspeed.minimalDuration") * 1000; + public OverspeedEventHandler(long minimalDuration, boolean notRepeat) { + this.notRepeat = notRepeat; + this.minimalDuration = minimalDuration; } - public static Event updateOverspeedState(DeviceState deviceState, double speedLimit, - long minimalDuration, boolean notRepeat) { + private Event newEvent(DeviceState deviceState, double speedLimit) { + Event event = new Event(Event.TYPE_DEVICE_OVERSPEED, deviceState.getOverspeedPosition().getDeviceId(), + deviceState.getOverspeedPosition().getId()); + event.set("speed", deviceState.getOverspeedPosition().getSpeed()); + event.set(ATTRIBUTE_SPEED_LIMIT, speedLimit); + deviceState.setOverspeedState(notRepeat); + deviceState.setOverspeedPosition(null); + return event; + } + + public Event updateOverspeedState(DeviceState deviceState, double speedLimit) { Event result = null; if (deviceState.getOverspeedState() != null && !deviceState.getOverspeedState() && deviceState.getOverspeedPosition() != null && speedLimit != 0) { @@ -46,19 +55,13 @@ public class OverspeedEventHandler extends BaseEventHandler { Position overspeedPosition = deviceState.getOverspeedPosition(); long overspeedTime = overspeedPosition.getFixTime().getTime(); if (overspeedTime + minimalDuration <= currentTime) { - result = new Event(Event.TYPE_DEVICE_OVERSPEED, overspeedPosition.getDeviceId(), - overspeedPosition.getId()); - result.set("speed", overspeedPosition.getSpeed()); - result.set(ATTRIBUTE_SPEED_LIMIT, speedLimit); - deviceState.setOverspeedState(notRepeat); - deviceState.setOverspeedPosition(null); + result = newEvent(deviceState, speedLimit); } } return result; } - public static Event updateOverspeedState(DeviceState deviceState, Position position, double speedLimit, - long minimalOverspeedDuration, boolean notRepeat) { + public Event updateOverspeedState(DeviceState deviceState, Position position, double speedLimit) { Event result = null; Boolean oldOverspeed = deviceState.getOverspeedState(); @@ -78,13 +81,8 @@ public class OverspeedEventHandler extends BaseEventHandler { Position overspeedPosition = deviceState.getOverspeedPosition(); if (overspeedPosition != null) { long overspeedTime = overspeedPosition.getFixTime().getTime(); - if (newOverspeed && overspeedTime + minimalOverspeedDuration <= currentTime) { - result = new Event(Event.TYPE_DEVICE_OVERSPEED, overspeedPosition.getDeviceId(), - overspeedPosition.getId()); - result.set("speed", overspeedPosition.getSpeed()); - result.set(ATTRIBUTE_SPEED_LIMIT, speedLimit); - deviceState.setOverspeedState(notRepeat); - deviceState.setOverspeedPosition(null); + if (newOverspeed && overspeedTime + minimalDuration <= currentTime) { + result = newEvent(deviceState, speedLimit); } } return result; @@ -113,7 +111,7 @@ public class OverspeedEventHandler extends BaseEventHandler { if (deviceState.getOverspeedState() == null) { deviceState.setOverspeedState(position.getSpeed() > speedLimit); } else { - result = updateOverspeedState(deviceState, position, speedLimit, minimalDuration, notRepeat); + result = updateOverspeedState(deviceState, position, speedLimit); } Context.getDeviceManager().setDeviceState(deviceId, deviceState); diff --git a/test/org/traccar/events/MotionEventHandlerTest.java b/test/org/traccar/events/MotionEventHandlerTest.java index 9df573244..6b7b9daee 100644 --- a/test/org/traccar/events/MotionEventHandlerTest.java +++ b/test/org/traccar/events/MotionEventHandlerTest.java @@ -28,7 +28,8 @@ public class MotionEventHandlerTest extends BaseTest { @Test public void testMotionWithPosition() throws Exception { - TripsConfig tripsConfig = new TripsConfig(500, 300 * 1000, 300 * 1000, false, 0); + MotionEventHandler motionEventHandler = new MotionEventHandler( + new TripsConfig(500, 300 * 1000, 300 * 1000, false, 0)); Position position = new Position(); position.setTime(date("2017-01-01 00:00:00")); @@ -43,11 +44,11 @@ public class MotionEventHandlerTest extends BaseTest { nextPosition.set(Position.KEY_MOTION, true); nextPosition.set(Position.KEY_TOTAL_DISTANCE, 200); - Event event = MotionEventHandler.updateMotionState(deviceState, nextPosition, tripsConfig); + Event event = motionEventHandler.updateMotionState(deviceState, nextPosition); assertNull(event); nextPosition.set(Position.KEY_TOTAL_DISTANCE, 600); - event = MotionEventHandler.updateMotionState(deviceState, nextPosition, tripsConfig); + event = motionEventHandler.updateMotionState(deviceState, nextPosition); assertNotNull(event); assertEquals(Event.TYPE_DEVICE_MOVING, event.getType()); assertTrue(deviceState.getMotionState()); @@ -57,7 +58,7 @@ public class MotionEventHandlerTest extends BaseTest { deviceState.setMotionPosition(position); nextPosition.setTime(date("2017-01-01 00:06:00")); nextPosition.set(Position.KEY_TOTAL_DISTANCE, 200); - event = MotionEventHandler.updateMotionState(deviceState, nextPosition, tripsConfig); + event = motionEventHandler.updateMotionState(deviceState, nextPosition); assertNotNull(event); assertEquals(Event.TYPE_DEVICE_MOVING, event.getType()); assertTrue(deviceState.getMotionState()); @@ -66,7 +67,8 @@ public class MotionEventHandlerTest extends BaseTest { @Test public void testMotionWithStatus() throws Exception { - TripsConfig tripsConfig = new TripsConfig(500, 300 * 1000, 300 * 1000, false, 0); + MotionEventHandler motionEventHandler = new MotionEventHandler( + new TripsConfig(500, 300 * 1000, 300 * 1000, false, 0)); Position position = new Position(); position.setTime(new Date(System.currentTimeMillis() - 360000)); @@ -75,7 +77,7 @@ public class MotionEventHandlerTest extends BaseTest { deviceState.setMotionState(false); deviceState.setMotionPosition(position); - Event event = MotionEventHandler.updateMotionState(deviceState, tripsConfig); + Event event = motionEventHandler.updateMotionState(deviceState); assertNotNull(event); assertEquals(Event.TYPE_DEVICE_MOVING, event.getType()); diff --git a/test/org/traccar/events/OverspeedEventHandlerTest.java b/test/org/traccar/events/OverspeedEventHandlerTest.java index eae0917c0..48d7445ff 100644 --- a/test/org/traccar/events/OverspeedEventHandlerTest.java +++ b/test/org/traccar/events/OverspeedEventHandlerTest.java @@ -26,13 +26,15 @@ public class OverspeedEventHandlerTest extends BaseTest { } private void testOverspeedWithPosition(boolean notRepeat) throws Exception { + OverspeedEventHandler overspeedEventHandler = new OverspeedEventHandler(15000, notRepeat); + Position position = new Position(); position.setTime(date("2017-01-01 00:00:00")); position.setSpeed(50); DeviceState deviceState = new DeviceState(); deviceState.setOverspeedState(false); - Event event = OverspeedEventHandler.updateOverspeedState(deviceState, position, 40, 15000, notRepeat); + Event event = overspeedEventHandler.updateOverspeedState(deviceState, position, 40); assertNull(event); assertFalse(deviceState.getOverspeedState()); assertEquals(position, deviceState.getOverspeedPosition()); @@ -41,12 +43,12 @@ public class OverspeedEventHandlerTest extends BaseTest { nextPosition.setTime(date("2017-01-01 00:00:10")); nextPosition.setSpeed(55); - event = OverspeedEventHandler.updateOverspeedState(deviceState, nextPosition, 40, 15000, notRepeat); + event = overspeedEventHandler.updateOverspeedState(deviceState, nextPosition, 40); assertNull(event); nextPosition.setTime(date("2017-01-01 00:00:20")); - event = OverspeedEventHandler.updateOverspeedState(deviceState, nextPosition, 40, 15000, notRepeat); + event = overspeedEventHandler.updateOverspeedState(deviceState, nextPosition, 40); assertNotNull(event); assertEquals(Event.TYPE_DEVICE_OVERSPEED, event.getType()); assertEquals(50, event.getDouble("speed"), 0.1); @@ -56,7 +58,7 @@ public class OverspeedEventHandlerTest extends BaseTest { assertNull(deviceState.getOverspeedPosition()); nextPosition.setTime(date("2017-01-01 00:00:30")); - event = OverspeedEventHandler.updateOverspeedState(deviceState, nextPosition, 40, 15000, notRepeat); + event = overspeedEventHandler.updateOverspeedState(deviceState, nextPosition, 40); assertNull(event); assertEquals(notRepeat, deviceState.getOverspeedState()); @@ -69,13 +71,15 @@ public class OverspeedEventHandlerTest extends BaseTest { nextPosition.setTime(date("2017-01-01 00:00:40")); nextPosition.setSpeed(30); - event = OverspeedEventHandler.updateOverspeedState(deviceState, nextPosition, 40, 15000, notRepeat); + event = overspeedEventHandler.updateOverspeedState(deviceState, nextPosition, 40); assertNull(event); assertFalse(deviceState.getOverspeedState()); assertNull(deviceState.getOverspeedPosition()); } private void testOverspeedWithStatus(boolean notRepeat) throws Exception { + OverspeedEventHandler overspeedEventHandler = new OverspeedEventHandler(15000, notRepeat); + Position position = new Position(); position.setTime(new Date(System.currentTimeMillis() - 30000)); position.setSpeed(50); @@ -83,12 +87,11 @@ public class OverspeedEventHandlerTest extends BaseTest { deviceState.setOverspeedState(false); deviceState.setOverspeedPosition(position); - Event event = OverspeedEventHandler.updateOverspeedState(deviceState, 40, 15000, notRepeat); + Event event = overspeedEventHandler.updateOverspeedState(deviceState, 40); assertNotNull(event); assertEquals(Event.TYPE_DEVICE_OVERSPEED, event.getType()); assertEquals(notRepeat, deviceState.getOverspeedState()); - } @Test -- cgit v1.2.3 From 1324c00d0ece6e20545fb75f7775a2c6cee2a391 Mon Sep 17 00:00:00 2001 From: Abyss777 Date: Thu, 17 Aug 2017 10:10:05 +0500 Subject: Pass Map to notifications --- src/org/traccar/BaseEventHandler.java | 8 +++--- src/org/traccar/database/ConnectionManager.java | 21 ++++++++-------- src/org/traccar/database/NotificationManager.java | 18 ++++++-------- src/org/traccar/events/AlertEventHandler.java | 6 ++--- .../traccar/events/CommandResultEventHandler.java | 6 ++--- src/org/traccar/events/DriverEventHandler.java | 6 ++--- src/org/traccar/events/FuelDropEventHandler.java | 6 ++--- src/org/traccar/events/GeofenceEventHandler.java | 11 ++++---- src/org/traccar/events/IgnitionEventHandler.java | 14 +++++------ .../traccar/events/MaintenanceEventHandler.java | 6 ++--- src/org/traccar/events/MotionEventHandler.java | 29 ++++++++++------------ src/org/traccar/events/OverspeedEventHandler.java | 27 +++++++++----------- src/org/traccar/reports/ReportUtils.java | 3 ++- test/org/traccar/events/AlertEventHandlerTest.java | 6 ++--- .../events/CommandResultEventHandlerTest.java | 6 ++--- .../traccar/events/IgnitionEventHandlerTest.java | 4 +-- .../org/traccar/events/MotionEventHandlerTest.java | 23 ++++++++++------- .../traccar/events/OverspeedEventHandlerTest.java | 27 +++++++++++--------- 18 files changed, 114 insertions(+), 113 deletions(-) (limited to 'src/org/traccar/events/OverspeedEventHandler.java') diff --git a/src/org/traccar/BaseEventHandler.java b/src/org/traccar/BaseEventHandler.java index 588406bf4..b6f7e2085 100644 --- a/src/org/traccar/BaseEventHandler.java +++ b/src/org/traccar/BaseEventHandler.java @@ -15,7 +15,7 @@ */ package org.traccar; -import java.util.Collection; +import java.util.Map; import org.traccar.model.Event; import org.traccar.model.Position; @@ -25,13 +25,13 @@ public abstract class BaseEventHandler extends BaseDataHandler { @Override protected Position handlePosition(Position position) { - Collection events = analyzePosition(position); + Map events = analyzePosition(position); if (events != null && Context.getNotificationManager() != null) { - Context.getNotificationManager().updateEvents(events, position); + Context.getNotificationManager().updateEvents(events); } return position; } - protected abstract Collection analyzePosition(Position position); + protected abstract Map analyzePosition(Position position); } diff --git a/src/org/traccar/database/ConnectionManager.java b/src/org/traccar/database/ConnectionManager.java index 7a0a6d30d..de11db21b 100644 --- a/src/org/traccar/database/ConnectionManager.java +++ b/src/org/traccar/database/ConnectionManager.java @@ -31,6 +31,7 @@ import org.traccar.model.Position; import java.net.SocketAddress; import java.sql.SQLException; import java.util.Date; +import java.util.HashMap; import java.util.HashSet; import java.util.Map; import java.util.Set; @@ -84,7 +85,7 @@ public class ConnectionManager { if (enableStatusEvents && !status.equals(oldStatus)) { String eventType; - Set events = new HashSet<>(); + Map events = new HashMap<>(); switch (status) { case Device.STATUS_ONLINE: eventType = Event.TYPE_DEVICE_ONLINE; @@ -92,18 +93,18 @@ public class ConnectionManager { case Device.STATUS_UNKNOWN: eventType = Event.TYPE_DEVICE_UNKNOWN; if (updateDeviceState) { - events.addAll(updateDeviceState(deviceId)); + events.putAll(updateDeviceState(deviceId)); } break; default: eventType = Event.TYPE_DEVICE_OFFLINE; if (updateDeviceState) { - events.addAll(updateDeviceState(deviceId)); + events.putAll(updateDeviceState(deviceId)); } break; } - events.add(new Event(eventType, deviceId)); - Context.getNotificationManager().updateEvents(events, null); + events.put(new Event(eventType, deviceId), null); + Context.getNotificationManager().updateEvents(events); } Timeout timeout = timeouts.remove(deviceId); @@ -135,19 +136,19 @@ public class ConnectionManager { updateDevice(device); } - public Set updateDeviceState(long deviceId) { + public Map updateDeviceState(long deviceId) { DeviceState deviceState = Context.getDeviceManager().getDeviceState(deviceId); - Set result = new HashSet<>(); + Map result = new HashMap<>(); - Event event = Context.getMotionEventHandler().updateMotionState(deviceState); + Map event = Context.getMotionEventHandler().updateMotionState(deviceState); if (event != null) { - result.add(event); + result.putAll(event); } event = Context.getOverspeedEventHandler().updateOverspeedState(deviceState, Context.getDeviceManager(). lookupAttributeDouble(deviceId, OverspeedEventHandler.ATTRIBUTE_SPEED_LIMIT, 0, false)); if (event != null) { - result.add(event); + result.putAll(event); } return result; diff --git a/src/org/traccar/database/NotificationManager.java b/src/org/traccar/database/NotificationManager.java index 8eea287de..98cae3499 100644 --- a/src/org/traccar/database/NotificationManager.java +++ b/src/org/traccar/database/NotificationManager.java @@ -22,6 +22,7 @@ import java.util.Collection; import java.util.HashMap; import java.util.HashSet; import java.util.Map; +import java.util.Map.Entry; import java.util.Set; import java.util.concurrent.locks.ReadWriteLock; import java.util.concurrent.locks.ReentrantReadWriteLock; @@ -48,13 +49,8 @@ public class NotificationManager { } public void updateEvent(Event event, Position position) { - Position relatedPosition = position; try { dataManager.addObject(event); - if (event.getPositionId() != 0 && (relatedPosition == null - || event.getPositionId() != relatedPosition.getId())) { - relatedPosition = dataManager.getObject(Position.class, event.getPositionId()); - } } catch (SQLException error) { Log.warning(error); } @@ -69,22 +65,22 @@ public class NotificationManager { Context.getConnectionManager().updateEvent(userId, event); } if (notification.getMail()) { - NotificationMail.sendMailAsync(userId, event, relatedPosition); + NotificationMail.sendMailAsync(userId, event, position); } if (notification.getSms()) { - NotificationSms.sendSmsAsync(userId, event, relatedPosition); + NotificationSms.sendSmsAsync(userId, event, position); } } } } if (Context.getEventForwarder() != null) { - Context.getEventForwarder().forwardEvent(event, relatedPosition); + Context.getEventForwarder().forwardEvent(event, position); } } - public void updateEvents(Collection events, Position position) { - for (Event event : events) { - updateEvent(event, position); + public void updateEvents(Map events) { + for (Entry event : events.entrySet()) { + updateEvent(event.getKey(), event.getValue()); } } diff --git a/src/org/traccar/events/AlertEventHandler.java b/src/org/traccar/events/AlertEventHandler.java index 7d0bd669b..003ccb662 100644 --- a/src/org/traccar/events/AlertEventHandler.java +++ b/src/org/traccar/events/AlertEventHandler.java @@ -15,8 +15,8 @@ */ package org.traccar.events; -import java.util.Collection; import java.util.Collections; +import java.util.Map; import org.traccar.BaseEventHandler; import org.traccar.model.Event; @@ -25,12 +25,12 @@ import org.traccar.model.Position; public class AlertEventHandler extends BaseEventHandler { @Override - protected Collection analyzePosition(Position position) { + protected Map analyzePosition(Position position) { Object alarm = position.getAttributes().get(Position.KEY_ALARM); if (alarm != null) { Event event = new Event(Event.TYPE_ALARM, position.getDeviceId(), position.getId()); event.set(Position.KEY_ALARM, (String) alarm); - return Collections.singleton(event); + return Collections.singletonMap(event, position); } return null; } diff --git a/src/org/traccar/events/CommandResultEventHandler.java b/src/org/traccar/events/CommandResultEventHandler.java index 077c389c9..775aa903f 100644 --- a/src/org/traccar/events/CommandResultEventHandler.java +++ b/src/org/traccar/events/CommandResultEventHandler.java @@ -15,8 +15,8 @@ */ package org.traccar.events; -import java.util.Collection; import java.util.Collections; +import java.util.Map; import org.traccar.BaseEventHandler; import org.traccar.model.Event; @@ -25,12 +25,12 @@ import org.traccar.model.Position; public class CommandResultEventHandler extends BaseEventHandler { @Override - protected Collection analyzePosition(Position position) { + protected Map analyzePosition(Position position) { Object commandResult = position.getAttributes().get(Position.KEY_RESULT); if (commandResult != null) { Event event = new Event(Event.TYPE_COMMAND_RESULT, position.getDeviceId(), position.getId()); event.set(Position.KEY_RESULT, (String) commandResult); - return Collections.singleton(event); + return Collections.singletonMap(event, position); } return null; } diff --git a/src/org/traccar/events/DriverEventHandler.java b/src/org/traccar/events/DriverEventHandler.java index eb5f2a301..39b8eb9c0 100644 --- a/src/org/traccar/events/DriverEventHandler.java +++ b/src/org/traccar/events/DriverEventHandler.java @@ -16,8 +16,8 @@ */ package org.traccar.events; -import java.util.Collection; import java.util.Collections; +import java.util.Map; import org.traccar.BaseEventHandler; import org.traccar.Context; @@ -27,7 +27,7 @@ import org.traccar.model.Position; public class DriverEventHandler extends BaseEventHandler { @Override - protected Collection analyzePosition(Position position) { + protected Map analyzePosition(Position position) { if (!Context.getIdentityManager().isLatestPosition(position)) { return null; } @@ -41,7 +41,7 @@ public class DriverEventHandler extends BaseEventHandler { if (!driverUniqueId.equals(oldDriverUniqueId)) { Event event = new Event(Event.TYPE_DRIVER_CHANGED, position.getDeviceId(), position.getId()); event.set(Position.KEY_DRIVER_UNIQUE_ID, driverUniqueId); - return Collections.singleton(event); + return Collections.singletonMap(event, position); } } return null; diff --git a/src/org/traccar/events/FuelDropEventHandler.java b/src/org/traccar/events/FuelDropEventHandler.java index 4e09bd4fa..4fc512162 100644 --- a/src/org/traccar/events/FuelDropEventHandler.java +++ b/src/org/traccar/events/FuelDropEventHandler.java @@ -21,15 +21,15 @@ import org.traccar.model.Device; import org.traccar.model.Event; import org.traccar.model.Position; -import java.util.Collection; import java.util.Collections; +import java.util.Map; public class FuelDropEventHandler extends BaseEventHandler { public static final String ATTRIBUTE_FUEL_DROP_THRESHOLD = "fuelDropThreshold"; @Override - protected Collection analyzePosition(Position position) { + protected Map analyzePosition(Position position) { Device device = Context.getIdentityManager().getById(position.getDeviceId()); if (device == null) { @@ -52,7 +52,7 @@ public class FuelDropEventHandler extends BaseEventHandler { if (drop >= fuelDropThreshold) { Event event = new Event(Event.TYPE_DEVICE_FUEL_DROP, position.getDeviceId(), position.getId()); event.set(ATTRIBUTE_FUEL_DROP_THRESHOLD, fuelDropThreshold); - return Collections.singleton(event); + return Collections.singletonMap(event, position); } } } diff --git a/src/org/traccar/events/GeofenceEventHandler.java b/src/org/traccar/events/GeofenceEventHandler.java index 79e5d0f8e..31d82a81e 100644 --- a/src/org/traccar/events/GeofenceEventHandler.java +++ b/src/org/traccar/events/GeofenceEventHandler.java @@ -16,8 +16,9 @@ package org.traccar.events; import java.util.ArrayList; -import java.util.Collection; +import java.util.HashMap; import java.util.List; +import java.util.Map; import org.traccar.BaseEventHandler; import org.traccar.Context; @@ -36,7 +37,7 @@ public class GeofenceEventHandler extends BaseEventHandler { } @Override - protected Collection analyzePosition(Position position) { + protected Map analyzePosition(Position position) { Device device = Context.getIdentityManager().getById(position.getDeviceId()); if (device == null) { return null; @@ -56,14 +57,14 @@ public class GeofenceEventHandler extends BaseEventHandler { device.setGeofenceIds(currentGeofences); - Collection events = new ArrayList<>(); + Map events = new HashMap<>(); for (long geofenceId : newGeofences) { long calendarId = geofenceManager.getById(geofenceId).getCalendarId(); Calendar calendar = calendarId != 0 ? Context.getCalendarManager().getById(calendarId) : null; if (calendar == null || calendar.checkMoment(position.getFixTime())) { Event event = new Event(Event.TYPE_GEOFENCE_ENTER, position.getDeviceId(), position.getId()); event.setGeofenceId(geofenceId); - events.add(event); + events.put(event, position); } } for (long geofenceId : oldGeofences) { @@ -72,7 +73,7 @@ public class GeofenceEventHandler extends BaseEventHandler { if (calendar == null || calendar.checkMoment(position.getFixTime())) { Event event = new Event(Event.TYPE_GEOFENCE_EXIT, position.getDeviceId(), position.getId()); event.setGeofenceId(geofenceId); - events.add(event); + events.put(event, position); } } return events; diff --git a/src/org/traccar/events/IgnitionEventHandler.java b/src/org/traccar/events/IgnitionEventHandler.java index 5519135bf..cc53b216c 100644 --- a/src/org/traccar/events/IgnitionEventHandler.java +++ b/src/org/traccar/events/IgnitionEventHandler.java @@ -16,8 +16,8 @@ */ package org.traccar.events; -import java.util.Collection; import java.util.Collections; +import java.util.Map; import org.traccar.BaseEventHandler; import org.traccar.Context; @@ -28,13 +28,13 @@ import org.traccar.model.Position; public class IgnitionEventHandler extends BaseEventHandler { @Override - protected Collection analyzePosition(Position position) { + protected Map analyzePosition(Position position) { Device device = Context.getIdentityManager().getById(position.getDeviceId()); if (device == null || !Context.getIdentityManager().isLatestPosition(position)) { return null; } - Collection result = null; + Map result = null; if (position.getAttributes().containsKey(Position.KEY_IGNITION)) { boolean ignition = position.getBoolean(Position.KEY_IGNITION); @@ -44,11 +44,11 @@ public class IgnitionEventHandler extends BaseEventHandler { boolean oldIgnition = lastPosition.getBoolean(Position.KEY_IGNITION); if (ignition && !oldIgnition) { - result = Collections.singleton( - new Event(Event.TYPE_IGNITION_ON, position.getDeviceId(), position.getId())); + result = Collections.singletonMap( + new Event(Event.TYPE_IGNITION_ON, position.getDeviceId(), position.getId()), position); } else if (!ignition && oldIgnition) { - result = Collections.singleton( - new Event(Event.TYPE_IGNITION_OFF, position.getDeviceId(), position.getId())); + result = Collections.singletonMap( + new Event(Event.TYPE_IGNITION_OFF, position.getDeviceId(), position.getId()), position); } } } diff --git a/src/org/traccar/events/MaintenanceEventHandler.java b/src/org/traccar/events/MaintenanceEventHandler.java index ffeefc8c5..86abf7c17 100644 --- a/src/org/traccar/events/MaintenanceEventHandler.java +++ b/src/org/traccar/events/MaintenanceEventHandler.java @@ -16,8 +16,8 @@ */ package org.traccar.events; -import java.util.Collection; import java.util.Collections; +import java.util.Map; import org.traccar.BaseEventHandler; import org.traccar.Context; @@ -31,7 +31,7 @@ public class MaintenanceEventHandler extends BaseEventHandler { public static final String ATTRIBUTE_MAINTENANCE_INTERVAL = "maintenance.interval"; @Override - protected Collection analyzePosition(Position position) { + protected Map analyzePosition(Position position) { Device device = Context.getIdentityManager().getById(position.getDeviceId()); if (device == null || !Context.getIdentityManager().isLatestPosition(position)) { return null; @@ -60,7 +60,7 @@ public class MaintenanceEventHandler extends BaseEventHandler { if ((long) (oldTotalDistance / maintenanceInterval) < (long) (newTotalDistance / maintenanceInterval)) { Event event = new Event(Event.TYPE_MAINTENANCE, position.getDeviceId(), position.getId()); event.set(Position.KEY_TOTAL_DISTANCE, newTotalDistance); - return Collections.singleton(event); + return Collections.singletonMap(event, position); } return null; diff --git a/src/org/traccar/events/MotionEventHandler.java b/src/org/traccar/events/MotionEventHandler.java index b96898fc1..ae64c10ea 100644 --- a/src/org/traccar/events/MotionEventHandler.java +++ b/src/org/traccar/events/MotionEventHandler.java @@ -16,8 +16,8 @@ */ package org.traccar.events; -import java.util.Collection; import java.util.Collections; +import java.util.Map; import org.traccar.BaseEventHandler; import org.traccar.Context; @@ -36,17 +36,17 @@ public class MotionEventHandler extends BaseEventHandler { this.tripsConfig = tripsConfig; } - private Event newEvent(DeviceState deviceState, boolean newMotion) { + private Map newEvent(DeviceState deviceState, boolean newMotion) { String eventType = newMotion ? Event.TYPE_DEVICE_MOVING : Event.TYPE_DEVICE_STOPPED; - Event event = new Event(eventType, deviceState.getMotionPosition().getDeviceId(), - deviceState.getMotionPosition().getId()); + Position position = deviceState.getMotionPosition(); + Event event = new Event(eventType, position.getDeviceId(), position.getId()); deviceState.setMotionState(newMotion); deviceState.setMotionPosition(null); - return event; + return Collections.singletonMap(event, position); } - public Event updateMotionState(DeviceState deviceState) { - Event result = null; + public Map updateMotionState(DeviceState deviceState) { + Map result = null; if (deviceState.getMotionState() != null && deviceState.getMotionPosition() != null) { boolean newMotion = !deviceState.getMotionState(); Position motionPosition = deviceState.getMotionPosition(); @@ -60,12 +60,12 @@ public class MotionEventHandler extends BaseEventHandler { return result; } - public Event updateMotionState(DeviceState deviceState, Position position) { + public Map updateMotionState(DeviceState deviceState, Position position) { return updateMotionState(deviceState, position, position.getBoolean(Position.KEY_MOTION)); } - public Event updateMotionState(DeviceState deviceState, Position position, boolean newMotion) { - Event result = null; + public Map updateMotionState(DeviceState deviceState, Position position, boolean newMotion) { + Map result = null; Boolean oldMotion = deviceState.getMotionState(); long currentTime = position.getFixTime().getTime(); @@ -102,7 +102,7 @@ public class MotionEventHandler extends BaseEventHandler { } @Override - protected Collection analyzePosition(Position position) { + protected Map analyzePosition(Position position) { long deviceId = position.getDeviceId(); Device device = Context.getIdentityManager().getById(deviceId); @@ -113,7 +113,7 @@ public class MotionEventHandler extends BaseEventHandler { return null; } - Event result = null; + Map result = null; DeviceState deviceState = Context.getDeviceManager().getDeviceState(deviceId); if (deviceState.getMotionState() == null) { @@ -122,10 +122,7 @@ public class MotionEventHandler extends BaseEventHandler { result = updateMotionState(deviceState, position); } Context.getDeviceManager().setDeviceState(deviceId, deviceState); - if (result != null) { - return Collections.singleton(result); - } - return null; + return result; } } diff --git a/src/org/traccar/events/OverspeedEventHandler.java b/src/org/traccar/events/OverspeedEventHandler.java index 953af6b33..cb658415c 100644 --- a/src/org/traccar/events/OverspeedEventHandler.java +++ b/src/org/traccar/events/OverspeedEventHandler.java @@ -15,8 +15,8 @@ */ package org.traccar.events; -import java.util.Collection; import java.util.Collections; +import java.util.Map; import org.traccar.BaseEventHandler; import org.traccar.Context; @@ -37,18 +37,18 @@ public class OverspeedEventHandler extends BaseEventHandler { this.minimalDuration = minimalDuration; } - private Event newEvent(DeviceState deviceState, double speedLimit) { - Event event = new Event(Event.TYPE_DEVICE_OVERSPEED, deviceState.getOverspeedPosition().getDeviceId(), - deviceState.getOverspeedPosition().getId()); + private Map newEvent(DeviceState deviceState, double speedLimit) { + Position position = deviceState.getOverspeedPosition(); + Event event = new Event(Event.TYPE_DEVICE_OVERSPEED, position.getDeviceId(), position.getId()); event.set("speed", deviceState.getOverspeedPosition().getSpeed()); event.set(ATTRIBUTE_SPEED_LIMIT, speedLimit); deviceState.setOverspeedState(notRepeat); deviceState.setOverspeedPosition(null); - return event; + return Collections.singletonMap(event, position); } - public Event updateOverspeedState(DeviceState deviceState, double speedLimit) { - Event result = null; + public Map updateOverspeedState(DeviceState deviceState, double speedLimit) { + Map result = null; if (deviceState.getOverspeedState() != null && !deviceState.getOverspeedState() && deviceState.getOverspeedPosition() != null && speedLimit != 0) { long currentTime = System.currentTimeMillis(); @@ -61,8 +61,8 @@ public class OverspeedEventHandler extends BaseEventHandler { return result; } - public Event updateOverspeedState(DeviceState deviceState, Position position, double speedLimit) { - Event result = null; + public Map updateOverspeedState(DeviceState deviceState, Position position, double speedLimit) { + Map result = null; Boolean oldOverspeed = deviceState.getOverspeedState(); @@ -89,7 +89,7 @@ public class OverspeedEventHandler extends BaseEventHandler { } @Override - protected Collection analyzePosition(Position position) { + protected Map analyzePosition(Position position) { long deviceId = position.getDeviceId(); Device device = Context.getIdentityManager().getById(deviceId); @@ -105,7 +105,7 @@ public class OverspeedEventHandler extends BaseEventHandler { return null; } - Event result = null; + Map result = null; DeviceState deviceState = Context.getDeviceManager().getDeviceState(deviceId); if (deviceState.getOverspeedState() == null) { @@ -115,10 +115,7 @@ public class OverspeedEventHandler extends BaseEventHandler { } Context.getDeviceManager().setDeviceState(deviceId, deviceState); - if (result != null) { - return Collections.singleton(result); - } - return null; + return result; } } diff --git a/src/org/traccar/reports/ReportUtils.java b/src/org/traccar/reports/ReportUtils.java index 8a398e4c2..46aea0757 100644 --- a/src/org/traccar/reports/ReportUtils.java +++ b/src/org/traccar/reports/ReportUtils.java @@ -46,6 +46,7 @@ import java.util.Collection; import java.util.Date; import java.util.List; import java.util.Locale; +import java.util.Map; import java.util.TimeZone; public final class ReportUtils { @@ -281,7 +282,7 @@ public final class ReportUtils { int startEventIndex = trips == deviceState.getMotionState() ? 0 : -1; int startNoEventIndex = -1; for (int i = 0; i < positions.size(); i++) { - Event event = motionHandler.updateMotionState(deviceState, positions.get(i), + Map event = motionHandler.updateMotionState(deviceState, positions.get(i), isMoving(positions, i, tripsConfig, speedThreshold)); if (deviceState.getMotionPosition() != null && startEventIndex == -1 && trips != deviceState.getMotionState()) { diff --git a/test/org/traccar/events/AlertEventHandlerTest.java b/test/org/traccar/events/AlertEventHandlerTest.java index 77128f066..4e11398e1 100644 --- a/test/org/traccar/events/AlertEventHandlerTest.java +++ b/test/org/traccar/events/AlertEventHandlerTest.java @@ -3,7 +3,7 @@ package org.traccar.events; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; -import java.util.Collection; +import java.util.Map; import org.junit.Test; import org.traccar.BaseTest; @@ -19,9 +19,9 @@ public class AlertEventHandlerTest extends BaseTest { Position position = new Position(); position.set(Position.KEY_ALARM, Position.ALARM_GENERAL); - Collection events = alertEventHandler.analyzePosition(position); + Map events = alertEventHandler.analyzePosition(position); assertNotNull(events); - Event event = (Event) events.toArray()[0]; + Event event = events.keySet().iterator().next(); assertEquals(Event.TYPE_ALARM, event.getType()); } diff --git a/test/org/traccar/events/CommandResultEventHandlerTest.java b/test/org/traccar/events/CommandResultEventHandlerTest.java index f028e86ee..602108d1a 100644 --- a/test/org/traccar/events/CommandResultEventHandlerTest.java +++ b/test/org/traccar/events/CommandResultEventHandlerTest.java @@ -3,7 +3,7 @@ package org.traccar.events; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; -import java.util.Collection; +import java.util.Map; import org.junit.Test; import org.traccar.BaseTest; @@ -19,9 +19,9 @@ public class CommandResultEventHandlerTest extends BaseTest { Position position = new Position(); position.set(Position.KEY_RESULT, "Test Result"); - Collection events = commandResultEventHandler.analyzePosition(position); + Map events = commandResultEventHandler.analyzePosition(position); assertNotNull(events); - Event event = (Event) events.toArray()[0]; + Event event = events.keySet().iterator().next(); assertEquals(Event.TYPE_COMMAND_RESULT, event.getType()); } diff --git a/test/org/traccar/events/IgnitionEventHandlerTest.java b/test/org/traccar/events/IgnitionEventHandlerTest.java index d6c348c77..7c4ac21b9 100644 --- a/test/org/traccar/events/IgnitionEventHandlerTest.java +++ b/test/org/traccar/events/IgnitionEventHandlerTest.java @@ -2,7 +2,7 @@ package org.traccar.events; import static org.junit.Assert.assertEquals; -import java.util.Collection; +import java.util.Map; import org.junit.Test; import org.traccar.BaseTest; @@ -19,7 +19,7 @@ public class IgnitionEventHandlerTest extends BaseTest { Position position = new Position(); position.set(Position.KEY_IGNITION, true); position.setValid(true); - Collection events = ignitionEventHandler.analyzePosition(position); + Map events = ignitionEventHandler.analyzePosition(position); assertEquals(events, null); } diff --git a/test/org/traccar/events/MotionEventHandlerTest.java b/test/org/traccar/events/MotionEventHandlerTest.java index 902be8b87..b88328e58 100644 --- a/test/org/traccar/events/MotionEventHandlerTest.java +++ b/test/org/traccar/events/MotionEventHandlerTest.java @@ -10,6 +10,7 @@ import java.text.DateFormat; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; +import java.util.Map; import java.util.TimeZone; import org.junit.Test; @@ -45,12 +46,13 @@ public class MotionEventHandlerTest extends BaseTest { nextPosition.set(Position.KEY_MOTION, true); nextPosition.set(Position.KEY_TOTAL_DISTANCE, 200); - Event event = motionEventHandler.updateMotionState(deviceState, nextPosition); - assertNull(event); + Map events = motionEventHandler.updateMotionState(deviceState, nextPosition); + assertNull(events); nextPosition.set(Position.KEY_TOTAL_DISTANCE, 600); - event = motionEventHandler.updateMotionState(deviceState, nextPosition); - assertNotNull(event); + events = motionEventHandler.updateMotionState(deviceState, nextPosition); + assertNotNull(events); + Event event = events.keySet().iterator().next(); assertEquals(Event.TYPE_DEVICE_MOVING, event.getType()); assertTrue(deviceState.getMotionState()); assertNull(deviceState.getMotionPosition()); @@ -59,8 +61,9 @@ public class MotionEventHandlerTest extends BaseTest { deviceState.setMotionPosition(position); nextPosition.setTime(date("2017-01-01 00:06:00")); nextPosition.set(Position.KEY_TOTAL_DISTANCE, 200); - event = motionEventHandler.updateMotionState(deviceState, nextPosition); + events = motionEventHandler.updateMotionState(deviceState, nextPosition); assertNotNull(event); + event = events.keySet().iterator().next(); assertEquals(Event.TYPE_DEVICE_MOVING, event.getType()); assertTrue(deviceState.getMotionState()); assertNull(deviceState.getMotionPosition()); @@ -78,9 +81,10 @@ public class MotionEventHandlerTest extends BaseTest { deviceState.setMotionState(false); deviceState.setMotionPosition(position); - Event event = motionEventHandler.updateMotionState(deviceState); + Map events = motionEventHandler.updateMotionState(deviceState); - assertNotNull(event); + assertNotNull(events); + Event event = events.keySet().iterator().next(); assertEquals(Event.TYPE_DEVICE_MOVING, event.getType()); assertTrue(deviceState.getMotionState()); assertNull(deviceState.getMotionPosition()); @@ -104,8 +108,9 @@ public class MotionEventHandlerTest extends BaseTest { nextPosition.set(Position.KEY_MOTION, false); nextPosition.set(Position.KEY_IGNITION, false); - Event event = motionEventHandler.updateMotionState(deviceState, nextPosition); - assertNotNull(event); + Map events = motionEventHandler.updateMotionState(deviceState, nextPosition); + assertNotNull(events); + Event event = events.keySet().iterator().next(); assertEquals(Event.TYPE_DEVICE_STOPPED, event.getType()); assertFalse(deviceState.getMotionState()); assertNull(deviceState.getMotionPosition()); diff --git a/test/org/traccar/events/OverspeedEventHandlerTest.java b/test/org/traccar/events/OverspeedEventHandlerTest.java index 48d7445ff..d38367cd9 100644 --- a/test/org/traccar/events/OverspeedEventHandlerTest.java +++ b/test/org/traccar/events/OverspeedEventHandlerTest.java @@ -9,6 +9,7 @@ import java.text.DateFormat; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; +import java.util.Map; import java.util.TimeZone; import org.junit.Test; @@ -34,8 +35,8 @@ public class OverspeedEventHandlerTest extends BaseTest { DeviceState deviceState = new DeviceState(); deviceState.setOverspeedState(false); - Event event = overspeedEventHandler.updateOverspeedState(deviceState, position, 40); - assertNull(event); + Map events = overspeedEventHandler.updateOverspeedState(deviceState, position, 40); + assertNull(events); assertFalse(deviceState.getOverspeedState()); assertEquals(position, deviceState.getOverspeedPosition()); @@ -43,13 +44,14 @@ public class OverspeedEventHandlerTest extends BaseTest { nextPosition.setTime(date("2017-01-01 00:00:10")); nextPosition.setSpeed(55); - event = overspeedEventHandler.updateOverspeedState(deviceState, nextPosition, 40); - assertNull(event); + events = overspeedEventHandler.updateOverspeedState(deviceState, nextPosition, 40); + assertNull(events); nextPosition.setTime(date("2017-01-01 00:00:20")); - event = overspeedEventHandler.updateOverspeedState(deviceState, nextPosition, 40); - assertNotNull(event); + events = overspeedEventHandler.updateOverspeedState(deviceState, nextPosition, 40); + assertNotNull(events); + Event event = events.keySet().iterator().next(); assertEquals(Event.TYPE_DEVICE_OVERSPEED, event.getType()); assertEquals(50, event.getDouble("speed"), 0.1); assertEquals(40, event.getDouble(OverspeedEventHandler.ATTRIBUTE_SPEED_LIMIT), 0.1); @@ -58,8 +60,8 @@ public class OverspeedEventHandlerTest extends BaseTest { assertNull(deviceState.getOverspeedPosition()); nextPosition.setTime(date("2017-01-01 00:00:30")); - event = overspeedEventHandler.updateOverspeedState(deviceState, nextPosition, 40); - assertNull(event); + events = overspeedEventHandler.updateOverspeedState(deviceState, nextPosition, 40); + assertNull(events); assertEquals(notRepeat, deviceState.getOverspeedState()); if (notRepeat) { @@ -71,8 +73,8 @@ public class OverspeedEventHandlerTest extends BaseTest { nextPosition.setTime(date("2017-01-01 00:00:40")); nextPosition.setSpeed(30); - event = overspeedEventHandler.updateOverspeedState(deviceState, nextPosition, 40); - assertNull(event); + events = overspeedEventHandler.updateOverspeedState(deviceState, nextPosition, 40); + assertNull(events); assertFalse(deviceState.getOverspeedState()); assertNull(deviceState.getOverspeedPosition()); } @@ -87,9 +89,10 @@ public class OverspeedEventHandlerTest extends BaseTest { deviceState.setOverspeedState(false); deviceState.setOverspeedPosition(position); - Event event = overspeedEventHandler.updateOverspeedState(deviceState, 40); + Map events = overspeedEventHandler.updateOverspeedState(deviceState, 40); - assertNotNull(event); + assertNotNull(events); + Event event = events.keySet().iterator().next(); assertEquals(Event.TYPE_DEVICE_OVERSPEED, event.getType()); assertEquals(notRepeat, deviceState.getOverspeedState()); } -- cgit v1.2.3