aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/main/java/org/traccar/Context.java13
-rw-r--r--src/main/java/org/traccar/MainModule.java6
-rw-r--r--src/main/java/org/traccar/api/resource/ReportResource.java4
-rw-r--r--src/main/java/org/traccar/api/security/PermissionsService.java4
-rw-r--r--src/main/java/org/traccar/database/MaintenancesManager.java27
-rw-r--r--src/main/java/org/traccar/database/NotificationManager.java57
-rw-r--r--src/main/java/org/traccar/database/PermissionsManager.java7
-rw-r--r--src/main/java/org/traccar/handler/events/MaintenanceEventHandler.java25
-rw-r--r--src/main/java/org/traccar/notification/EventForwarder.java20
-rw-r--r--src/main/java/org/traccar/notification/NotificationFormatter.java21
-rw-r--r--src/main/java/org/traccar/notificators/NotificatorFirebase.java5
-rw-r--r--src/main/java/org/traccar/notificators/NotificatorMail.java5
-rw-r--r--src/main/java/org/traccar/notificators/NotificatorPushover.java5
-rw-r--r--src/main/java/org/traccar/notificators/NotificatorSms.java7
-rw-r--r--src/main/java/org/traccar/notificators/NotificatorTelegram.java5
-rw-r--r--src/main/java/org/traccar/reports/Events.java34
-rw-r--r--src/main/java/org/traccar/reports/ReportUtils.java16
17 files changed, 117 insertions, 144 deletions
diff --git a/src/main/java/org/traccar/Context.java b/src/main/java/org/traccar/Context.java
index 1aa673077..a833d0c52 100644
--- a/src/main/java/org/traccar/Context.java
+++ b/src/main/java/org/traccar/Context.java
@@ -32,7 +32,6 @@ import org.traccar.database.GeofenceManager;
import org.traccar.database.GroupsManager;
import org.traccar.database.IdentityManager;
import org.traccar.database.MailManager;
-import org.traccar.database.MaintenancesManager;
import org.traccar.database.NotificationManager;
import org.traccar.database.PermissionsManager;
import org.traccar.database.UsersManager;
@@ -45,7 +44,6 @@ import org.traccar.model.Device;
import org.traccar.model.Driver;
import org.traccar.model.Geofence;
import org.traccar.model.Group;
-import org.traccar.model.Maintenance;
import org.traccar.model.Notification;
import org.traccar.model.User;
import org.traccar.notification.EventForwarder;
@@ -193,12 +191,6 @@ public final class Context {
return driversManager;
}
- private static MaintenancesManager maintenancesManager;
-
- public static MaintenancesManager getMaintenancesManager() {
- return maintenancesManager;
- }
-
private static SmsManager smsManager;
public static SmsManager getSmsManager() {
@@ -289,7 +281,7 @@ public final class Context {
}
if (config.hasKey(Keys.EVENT_FORWARD_URL)) {
- eventForwarder = new EventForwarder();
+ eventForwarder = new EventForwarder(config);
}
driversManager = new DriversManager(dataManager);
@@ -300,7 +292,6 @@ public final class Context {
geofenceManager = new GeofenceManager(dataManager);
calendarManager = new CalendarManager(dataManager);
- maintenancesManager = new MaintenancesManager(dataManager);
notificationManager = new NotificationManager(dataManager);
notificatorManager = new NotificatorManager();
Properties velocityProperties = new Properties();
@@ -345,8 +336,6 @@ public final class Context {
return (BaseObjectManager<T>) geofenceManager;
} else if (clazz.equals(Driver.class)) {
return (BaseObjectManager<T>) driversManager;
- } else if (clazz.equals(Maintenance.class)) {
- return (BaseObjectManager<T>) maintenancesManager;
} else if (clazz.equals(Notification.class)) {
return (BaseObjectManager<T>) notificationManager;
}
diff --git a/src/main/java/org/traccar/MainModule.java b/src/main/java/org/traccar/MainModule.java
index 15b9cefda..219a8fc11 100644
--- a/src/main/java/org/traccar/MainModule.java
+++ b/src/main/java/org/traccar/MainModule.java
@@ -30,7 +30,6 @@ import org.traccar.database.DataManager;
import org.traccar.database.DeviceManager;
import org.traccar.database.GeofenceManager;
import org.traccar.database.IdentityManager;
-import org.traccar.database.MaintenancesManager;
import org.traccar.database.StatisticsManager;
import org.traccar.geocoder.AddressFormat;
import org.traccar.geocoder.BanGeocoder;
@@ -132,11 +131,6 @@ public class MainModule extends AbstractModule {
}
@Provides
- public static MaintenancesManager provideMaintenancesManager() {
- return Context.getMaintenancesManager();
- }
-
- @Provides
public static SmsManager provideSmsManager() {
return Context.getSmsManager();
}
diff --git a/src/main/java/org/traccar/api/resource/ReportResource.java b/src/main/java/org/traccar/api/resource/ReportResource.java
index 06ccbe4fd..a7bbe1067 100644
--- a/src/main/java/org/traccar/api/resource/ReportResource.java
+++ b/src/main/java/org/traccar/api/resource/ReportResource.java
@@ -127,7 +127,7 @@ public class ReportResource extends BaseResource {
@QueryParam("from") Date from, @QueryParam("to") Date to) throws StorageException {
permissionsService.checkRestriction(getUserId(), UserRestrictions::getDisableReports);
LogAction.logReport(getUserId(), "events", from, to, deviceIds, groupIds);
- return Events.getObjects(getUserId(), deviceIds, groupIds, types, from, to);
+ return Events.getObjects(storage, getUserId(), deviceIds, groupIds, types, from, to);
}
@Path("events")
@@ -141,7 +141,7 @@ public class ReportResource extends BaseResource {
permissionsService.checkRestriction(getUserId(), UserRestrictions::getDisableReports);
return executeReport(getUserId(), mail, stream -> {
LogAction.logReport(getUserId(), "events", from, to, deviceIds, groupIds);
- Events.getExcel(stream, getUserId(), deviceIds, groupIds, types, from, to);
+ Events.getExcel(stream, storage, getUserId(), deviceIds, groupIds, types, from, to);
});
}
diff --git a/src/main/java/org/traccar/api/security/PermissionsService.java b/src/main/java/org/traccar/api/security/PermissionsService.java
index b4a375109..12a2189e9 100644
--- a/src/main/java/org/traccar/api/security/PermissionsService.java
+++ b/src/main/java/org/traccar/api/security/PermissionsService.java
@@ -138,13 +138,13 @@ public class PermissionsService {
public <T extends BaseModel> void checkPermission(
Class<T> clazz, long userId, long objectId) throws StorageException, SecurityException {
if (!getUser(userId).getAdministrator() && !(clazz.equals(User.class) && userId == objectId)) {
- var objects = storage.getObjects(clazz, new Request(
+ var object = storage.getObject(clazz, new Request(
new Columns.Include("id"),
new Condition.And(
new Condition.Equals("id", "id", objectId),
new Condition.Permission(
User.class, userId, clazz.equals(User.class) ? ManagedUser.class : clazz))));
- if (!objects.isEmpty()) {
+ if (object == null) {
throw new SecurityException(clazz.getSimpleName() + " access denied");
}
}
diff --git a/src/main/java/org/traccar/database/MaintenancesManager.java b/src/main/java/org/traccar/database/MaintenancesManager.java
deleted file mode 100644
index 4e266cb78..000000000
--- a/src/main/java/org/traccar/database/MaintenancesManager.java
+++ /dev/null
@@ -1,27 +0,0 @@
-/*
- * Copyright 2018 Anton Tananaev (anton@traccar.org)
- * Copyright 2018 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 org.traccar.model.Maintenance;
-
-public class MaintenancesManager extends ExtendedObjectManager<Maintenance> {
-
- public MaintenancesManager(DataManager dataManager) {
- super(dataManager, Maintenance.class);
- }
-
-}
diff --git a/src/main/java/org/traccar/database/NotificationManager.java b/src/main/java/org/traccar/database/NotificationManager.java
index f358b1d4d..64f3b6775 100644
--- a/src/main/java/org/traccar/database/NotificationManager.java
+++ b/src/main/java/org/traccar/database/NotificationManager.java
@@ -77,42 +77,37 @@ public class NotificationManager extends ExtendedObjectManager<Notification> {
usersToForward = new HashSet<>();
}
for (long userId : users) {
- if ((event.getGeofenceId() == 0
- || Context.getGeofenceManager().checkItemPermission(userId, event.getGeofenceId()))
- && (event.getMaintenanceId() == 0
- || Context.getMaintenancesManager().checkItemPermission(userId, event.getMaintenanceId()))) {
- if (usersToForward != null) {
- usersToForward.add(userId);
- }
- final Set<String> notificators = new HashSet<>();
- for (long notificationId : getEffectiveNotifications(userId, deviceId, event.getEventTime())) {
- Notification notification = getById(notificationId);
- if (getById(notificationId).getType().equals(event.getType())) {
- boolean filter = false;
- if (event.getType().equals(Event.TYPE_ALARM)) {
- String alarmsAttribute = notification.getString("alarms");
- if (alarmsAttribute == null) {
- filter = true;
- } else {
- List<String> alarms = Arrays.asList(alarmsAttribute.split(","));
- filter = !alarms.contains(event.getString(Position.KEY_ALARM));
- }
- }
- if (!filter) {
- notificators.addAll(notification.getNotificatorsTypes());
+ if (usersToForward != null) {
+ usersToForward.add(userId);
+ }
+ final Set<String> notificators = new HashSet<>();
+ for (long notificationId : getEffectiveNotifications(userId, deviceId, event.getEventTime())) {
+ Notification notification = getById(notificationId);
+ if (getById(notificationId).getType().equals(event.getType())) {
+ boolean filter = false;
+ if (event.getType().equals(Event.TYPE_ALARM)) {
+ String alarmsAttribute = notification.getString("alarms");
+ if (alarmsAttribute == null) {
+ filter = true;
+ } else {
+ List<String> alarms = Arrays.asList(alarmsAttribute.split(","));
+ filter = !alarms.contains(event.getString(Position.KEY_ALARM));
}
}
+ if (!filter) {
+ notificators.addAll(notification.getNotificatorsTypes());
+ }
}
+ }
- if (position != null && position.getAddress() == null
- && geocodeOnRequest && Context.getGeocoder() != null) {
- position.setAddress(Context.getGeocoder()
- .getAddress(position.getLatitude(), position.getLongitude(), null));
- }
+ if (position != null && position.getAddress() == null
+ && geocodeOnRequest && Context.getGeocoder() != null) {
+ position.setAddress(Context.getGeocoder()
+ .getAddress(position.getLatitude(), position.getLongitude(), null));
+ }
- for (String notificator : notificators) {
- Context.getNotificatorManager().getNotificator(notificator).sendAsync(userId, event, position);
- }
+ for (String notificator : notificators) {
+ Context.getNotificatorManager().getNotificator(notificator).sendAsync(userId, event, position);
}
}
if (Context.getEventForwarder() != null) {
diff --git a/src/main/java/org/traccar/database/PermissionsManager.java b/src/main/java/org/traccar/database/PermissionsManager.java
index 46e19d380..61b35b380 100644
--- a/src/main/java/org/traccar/database/PermissionsManager.java
+++ b/src/main/java/org/traccar/database/PermissionsManager.java
@@ -24,7 +24,6 @@ import org.traccar.model.Device;
import org.traccar.model.Driver;
import org.traccar.model.Geofence;
import org.traccar.model.Group;
-import org.traccar.model.Maintenance;
import org.traccar.model.ManagedUser;
import org.traccar.model.Notification;
import org.traccar.model.Permission;
@@ -364,7 +363,6 @@ public class PermissionsManager {
}
Context.getCalendarManager().refreshUserItems();
Context.getDriversManager().refreshUserItems();
- Context.getMaintenancesManager().refreshUserItems();
if (Context.getNotificationManager() != null) {
Context.getNotificationManager().refreshUserItems();
}
@@ -375,7 +373,6 @@ public class PermissionsManager {
Context.getGeofenceManager().refreshExtendedPermissions();
}
Context.getDriversManager().refreshExtendedPermissions();
- Context.getMaintenancesManager().refreshExtendedPermissions();
}
public void refreshPermissions(Permission permission) {
@@ -392,8 +389,6 @@ public class PermissionsManager {
Context.getDriversManager().refreshUserItems();
} else if (permission.getPropertyClass().equals(Calendar.class)) {
Context.getCalendarManager().refreshUserItems();
- } else if (permission.getPropertyClass().equals(Maintenance.class)) {
- Context.getMaintenancesManager().refreshUserItems();
} else if (permission.getPropertyClass().equals(Notification.class)
&& Context.getNotificationManager() != null) {
Context.getNotificationManager().refreshUserItems();
@@ -403,8 +398,6 @@ public class PermissionsManager {
Context.getGeofenceManager().refreshExtendedPermissions();
} else if (permission.getPropertyClass().equals(Driver.class)) {
Context.getDriversManager().refreshExtendedPermissions();
- } else if (permission.getPropertyClass().equals(Maintenance.class)) {
- Context.getMaintenancesManager().refreshExtendedPermissions();
} else if (permission.getPropertyClass().equals(Notification.class)
&& Context.getNotificationManager() != null) {
Context.getNotificationManager().refreshExtendedPermissions();
diff --git a/src/main/java/org/traccar/handler/events/MaintenanceEventHandler.java b/src/main/java/org/traccar/handler/events/MaintenanceEventHandler.java
index 5b9ce4316..be3e9bf8d 100644
--- a/src/main/java/org/traccar/handler/events/MaintenanceEventHandler.java
+++ b/src/main/java/org/traccar/handler/events/MaintenanceEventHandler.java
@@ -20,41 +20,32 @@ import java.util.HashMap;
import java.util.Map;
import io.netty.channel.ChannelHandler;
-import org.traccar.database.IdentityManager;
-import org.traccar.database.MaintenancesManager;
import org.traccar.model.Event;
import org.traccar.model.Maintenance;
import org.traccar.model.Position;
+import org.traccar.session.cache.CacheManager;
import javax.inject.Inject;
@ChannelHandler.Sharable
public class MaintenanceEventHandler extends BaseEventHandler {
- private final IdentityManager identityManager;
- private final MaintenancesManager maintenancesManager;
+ private final CacheManager cacheManager;
@Inject
- public MaintenanceEventHandler(IdentityManager identityManager, MaintenancesManager maintenancesManager) {
- this.identityManager = identityManager;
- this.maintenancesManager = maintenancesManager;
+ public MaintenanceEventHandler(CacheManager cacheManager) {
+ this.cacheManager = cacheManager;
}
@Override
protected Map<Event, Position> analyzePosition(Position position) {
- if (identityManager.getById(position.getDeviceId()) == null
- || !identityManager.isLatestPosition(position)) {
- return null;
- }
-
- Position lastPosition = identityManager.getLastPosition(position.getDeviceId());
- if (lastPosition == null) {
+ Position lastPosition = cacheManager.getPosition(position.getDeviceId());
+ if (lastPosition == null || position.getFixTime().compareTo(lastPosition.getFixTime()) < 0) {
return null;
}
Map<Event, Position> events = new HashMap<>();
- for (long maintenanceId : maintenancesManager.getAllDeviceItems(position.getDeviceId())) {
- Maintenance maintenance = maintenancesManager.getById(maintenanceId);
+ for (Maintenance maintenance : cacheManager.getDeviceObjects(position.getDeviceId(), Maintenance.class)) {
if (maintenance.getPeriod() != 0) {
double oldValue = lastPosition.getDouble(maintenance.getType());
double newValue = position.getDouble(maintenance.getType());
@@ -62,7 +53,7 @@ public class MaintenanceEventHandler extends BaseEventHandler {
&& (long) ((oldValue - maintenance.getStart()) / maintenance.getPeriod())
< (long) ((newValue - maintenance.getStart()) / maintenance.getPeriod())) {
Event event = new Event(Event.TYPE_MAINTENANCE, position);
- event.setMaintenanceId(maintenanceId);
+ event.setMaintenanceId(maintenance.getId());
event.set(maintenance.getType(), newValue);
events.put(event, position);
}
diff --git a/src/main/java/org/traccar/notification/EventForwarder.java b/src/main/java/org/traccar/notification/EventForwarder.java
index c908fedbd..b0494d74d 100644
--- a/src/main/java/org/traccar/notification/EventForwarder.java
+++ b/src/main/java/org/traccar/notification/EventForwarder.java
@@ -1,5 +1,5 @@
/*
- * Copyright 2016 - 2020 Anton Tananaev (anton@traccar.org)
+ * Copyright 2016 - 2022 Anton Tananaev (anton@traccar.org)
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -18,12 +18,15 @@ package org.traccar.notification;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.traccar.Context;
+import org.traccar.Main;
+import org.traccar.config.Config;
import org.traccar.config.Keys;
import org.traccar.model.Device;
import org.traccar.model.Event;
import org.traccar.model.Geofence;
import org.traccar.model.Maintenance;
import org.traccar.model.Position;
+import org.traccar.session.cache.CacheManager;
import javax.ws.rs.client.Entity;
import javax.ws.rs.client.Invocation;
@@ -39,9 +42,12 @@ public class EventForwarder {
private final String url;
private final String header;
- public EventForwarder() {
- url = Context.getConfig().getString(Keys.EVENT_FORWARD_URL);
- header = Context.getConfig().getString(Keys.EVENT_FORWARD_HEADERS);
+ private final CacheManager cacheManager;
+
+ public EventForwarder(Config config) {
+ url = config.getString(Keys.EVENT_FORWARD_URL);
+ header = config.getString(Keys.EVENT_FORWARD_HEADERS);
+ cacheManager = Main.getInjector().getInstance(CacheManager.class);
}
private static final String KEY_POSITION = "position";
@@ -83,18 +89,18 @@ public class EventForwarder {
if (position != null) {
data.put(KEY_POSITION, position);
}
- Device device = Context.getIdentityManager().getById(event.getDeviceId());
+ Device device = cacheManager.getObject(Device.class, event.getDeviceId());
if (device != null) {
data.put(KEY_DEVICE, device);
}
if (event.getGeofenceId() != 0) {
- Geofence geofence = Context.getGeofenceManager().getById(event.getGeofenceId());
+ Geofence geofence = cacheManager.getObject(Geofence.class, event.getGeofenceId());
if (geofence != null) {
data.put(KEY_GEOFENCE, geofence);
}
}
if (event.getMaintenanceId() != 0) {
- Maintenance maintenance = Context.getMaintenancesManager().getById(event.getMaintenanceId());
+ Maintenance maintenance = cacheManager.getObject(Maintenance.class, event.getMaintenanceId());
if (maintenance != null) {
data.put(KEY_MAINTENANCE, maintenance);
}
diff --git a/src/main/java/org/traccar/notification/NotificationFormatter.java b/src/main/java/org/traccar/notification/NotificationFormatter.java
index 9a6723a71..107426e06 100644
--- a/src/main/java/org/traccar/notification/NotificationFormatter.java
+++ b/src/main/java/org/traccar/notification/NotificationFormatter.java
@@ -1,5 +1,5 @@
/*
- * Copyright 2016 - 2021 Anton Tananaev (anton@traccar.org)
+ * Copyright 2016 - 2022 Anton Tananaev (anton@traccar.org)
* Copyright 2017 - 2018 Andrey Kunitsyn (andrey@traccar.org)
*
* Licensed under the Apache License, Version 2.0 (the "License");
@@ -20,19 +20,23 @@ import org.apache.velocity.VelocityContext;
import org.traccar.Context;
import org.traccar.model.Device;
import org.traccar.model.Event;
+import org.traccar.model.Geofence;
+import org.traccar.model.Maintenance;
import org.traccar.model.Position;
import org.traccar.model.User;
import org.traccar.reports.ReportUtils;
+import org.traccar.session.cache.CacheManager;
public final class NotificationFormatter {
private NotificationFormatter() {
}
- public static VelocityContext prepareContext(long userId, Event event, Position position) {
+ public static NotificationMessage formatMessage(
+ CacheManager cacheManager, long userId, Event event, Position position, String templatePath) {
- User user = Context.getPermissionsManager().getUser(userId);
- Device device = Context.getIdentityManager().getById(event.getDeviceId());
+ User user = cacheManager.getObject(User.class, userId);
+ Device device = cacheManager.getObject(Device.class, event.getDeviceId());
VelocityContext velocityContext = TextTemplateFormatter.prepareContext(user);
@@ -45,21 +49,16 @@ public final class NotificationFormatter {
velocityContext.put("volumeUnit", ReportUtils.getVolumeUnit(userId));
}
if (event.getGeofenceId() != 0) {
- velocityContext.put("geofence", Context.getGeofenceManager().getById(event.getGeofenceId()));
+ velocityContext.put("geofence", cacheManager.getObject(Geofence.class, event.getGeofenceId()));
}
if (event.getMaintenanceId() != 0) {
- velocityContext.put("maintenance", Context.getMaintenancesManager().getById(event.getMaintenanceId()));
+ velocityContext.put("maintenance", cacheManager.getObject(Maintenance.class, event.getMaintenanceId()));
}
String driverUniqueId = event.getString(Position.KEY_DRIVER_UNIQUE_ID);
if (driverUniqueId != null) {
velocityContext.put("driver", Context.getDriversManager().getDriverByUniqueId(driverUniqueId));
}
- return velocityContext;
- }
-
- public static NotificationMessage formatMessage(long userId, Event event, Position position, String templatePath) {
- VelocityContext velocityContext = prepareContext(userId, event, position);
return TextTemplateFormatter.formatMessage(velocityContext, event.getType(), templatePath);
}
diff --git a/src/main/java/org/traccar/notificators/NotificatorFirebase.java b/src/main/java/org/traccar/notificators/NotificatorFirebase.java
index f91ec25a0..bcce9a4d8 100644
--- a/src/main/java/org/traccar/notificators/NotificatorFirebase.java
+++ b/src/main/java/org/traccar/notificators/NotificatorFirebase.java
@@ -20,12 +20,14 @@ import com.fasterxml.jackson.annotation.JsonProperty;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.traccar.Context;
+import org.traccar.Main;
import org.traccar.config.Keys;
import org.traccar.model.Event;
import org.traccar.model.Position;
import org.traccar.model.User;
import org.traccar.notification.NotificationMessage;
import org.traccar.notification.NotificationFormatter;
+import org.traccar.session.cache.CacheManager;
import javax.ws.rs.client.Entity;
import javax.ws.rs.client.InvocationCallback;
@@ -69,7 +71,8 @@ public class NotificatorFirebase extends Notificator {
final User user = Context.getPermissionsManager().getUser(userId);
if (user.getAttributes().containsKey("notificationTokens")) {
- NotificationMessage shortMessage = NotificationFormatter.formatMessage(userId, event, position, "short");
+ NotificationMessage shortMessage = NotificationFormatter.formatMessage(
+ Main.getInjector().getInstance(CacheManager.class), userId, event, position, "short");
Notification notification = new Notification();
notification.title = shortMessage.getSubject();
diff --git a/src/main/java/org/traccar/notificators/NotificatorMail.java b/src/main/java/org/traccar/notificators/NotificatorMail.java
index 9b5637ed8..eb7f399eb 100644
--- a/src/main/java/org/traccar/notificators/NotificatorMail.java
+++ b/src/main/java/org/traccar/notificators/NotificatorMail.java
@@ -17,11 +17,13 @@
package org.traccar.notificators;
import org.traccar.Context;
+import org.traccar.Main;
import org.traccar.model.Event;
import org.traccar.model.Position;
import org.traccar.notification.NotificationMessage;
import org.traccar.notification.MessageException;
import org.traccar.notification.NotificationFormatter;
+import org.traccar.session.cache.CacheManager;
import javax.mail.MessagingException;
@@ -30,7 +32,8 @@ public final class NotificatorMail extends Notificator {
@Override
public void sendSync(long userId, Event event, Position position) throws MessageException {
try {
- NotificationMessage fullMessage = NotificationFormatter.formatMessage(userId, event, position, "full");
+ NotificationMessage fullMessage = NotificationFormatter.formatMessage(
+ Main.getInjector().getInstance(CacheManager.class), userId, event, position, "full");
Context.getMailManager().sendMessage(userId, fullMessage.getSubject(), fullMessage.getBody());
} catch (MessagingException e) {
throw new MessageException(e);
diff --git a/src/main/java/org/traccar/notificators/NotificatorPushover.java b/src/main/java/org/traccar/notificators/NotificatorPushover.java
index 456c2fe4f..73fad9bd2 100644
--- a/src/main/java/org/traccar/notificators/NotificatorPushover.java
+++ b/src/main/java/org/traccar/notificators/NotificatorPushover.java
@@ -19,12 +19,14 @@ import com.fasterxml.jackson.annotation.JsonProperty;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.traccar.Context;
+import org.traccar.Main;
import org.traccar.config.Keys;
import org.traccar.model.Event;
import org.traccar.model.Position;
import org.traccar.model.User;
import org.traccar.notification.NotificationFormatter;
import org.traccar.notification.NotificationMessage;
+import org.traccar.session.cache.CacheManager;
import javax.ws.rs.client.Entity;
import javax.ws.rs.client.InvocationCallback;
@@ -77,7 +79,8 @@ public class NotificatorPushover extends Notificator {
return;
}
- NotificationMessage shortMessage = NotificationFormatter.formatMessage(userId, event, position, "short");
+ NotificationMessage shortMessage = NotificationFormatter.formatMessage(
+ Main.getInjector().getInstance(CacheManager.class), userId, event, position, "short");
Message message = new Message();
message.token = token;
diff --git a/src/main/java/org/traccar/notificators/NotificatorSms.java b/src/main/java/org/traccar/notificators/NotificatorSms.java
index fb817b112..09eb65b0c 100644
--- a/src/main/java/org/traccar/notificators/NotificatorSms.java
+++ b/src/main/java/org/traccar/notificators/NotificatorSms.java
@@ -25,6 +25,7 @@ import org.traccar.model.User;
import org.traccar.notification.MessageException;
import org.traccar.notification.NotificationFormatter;
import org.traccar.notification.NotificationMessage;
+import org.traccar.session.cache.CacheManager;
public final class NotificatorSms extends Notificator {
@@ -32,7 +33,8 @@ public final class NotificatorSms extends Notificator {
public void sendAsync(long userId, Event event, Position position) {
final User user = Context.getPermissionsManager().getUser(userId);
if (user.getPhone() != null) {
- NotificationMessage shortMessage = NotificationFormatter.formatMessage(userId, event, position, "short");
+ NotificationMessage shortMessage = NotificationFormatter.formatMessage(
+ Main.getInjector().getInstance(CacheManager.class), userId, event, position, "short");
Main.getInjector().getInstance(StatisticsManager.class).registerSms();
Context.getSmsManager().sendMessageAsync(user.getPhone(),
shortMessage.getBody(), false);
@@ -43,7 +45,8 @@ public final class NotificatorSms extends Notificator {
public void sendSync(long userId, Event event, Position position) throws MessageException, InterruptedException {
final User user = Context.getPermissionsManager().getUser(userId);
if (user.getPhone() != null) {
- NotificationMessage shortMessage = NotificationFormatter.formatMessage(userId, event, position, "short");
+ NotificationMessage shortMessage = NotificationFormatter.formatMessage(
+ Main.getInjector().getInstance(CacheManager.class), userId, event, position, "short");
Main.getInjector().getInstance(StatisticsManager.class).registerSms();
Context.getSmsManager().sendMessageSync(user.getPhone(),
shortMessage.getBody(), false);
diff --git a/src/main/java/org/traccar/notificators/NotificatorTelegram.java b/src/main/java/org/traccar/notificators/NotificatorTelegram.java
index 70148110c..a8e69e77d 100644
--- a/src/main/java/org/traccar/notificators/NotificatorTelegram.java
+++ b/src/main/java/org/traccar/notificators/NotificatorTelegram.java
@@ -20,12 +20,14 @@ import com.fasterxml.jackson.annotation.JsonProperty;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.traccar.Context;
+import org.traccar.Main;
import org.traccar.model.User;
import org.traccar.config.Keys;
import org.traccar.model.Event;
import org.traccar.model.Position;
import org.traccar.notification.NotificationFormatter;
import org.traccar.notification.NotificationMessage;
+import org.traccar.session.cache.CacheManager;
import javax.ws.rs.client.Entity;
import javax.ws.rs.client.InvocationCallback;
@@ -99,7 +101,8 @@ public class NotificatorTelegram extends Notificator {
@Override
public void sendSync(long userId, Event event, Position position) {
User user = Context.getPermissionsManager().getUser(userId);
- NotificationMessage shortMessage = NotificationFormatter.formatMessage(userId, event, position, "short");
+ NotificationMessage shortMessage = NotificationFormatter.formatMessage(
+ Main.getInjector().getInstance(CacheManager.class), userId, event, position, "short");
TextMessage message = new TextMessage();
message.chatId = user.getString("telegramChatId");
diff --git a/src/main/java/org/traccar/reports/Events.java b/src/main/java/org/traccar/reports/Events.java
index e4b905702..818142b16 100644
--- a/src/main/java/org/traccar/reports/Events.java
+++ b/src/main/java/org/traccar/reports/Events.java
@@ -1,5 +1,5 @@
/*
- * Copyright 2016 - 2018 Anton Tananaev (anton@traccar.org)
+ * Copyright 2016 - 2022 Anton Tananaev (anton@traccar.org)
* Copyright 2016 - 2018 Andrey Kunitsyn (andrey@traccar.org)
*
* Licensed under the Apache License, Version 2.0 (the "License");
@@ -34,6 +34,7 @@ import org.traccar.model.Geofence;
import org.traccar.model.Group;
import org.traccar.model.Maintenance;
import org.traccar.reports.model.DeviceReport;
+import org.traccar.storage.Storage;
import org.traccar.storage.StorageException;
public final class Events {
@@ -41,7 +42,9 @@ public final class Events {
private Events() {
}
- public static Collection<Event> getObjects(long userId, Collection<Long> deviceIds, Collection<Long> groupIds,
+ public static Collection<Event> getObjects(
+ Storage storage, long userId,
+ Collection<Long> deviceIds, Collection<Long> groupIds,
Collection<String> types, Date from, Date to) throws StorageException {
ReportUtils.checkPeriodLimit(from, to);
ArrayList<Event> result = new ArrayList<>();
@@ -53,9 +56,9 @@ public final class Events {
if (all || types.contains(event.getType())) {
long geofenceId = event.getGeofenceId();
long maintenanceId = event.getMaintenanceId();
- if ((geofenceId == 0 || Context.getGeofenceManager().checkItemPermission(userId, geofenceId))
+ if ((geofenceId == 0 || ReportUtils.getObject(storage, userId, Geofence.class, geofenceId) != null)
&& (maintenanceId == 0
- || Context.getMaintenancesManager().checkItemPermission(userId, maintenanceId))) {
+ || ReportUtils.getObject(storage, userId, Maintenance.class, maintenanceId) != null)) {
result.add(event);
}
}
@@ -64,8 +67,9 @@ public final class Events {
return result;
}
- public static void getExcel(OutputStream outputStream,
- long userId, Collection<Long> deviceIds, Collection<Long> groupIds,
+ public static void getExcel(
+ OutputStream outputStream, Storage storage, long userId,
+ Collection<Long> deviceIds, Collection<Long> groupIds,
Collection<String> types, Date from, Date to) throws StorageException, IOException {
ReportUtils.checkPeriodLimit(from, to);
ArrayList<DeviceReport> devicesEvents = new ArrayList<>();
@@ -82,20 +86,18 @@ public final class Events {
long geofenceId = event.getGeofenceId();
long maintenanceId = event.getMaintenanceId();
if (geofenceId != 0) {
- if (Context.getGeofenceManager().checkItemPermission(userId, geofenceId)) {
- Geofence geofence = Context.getGeofenceManager().getById(geofenceId);
- if (geofence != null) {
- geofenceNames.put(geofenceId, geofence.getName());
- }
+ Geofence geofence = ReportUtils.getObject(
+ storage, userId, Geofence.class, geofenceId);
+ if (geofence != null) {
+ geofenceNames.put(geofenceId, geofence.getName());
} else {
iterator.remove();
}
} else if (maintenanceId != 0) {
- if (Context.getMaintenancesManager().checkItemPermission(userId, maintenanceId)) {
- Maintenance maintenance = Context.getMaintenancesManager().getById(maintenanceId);
- if (maintenance != null) {
- maintenanceNames.put(maintenanceId, maintenance.getName());
- }
+ Maintenance maintenance = ReportUtils.getObject(
+ storage, userId, Maintenance.class, maintenanceId);
+ if (maintenance != null) {
+ maintenanceNames.put(maintenanceId, maintenance.getName());
} else {
iterator.remove();
}
diff --git a/src/main/java/org/traccar/reports/ReportUtils.java b/src/main/java/org/traccar/reports/ReportUtils.java
index 413d49ad7..98a80a23e 100644
--- a/src/main/java/org/traccar/reports/ReportUtils.java
+++ b/src/main/java/org/traccar/reports/ReportUtils.java
@@ -31,6 +31,8 @@ import org.traccar.database.DeviceManager;
import org.traccar.database.IdentityManager;
import org.traccar.handler.events.MotionEventHandler;
import org.traccar.helper.UnitsConverter;
+import org.traccar.model.BaseModel;
+import org.traccar.model.User;
import org.traccar.session.DeviceState;
import org.traccar.model.Driver;
import org.traccar.model.Event;
@@ -39,6 +41,11 @@ import org.traccar.reports.model.BaseReport;
import org.traccar.reports.model.StopReport;
import org.traccar.reports.model.TripReport;
import org.traccar.reports.model.TripsConfig;
+import org.traccar.storage.Storage;
+import org.traccar.storage.StorageException;
+import org.traccar.storage.query.Columns;
+import org.traccar.storage.query.Condition;
+import org.traccar.storage.query.Request;
import java.io.IOException;
import java.io.InputStream;
@@ -59,6 +66,15 @@ public final class ReportUtils {
private ReportUtils() {
}
+ public static <T extends BaseModel> T getObject(
+ Storage storage, long userId, Class<T> clazz, long objectId) throws StorageException, SecurityException {
+ return storage.getObject(clazz, new Request(
+ new Columns.Include("id"),
+ new Condition.And(
+ new Condition.Equals("id", "id", objectId),
+ new Condition.Permission(User.class, userId, clazz))));
+ }
+
public static void checkPeriodLimit(Date from, Date to) {
long limit = Context.getConfig().getLong(Keys.REPORT_PERIOD_LIMIT) * 1000;
if (limit > 0 && to.getTime() - from.getTime() > limit) {