aboutsummaryrefslogtreecommitdiff
path: root/src/main
diff options
context:
space:
mode:
Diffstat (limited to 'src/main')
-rw-r--r--src/main/java/org/traccar/Context.java12
-rw-r--r--src/main/java/org/traccar/database/DriversManager.java100
-rw-r--r--src/main/java/org/traccar/database/PermissionsManager.java7
-rw-r--r--src/main/java/org/traccar/notification/NotificationFormatter.java3
-rw-r--r--src/main/java/org/traccar/reports/StopsReportProvider.java12
-rw-r--r--src/main/java/org/traccar/reports/TripsReportProvider.java12
-rw-r--r--src/main/java/org/traccar/reports/common/ReportUtils.java28
-rw-r--r--src/main/java/org/traccar/session/cache/CacheManager.java7
8 files changed, 45 insertions, 136 deletions
diff --git a/src/main/java/org/traccar/Context.java b/src/main/java/org/traccar/Context.java
index e5a0c640f..899f8ea54 100644
--- a/src/main/java/org/traccar/Context.java
+++ b/src/main/java/org/traccar/Context.java
@@ -26,7 +26,6 @@ import org.traccar.config.Keys;
import org.traccar.database.BaseObjectManager;
import org.traccar.database.DataManager;
import org.traccar.database.DeviceManager;
-import org.traccar.database.DriversManager;
import org.traccar.database.GeofenceManager;
import org.traccar.database.GroupsManager;
import org.traccar.database.IdentityManager;
@@ -39,7 +38,6 @@ import org.traccar.helper.Log;
import org.traccar.helper.SanitizerModule;
import org.traccar.model.BaseModel;
import org.traccar.model.Device;
-import org.traccar.model.Driver;
import org.traccar.model.Geofence;
import org.traccar.model.Group;
import org.traccar.model.Notification;
@@ -178,12 +176,6 @@ public final class Context {
return eventForwarder;
}
- private static DriversManager driversManager;
-
- public static DriversManager getDriversManager() {
- return driversManager;
- }
-
private static SmsManager smsManager;
public static SmsManager getSmsManager() {
@@ -277,8 +269,6 @@ public final class Context {
eventForwarder = new EventForwarder(config);
}
- driversManager = new DriversManager(dataManager);
-
}
private static void initEventsModule() {
@@ -324,8 +314,6 @@ public final class Context {
return (BaseObjectManager<T>) usersManager;
} else if (clazz.equals(Geofence.class)) {
return (BaseObjectManager<T>) geofenceManager;
- } else if (clazz.equals(Driver.class)) {
- return (BaseObjectManager<T>) driversManager;
} else if (clazz.equals(Notification.class)) {
return (BaseObjectManager<T>) notificationManager;
}
diff --git a/src/main/java/org/traccar/database/DriversManager.java b/src/main/java/org/traccar/database/DriversManager.java
deleted file mode 100644
index d111cd643..000000000
--- a/src/main/java/org/traccar/database/DriversManager.java
+++ /dev/null
@@ -1,100 +0,0 @@
-/*
- * Copyright 2017 - 2020 Anton Tananaev (anton@traccar.org)
- * Copyright 2017 Andrey Kunitsyn (andrey@traccar.org)
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.traccar.database;
-
-import java.util.Map;
-import java.util.concurrent.ConcurrentHashMap;
-
-import org.traccar.model.Driver;
-
-public class DriversManager extends ExtendedObjectManager<Driver> {
-
- private Map<String, Driver> driversByUniqueId;
-
- public DriversManager(DataManager dataManager) {
- super(dataManager, Driver.class);
- try {
- writeLock();
- if (driversByUniqueId == null) {
- driversByUniqueId = new ConcurrentHashMap<>();
- }
- } finally {
- writeUnlock();
- }
- }
-
- private void addByUniqueId(Driver driver) {
- try {
- writeLock();
- if (driversByUniqueId == null) {
- driversByUniqueId = new ConcurrentHashMap<>();
- }
- driversByUniqueId.put(driver.getUniqueId(), driver);
- } finally {
- writeUnlock();
- }
- }
-
- private void removeByUniqueId(String driverUniqueId) {
- try {
- writeLock();
- if (driversByUniqueId == null) {
- driversByUniqueId = new ConcurrentHashMap<>();
- }
- driversByUniqueId.remove(driverUniqueId);
- } finally {
- writeUnlock();
- }
- }
-
- @Override
- protected void addNewItem(Driver driver) {
- super.addNewItem(driver);
- addByUniqueId(driver);
- }
-
- @Override
- protected void updateCachedItem(Driver driver) {
- Driver cachedDriver = getById(driver.getId());
- cachedDriver.setName(driver.getName());
- if (!driver.getUniqueId().equals(cachedDriver.getUniqueId())) {
- removeByUniqueId(cachedDriver.getUniqueId());
- cachedDriver.setUniqueId(driver.getUniqueId());
- addByUniqueId(cachedDriver);
- }
- cachedDriver.setAttributes(driver.getAttributes());
- }
-
- @Override
- protected void removeCachedItem(long driverId) {
- Driver cachedDriver = getById(driverId);
- if (cachedDriver != null) {
- String driverUniqueId = cachedDriver.getUniqueId();
- super.removeCachedItem(driverId);
- removeByUniqueId(driverUniqueId);
- }
- }
-
- public Driver getDriverByUniqueId(String uniqueId) {
- try {
- readLock();
- return driversByUniqueId.get(uniqueId);
- } finally {
- readUnlock();
- }
- }
-}
diff --git a/src/main/java/org/traccar/database/PermissionsManager.java b/src/main/java/org/traccar/database/PermissionsManager.java
index 544faf697..47941d681 100644
--- a/src/main/java/org/traccar/database/PermissionsManager.java
+++ b/src/main/java/org/traccar/database/PermissionsManager.java
@@ -20,7 +20,6 @@ import org.slf4j.LoggerFactory;
import org.traccar.Context;
import org.traccar.model.BaseModel;
import org.traccar.model.Device;
-import org.traccar.model.Driver;
import org.traccar.model.Geofence;
import org.traccar.model.Group;
import org.traccar.model.ManagedUser;
@@ -360,7 +359,6 @@ public class PermissionsManager {
if (Context.getGeofenceManager() != null) {
Context.getGeofenceManager().refreshUserItems();
}
- Context.getDriversManager().refreshUserItems();
if (Context.getNotificationManager() != null) {
Context.getNotificationManager().refreshUserItems();
}
@@ -370,7 +368,6 @@ public class PermissionsManager {
if (Context.getGeofenceManager() != null) {
Context.getGeofenceManager().refreshExtendedPermissions();
}
- Context.getDriversManager().refreshExtendedPermissions();
}
public void refreshPermissions(Permission permission) {
@@ -383,8 +380,6 @@ public class PermissionsManager {
usersManager.refreshUserItems();
} else if (permission.getPropertyClass().equals(Geofence.class) && Context.getGeofenceManager() != null) {
Context.getGeofenceManager().refreshUserItems();
- } else if (permission.getPropertyClass().equals(Driver.class)) {
- Context.getDriversManager().refreshUserItems();
} else if (permission.getPropertyClass().equals(Notification.class)
&& Context.getNotificationManager() != null) {
Context.getNotificationManager().refreshUserItems();
@@ -392,8 +387,6 @@ public class PermissionsManager {
} else if (permission.getOwnerClass().equals(Device.class) || permission.getOwnerClass().equals(Group.class)) {
if (permission.getPropertyClass().equals(Geofence.class) && Context.getGeofenceManager() != null) {
Context.getGeofenceManager().refreshExtendedPermissions();
- } else if (permission.getPropertyClass().equals(Driver.class)) {
- Context.getDriversManager().refreshExtendedPermissions();
} else if (permission.getPropertyClass().equals(Notification.class)
&& Context.getNotificationManager() != null) {
Context.getNotificationManager().refreshExtendedPermissions();
diff --git a/src/main/java/org/traccar/notification/NotificationFormatter.java b/src/main/java/org/traccar/notification/NotificationFormatter.java
index c3e37c9e9..be90761b1 100644
--- a/src/main/java/org/traccar/notification/NotificationFormatter.java
+++ b/src/main/java/org/traccar/notification/NotificationFormatter.java
@@ -17,7 +17,6 @@
package org.traccar.notification;
import org.apache.velocity.VelocityContext;
-import org.traccar.Context;
import org.traccar.model.Device;
import org.traccar.model.Event;
import org.traccar.model.Geofence;
@@ -55,7 +54,7 @@ public final class NotificationFormatter {
}
String driverUniqueId = event.getString(Position.KEY_DRIVER_UNIQUE_ID);
if (driverUniqueId != null) {
- velocityContext.put("driver", Context.getDriversManager().getDriverByUniqueId(driverUniqueId));
+ velocityContext.put("driver", cacheManager.findDriverByUniqueId(device.getId(), driverUniqueId));
}
return TextTemplateFormatter.formatMessage(velocityContext, event.getType(), templatePath);
diff --git a/src/main/java/org/traccar/reports/StopsReportProvider.java b/src/main/java/org/traccar/reports/StopsReportProvider.java
index 8dedb9a24..58dc71d2d 100644
--- a/src/main/java/org/traccar/reports/StopsReportProvider.java
+++ b/src/main/java/org/traccar/reports/StopsReportProvider.java
@@ -35,10 +35,20 @@ import org.traccar.model.Group;
import org.traccar.reports.common.ReportUtils;
import org.traccar.reports.model.DeviceReportSection;
import org.traccar.reports.model.StopReportItem;
+import org.traccar.storage.Storage;
import org.traccar.storage.StorageException;
+import javax.inject.Inject;
+
public class StopsReportProvider {
+ private final Storage storage;
+
+ @Inject
+ public StopsReportProvider(Storage storage) {
+ this.storage = storage;
+ }
+
private Collection<StopReportItem> detectStops(long deviceId, Date from, Date to) throws StorageException {
boolean ignoreOdometer = Context.getDeviceManager()
.lookupAttributeBoolean(deviceId, "report.ignoreOdometer", false, false, true);
@@ -47,7 +57,7 @@ public class StopsReportProvider {
DeviceManager deviceManager = Main.getInjector().getInstance(DeviceManager.class);
return ReportUtils.detectTripsAndStops(
- identityManager, deviceManager, Context.getDataManager().getPositions(deviceId, from, to),
+ storage, identityManager, deviceManager, Context.getDataManager().getPositions(deviceId, from, to),
Context.getTripsConfig(), ignoreOdometer, StopReportItem.class);
}
diff --git a/src/main/java/org/traccar/reports/TripsReportProvider.java b/src/main/java/org/traccar/reports/TripsReportProvider.java
index 6aff08a1d..5ff31dbe2 100644
--- a/src/main/java/org/traccar/reports/TripsReportProvider.java
+++ b/src/main/java/org/traccar/reports/TripsReportProvider.java
@@ -34,10 +34,20 @@ import org.traccar.model.Group;
import org.traccar.reports.common.ReportUtils;
import org.traccar.reports.model.DeviceReportSection;
import org.traccar.reports.model.TripReportItem;
+import org.traccar.storage.Storage;
import org.traccar.storage.StorageException;
+import javax.inject.Inject;
+
public class TripsReportProvider {
+ private final Storage storage;
+
+ @Inject
+ public TripsReportProvider(Storage storage) {
+ this.storage = storage;
+ }
+
private Collection<TripReportItem> detectTrips(long deviceId, Date from, Date to) throws StorageException {
boolean ignoreOdometer = Context.getDeviceManager()
.lookupAttributeBoolean(deviceId, "report.ignoreOdometer", false, false, true);
@@ -46,7 +56,7 @@ public class TripsReportProvider {
DeviceManager deviceManager = Main.getInjector().getInstance(DeviceManager.class);
return ReportUtils.detectTripsAndStops(
- identityManager, deviceManager, Context.getDataManager().getPositions(deviceId, from, to),
+ storage, identityManager, deviceManager, Context.getDataManager().getPositions(deviceId, from, to),
Context.getTripsConfig(), ignoreOdometer, TripReportItem.class);
}
diff --git a/src/main/java/org/traccar/reports/common/ReportUtils.java b/src/main/java/org/traccar/reports/common/ReportUtils.java
index b56b58a58..4bcb54899 100644
--- a/src/main/java/org/traccar/reports/common/ReportUtils.java
+++ b/src/main/java/org/traccar/reports/common/ReportUtils.java
@@ -146,9 +146,11 @@ public final class ReportUtils {
return null;
}
- public static String findDriverName(String driverUniqueId) {
- if (driverUniqueId != null && Context.getDriversManager() != null) {
- Driver driver = Context.getDriversManager().getDriverByUniqueId(driverUniqueId);
+ public static String findDriverName(Storage storage, String driverUniqueId) throws StorageException {
+ if (driverUniqueId != null) {
+ Driver driver = storage.getObject(Driver.class, new Request(
+ new Columns.All(),
+ new Condition.Equals("uniqueId", "uniqueId", driverUniqueId)));
if (driver != null) {
return driver.getName();
}
@@ -186,8 +188,8 @@ public final class ReportUtils {
}
private static TripReportItem calculateTrip(
- IdentityManager identityManager, ArrayList<Position> positions,
- int startIndex, int endIndex, boolean ignoreOdometer) {
+ Storage storage, IdentityManager identityManager, ArrayList<Position> positions,
+ int startIndex, int endIndex, boolean ignoreOdometer) throws StorageException {
Position startTrip = positions.get(startIndex);
Position endTrip = positions.get(endIndex);
@@ -238,7 +240,7 @@ public final class ReportUtils {
trip.setSpentFuel(calculateFuel(startTrip, endTrip));
trip.setDriverUniqueId(findDriver(startTrip, endTrip));
- trip.setDriverName(findDriverName(trip.getDriverUniqueId()));
+ trip.setDriverName(findDriverName(storage, trip.getDriverUniqueId()));
if (!ignoreOdometer
&& startTrip.getDouble(Position.KEY_ODOMETER) != 0
@@ -303,11 +305,11 @@ public final class ReportUtils {
}
private static <T extends BaseReportItem> T calculateTripOrStop(
- IdentityManager identityManager, ArrayList<Position> positions,
- int startIndex, int endIndex, boolean ignoreOdometer, Class<T> reportClass) {
+ Storage storage, IdentityManager identityManager, ArrayList<Position> positions,
+ int startIndex, int endIndex, boolean ignoreOdometer, Class<T> reportClass) throws StorageException {
if (reportClass.equals(TripReportItem.class)) {
- return (T) calculateTrip(identityManager, positions, startIndex, endIndex, ignoreOdometer);
+ return (T) calculateTrip(storage, identityManager, positions, startIndex, endIndex, ignoreOdometer);
} else {
return (T) calculateStop(identityManager, positions, startIndex, endIndex, ignoreOdometer);
}
@@ -334,9 +336,9 @@ public final class ReportUtils {
}
public static <T extends BaseReportItem> Collection<T> detectTripsAndStops(
- IdentityManager identityManager, DeviceManager deviceManager,
+ Storage storage, IdentityManager identityManager, DeviceManager deviceManager,
Collection<Position> positionCollection,
- TripsConfig tripsConfig, boolean ignoreOdometer, Class<T> reportClass) {
+ TripsConfig tripsConfig, boolean ignoreOdometer, Class<T> reportClass) throws StorageException {
Collection<T> result = new ArrayList<>();
@@ -369,13 +371,13 @@ public final class ReportUtils {
}
if (startEventIndex != -1 && startNoEventIndex != -1 && event != null
&& trips != deviceState.getMotionState()) {
- result.add(calculateTripOrStop(identityManager, positions,
+ result.add(calculateTripOrStop(storage, identityManager, positions,
startEventIndex, startNoEventIndex, ignoreOdometer, reportClass));
startEventIndex = -1;
}
}
if (startEventIndex != -1 && (startNoEventIndex != -1 || !trips)) {
- result.add(calculateTripOrStop(identityManager, positions,
+ result.add(calculateTripOrStop(storage, identityManager, positions,
startEventIndex, startNoEventIndex != -1 ? startNoEventIndex : positions.size() - 1,
ignoreOdometer, reportClass));
}
diff --git a/src/main/java/org/traccar/session/cache/CacheManager.java b/src/main/java/org/traccar/session/cache/CacheManager.java
index 102a31ecd..6ea0f252d 100644
--- a/src/main/java/org/traccar/session/cache/CacheManager.java
+++ b/src/main/java/org/traccar/session/cache/CacheManager.java
@@ -105,6 +105,13 @@ public class CacheManager {
}
}
+ public Driver findDriverByUniqueId(long deviceId, String driverUniqueId) {
+ return getDeviceObjects(deviceId, Driver.class).stream()
+ .filter(driver -> driver.getUniqueId().equals(driverUniqueId))
+ .findFirst()
+ .orElse(null);
+ }
+
public void addDevice(long deviceId) throws StorageException {
try {
lock.writeLock().lock();