aboutsummaryrefslogtreecommitdiff
path: root/src/org/traccar/database
diff options
context:
space:
mode:
authorAbyss777 <abyss@fox5.ru>2017-08-17 10:10:05 +0500
committerAbyss777 <abyss@fox5.ru>2017-08-17 10:10:05 +0500
commit1324c00d0ece6e20545fb75f7775a2c6cee2a391 (patch)
tree775ad2a42ebba160d1e36be38c59384cd1da5a1e /src/org/traccar/database
parent9476e6be8fae228cda5867750bc4d102b1f9497d (diff)
downloadtraccar-server-1324c00d0ece6e20545fb75f7775a2c6cee2a391.tar.gz
traccar-server-1324c00d0ece6e20545fb75f7775a2c6cee2a391.tar.bz2
traccar-server-1324c00d0ece6e20545fb75f7775a2c6cee2a391.zip
Pass Map<Event, Position> to notifications
Diffstat (limited to 'src/org/traccar/database')
-rw-r--r--src/org/traccar/database/ConnectionManager.java21
-rw-r--r--src/org/traccar/database/NotificationManager.java18
2 files changed, 18 insertions, 21 deletions
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<Event> events = new HashSet<>();
+ Map<Event, Position> 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<Event> updateDeviceState(long deviceId) {
+ public Map<Event, Position> updateDeviceState(long deviceId) {
DeviceState deviceState = Context.getDeviceManager().getDeviceState(deviceId);
- Set<Event> result = new HashSet<>();
+ Map<Event, Position> result = new HashMap<>();
- Event event = Context.getMotionEventHandler().updateMotionState(deviceState);
+ Map<Event, Position> 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<Event> events, Position position) {
- for (Event event : events) {
- updateEvent(event, position);
+ public void updateEvents(Map<Event, Position> events) {
+ for (Entry<Event, Position> event : events.entrySet()) {
+ updateEvent(event.getKey(), event.getValue());
}
}