aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAnton Tananaev <anton.tananaev@gmail.com>2015-06-17 11:14:32 +1200
committerAnton Tananaev <anton.tananaev@gmail.com>2015-06-17 11:14:32 +1200
commit31153730de44a31b87c8131d95de1127d2758508 (patch)
tree6dcfe3a6f54cd37b8487a34f141da417dad95461
parentfe83a2a83d086f8af8579f2a6c546f3576067964 (diff)
downloadtrackermap-server-31153730de44a31b87c8131d95de1127d2758508.tar.gz
trackermap-server-31153730de44a31b87c8131d95de1127d2758508.tar.bz2
trackermap-server-31153730de44a31b87c8131d95de1127d2758508.zip
Load latest positions from db
-rw-r--r--debug.xml4
-rw-r--r--src/org/traccar/database/DataCache.java44
-rw-r--r--src/org/traccar/database/DataManager.java32
3 files changed, 49 insertions, 31 deletions
diff --git a/debug.xml b/debug.xml
index 1074d9eba..698f7bdc9 100644
--- a/debug.xml
+++ b/debug.xml
@@ -194,6 +194,10 @@
VALUES (:deviceId, NOW(), :time, :time, :valid, :latitude, :longitude, :altitude, :speed, :course, :address, :other);
</entry>
+ <entry key='database.selectLatestPositions'>
+ SELECT * FROM position WHERE id IN (SELECT positionId FROM device);
+ </entry>
+
<entry key='database.updateLatestPosition'>
UPDATE device SET positionId = :id WHERE id = :deviceId;
</entry>
diff --git a/src/org/traccar/database/DataCache.java b/src/org/traccar/database/DataCache.java
index de3214bd0..390187200 100644
--- a/src/org/traccar/database/DataCache.java
+++ b/src/org/traccar/database/DataCache.java
@@ -15,6 +15,7 @@
*/
package org.traccar.database;
+import java.sql.SQLException;
import java.util.Collection;
import java.util.HashMap;
import java.util.HashSet;
@@ -22,6 +23,8 @@ import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import java.util.Set;
+
+import org.traccar.helper.Log;
import org.traccar.model.Event;
import org.traccar.model.Position;
@@ -31,14 +34,21 @@ public class DataCache {
private final Map<Long, Set<DataCacheListener>> listeners = new HashMap<Long, Set<DataCacheListener>>();
public DataCache(DataManager dataManager) {
- // TODO: load latest data from datavase
+ try {
+ Collection<Position> positions = dataManager.getLatestPositions();
+ for (Position position : positions) {
+ this.positions.put(position.getDeviceId(), position);
+ }
+ } catch (SQLException error) {
+ Log.warning(error);
+ }
}
public synchronized void update(Position position) {
- long device = position.getDeviceId();
- positions.put(device, position);
- if (listeners.containsKey(device)) {
- for (DataCacheListener listener : listeners.get(device)) {
+ long deviceId = position.getDeviceId();
+ positions.put(deviceId, position);
+ if (listeners.containsKey(deviceId)) {
+ for (DataCacheListener listener : listeners.get(deviceId)) {
listener.onUpdate(position);
}
}
@@ -62,29 +72,29 @@ public class DataCache {
}
public void addListener(Collection<Long> devices, DataCacheListener listener) {
- for (long device : devices) {
- addListener(device, listener);
+ for (long deviceId : devices) {
+ addListener(deviceId, listener);
}
}
- public synchronized void addListener(long device, DataCacheListener listener) {
- if (!listeners.containsKey(device)) {
- listeners.put(device, new HashSet<DataCacheListener>());
+ public synchronized void addListener(long deviceId, DataCacheListener listener) {
+ if (!listeners.containsKey(deviceId)) {
+ listeners.put(deviceId, new HashSet<DataCacheListener>());
}
- listeners.get(device).add(listener);
+ listeners.get(deviceId).add(listener);
}
public void removeListener(Collection<Long> devices, DataCacheListener listener) {
- for (long device : devices) {
- removeListener(device, listener);
+ for (long deviceId : devices) {
+ removeListener(deviceId, listener);
}
}
- public synchronized void removeListener(long device, DataCacheListener listener) {
- if (!listeners.containsKey(device)) {
- listeners.put(device, new HashSet<DataCacheListener>());
+ public synchronized void removeListener(long deviceId, DataCacheListener listener) {
+ if (!listeners.containsKey(deviceId)) {
+ listeners.put(deviceId, new HashSet<DataCacheListener>());
}
- listeners.get(device).remove(listener);
+ listeners.get(deviceId).remove(listener);
}
}
diff --git a/src/org/traccar/database/DataManager.java b/src/org/traccar/database/DataManager.java
index d8efaaaca..807a75f34 100644
--- a/src/org/traccar/database/DataManager.java
+++ b/src/org/traccar/database/DataManager.java
@@ -133,17 +133,6 @@ public class DataManager {
return devices.get(uniqueId);
}
- // TODO: possibly remove this method
- public void updateLatestPosition(Position position) throws SQLException {
- QueryBuilder.create(dataSource, properties.getProperty("database.updateLatestPosition"))
- .setObject(position)
- .setDate("time", position.getFixTime()) // tmp
- .setLong("device_id", position.getDeviceId()) // tmp
- .setLong("power", 0) // tmp
- .setString("extended_info", position.getOther()) // tmp
- .executeUpdate();
- }
-
private void createDatabaseSchema() throws SQLException {
Connection connection = dataSource.getConnection();
@@ -248,7 +237,6 @@ public class DataManager {
.setObject(user)
.executeUpdate();
}
-
Context.getPermissionsManager().refresh();
}
@@ -318,12 +306,28 @@ public class DataManager {
.setString("extended_info", position.getOther()) // tmp
.executeUpdate());
}
-
+
+ // TODO: possibly remove this method
+ public void updateLatestPosition(Position position) throws SQLException {
+ QueryBuilder.create(dataSource, properties.getProperty("database.updateLatestPosition"))
+ .setObject(position)
+ .setDate("time", position.getFixTime()) // tmp
+ .setLong("device_id", position.getDeviceId()) // tmp
+ .setLong("power", 0) // tmp
+ .setString("extended_info", position.getOther()) // tmp
+ .executeUpdate();
+ }
+
+ public Collection<Position> getLatestPositions() throws SQLException {
+ return QueryBuilder.create(dataSource, properties.getProperty("database.selectLatestPositions"))
+ .executeQuery(new Position());
+ }
+
public Server getServer() throws SQLException {
return QueryBuilder.create(dataSource, properties.getProperty("database.selectServers"))
.executeQuerySingle(new Server());
}
-
+
public void updateServer(Server server) throws SQLException {
QueryBuilder.create(dataSource, properties.getProperty("database.updateServer"))
.setObject(server)