aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/main/java/org/traccar/BaseProtocolDecoder.java11
-rw-r--r--src/main/java/org/traccar/BaseProtocolEncoder.java15
-rw-r--r--src/main/java/org/traccar/Context.java9
-rw-r--r--src/main/java/org/traccar/MainEventHandler.java14
-rw-r--r--src/main/java/org/traccar/MainModule.java6
-rw-r--r--src/main/java/org/traccar/WebDataHandler.java10
-rw-r--r--src/main/java/org/traccar/api/resource/AttributeResource.java4
-rw-r--r--src/main/java/org/traccar/database/DeviceManager.java2
-rw-r--r--src/main/java/org/traccar/database/IdentityManager.java24
-rw-r--r--src/main/java/org/traccar/handler/ComputedAttributesHandler.java8
-rw-r--r--src/main/java/org/traccar/protocol/CastelProtocolEncoder.java4
-rw-r--r--src/main/java/org/traccar/protocol/GalileoProtocolDecoder.java3
-rw-r--r--src/main/java/org/traccar/protocol/Gt06ProtocolDecoder.java7
-rw-r--r--src/main/java/org/traccar/protocol/MeiligaoProtocolDecoder.java3
-rw-r--r--src/main/java/org/traccar/protocol/MeitrackProtocolDecoder.java3
-rw-r--r--src/main/java/org/traccar/protocol/PretraceProtocolEncoder.java2
-rw-r--r--src/main/java/org/traccar/protocol/Pt502ProtocolDecoder.java3
-rw-r--r--src/main/java/org/traccar/protocol/TeltonikaProtocolDecoder.java8
-rw-r--r--src/main/java/org/traccar/reports/EventsReportProvider.java3
-rw-r--r--src/main/java/org/traccar/reports/RouteReportProvider.java3
-rw-r--r--src/main/java/org/traccar/reports/StopsReportProvider.java3
-rw-r--r--src/main/java/org/traccar/reports/SummaryReportProvider.java6
-rw-r--r--src/main/java/org/traccar/reports/TripsReportProvider.java3
-rw-r--r--src/main/java/org/traccar/reports/common/ReportUtils.java18
-rw-r--r--src/test/java/org/traccar/BaseTest.java9
-rw-r--r--src/test/java/org/traccar/WebDataHandlerTest.java8
-rw-r--r--src/test/java/org/traccar/handler/ComputedAttributesTest.java2
-rw-r--r--src/test/java/org/traccar/reports/ReportUtilsTest.java43
28 files changed, 75 insertions, 159 deletions
diff --git a/src/main/java/org/traccar/BaseProtocolDecoder.java b/src/main/java/org/traccar/BaseProtocolDecoder.java
index f7e726f02..382daf92f 100644
--- a/src/main/java/org/traccar/BaseProtocolDecoder.java
+++ b/src/main/java/org/traccar/BaseProtocolDecoder.java
@@ -19,7 +19,6 @@ import io.netty.buffer.ByteBuf;
import io.netty.channel.Channel;
import org.traccar.config.Keys;
import org.traccar.database.CommandsManager;
-import org.traccar.database.IdentityManager;
import org.traccar.database.MediaManager;
import org.traccar.database.StatisticsManager;
import org.traccar.helper.UnitsConverter;
@@ -47,7 +46,6 @@ public abstract class BaseProtocolDecoder extends ExtendedObjectDecoder {
private final Protocol protocol;
- private IdentityManager identityManager;
private CacheManager cacheManager;
private ConnectionManager connectionManager;
private StatisticsManager statisticsManager;
@@ -58,15 +56,6 @@ public abstract class BaseProtocolDecoder extends ExtendedObjectDecoder {
this.protocol = protocol;
}
- public IdentityManager getIdentityManager() {
- return identityManager;
- }
-
- @Inject
- public void setIdentityManager(IdentityManager identityManager) {
- this.identityManager = identityManager;
- }
-
public CacheManager getCacheManager() {
return cacheManager;
}
diff --git a/src/main/java/org/traccar/BaseProtocolEncoder.java b/src/main/java/org/traccar/BaseProtocolEncoder.java
index 612d91c57..bc1180a08 100644
--- a/src/main/java/org/traccar/BaseProtocolEncoder.java
+++ b/src/main/java/org/traccar/BaseProtocolEncoder.java
@@ -21,10 +21,10 @@ import io.netty.channel.ChannelOutboundHandlerAdapter;
import io.netty.channel.ChannelPromise;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import org.traccar.database.IdentityManager;
import org.traccar.helper.NetworkUtil;
import org.traccar.helper.model.AttributeUtil;
import org.traccar.model.Command;
+import org.traccar.model.Device;
import org.traccar.session.cache.CacheManager;
import javax.inject.Inject;
@@ -39,8 +39,6 @@ public abstract class BaseProtocolEncoder extends ChannelOutboundHandlerAdapter
private CacheManager cacheManager;
- private IdentityManager identityManager;
-
public BaseProtocolEncoder(Protocol protocol) {
this.protocol = protocol;
}
@@ -54,21 +52,12 @@ public abstract class BaseProtocolEncoder extends ChannelOutboundHandlerAdapter
this.cacheManager = cacheManager;
}
- public IdentityManager getIdentityManager() {
- return identityManager;
- }
-
- @Inject
- public void setIdentityManager(IdentityManager identityManager) {
- this.identityManager = identityManager;
- }
-
public String getProtocolName() {
return protocol != null ? protocol.getName() : PROTOCOL_UNKNOWN;
}
protected String getUniqueId(long deviceId) {
- return identityManager.getById(deviceId).getUniqueId();
+ return cacheManager.getObject(Device.class, deviceId).getUniqueId();
}
protected void initDevicePassword(Command command, String defaultPassword) {
diff --git a/src/main/java/org/traccar/Context.java b/src/main/java/org/traccar/Context.java
index c549b20c2..45d075912 100644
--- a/src/main/java/org/traccar/Context.java
+++ b/src/main/java/org/traccar/Context.java
@@ -19,7 +19,6 @@ import org.traccar.config.Config;
import org.traccar.database.BaseObjectManager;
import org.traccar.database.DataManager;
import org.traccar.database.DeviceManager;
-import org.traccar.database.IdentityManager;
import org.traccar.database.PermissionsManager;
import org.traccar.helper.Log;
import org.traccar.model.BaseModel;
@@ -37,12 +36,6 @@ public final class Context {
return config;
}
- private static IdentityManager identityManager;
-
- public static IdentityManager getIdentityManager() {
- return identityManager;
- }
-
private static DeviceManager deviceManager;
public static DeviceManager getDeviceManager() {
@@ -70,8 +63,6 @@ public final class Context {
config,
Main.getInjector().getInstance(DataManager.class));
- identityManager = deviceManager;
-
permissionsManager = new PermissionsManager(
Main.getInjector().getInstance(DataManager.class),
Main.getInjector().getInstance(Storage.class));
diff --git a/src/main/java/org/traccar/MainEventHandler.java b/src/main/java/org/traccar/MainEventHandler.java
index e1aee3cc8..d2665cbcc 100644
--- a/src/main/java/org/traccar/MainEventHandler.java
+++ b/src/main/java/org/traccar/MainEventHandler.java
@@ -74,12 +74,14 @@ public class MainEventHandler extends ChannelInboundHandlerAdapter {
if (msg instanceof Position) {
Position position = (Position) msg;
+ Device device = cacheManager.getObject(Device.class, position.getDeviceId());
+
try {
if (PositionUtil.isLatest(cacheManager, position)) {
- Device device = new Device();
- device.setId(position.getDeviceId());
- device.setPositionId(position.getId());
- storage.updateObject(device, new Request(
+ Device updatedDevice = new Device();
+ updatedDevice.setId(position.getDeviceId());
+ updatedDevice.setPositionId(position.getId());
+ storage.updateObject(updatedDevice, new Request(
new Columns.Include("positionId"),
new Condition.Equals("id", "id")));
@@ -92,11 +94,9 @@ public class MainEventHandler extends ChannelInboundHandlerAdapter {
LOGGER.warn("Failed to update device", error);
}
- String uniqueId = Context.getIdentityManager().getById(position.getDeviceId()).getUniqueId();
-
StringBuilder builder = new StringBuilder();
builder.append("[").append(NetworkUtil.session(ctx.channel())).append("] ");
- builder.append("id: ").append(uniqueId);
+ builder.append("id: ").append(device.getUniqueId());
for (String attribute : logAttributes) {
switch (attribute) {
case "time":
diff --git a/src/main/java/org/traccar/MainModule.java b/src/main/java/org/traccar/MainModule.java
index a7e531808..d57ee5d38 100644
--- a/src/main/java/org/traccar/MainModule.java
+++ b/src/main/java/org/traccar/MainModule.java
@@ -31,7 +31,6 @@ import org.traccar.broadcast.BroadcastService;
import org.traccar.config.Config;
import org.traccar.config.Keys;
import org.traccar.database.DeviceManager;
-import org.traccar.database.IdentityManager;
import org.traccar.database.LdapProvider;
import org.traccar.database.StatisticsManager;
import org.traccar.geocoder.AddressFormat;
@@ -109,11 +108,6 @@ public class MainModule extends AbstractModule {
}
@Provides
- public static IdentityManager provideIdentityManager() {
- return Context.getIdentityManager();
- }
-
- @Provides
public static Client provideClient() {
return ClientBuilder.newClient().register(
(ContextResolver<ObjectMapper>) clazz -> Main.getInjector().getInstance(ObjectMapper.class));
diff --git a/src/main/java/org/traccar/WebDataHandler.java b/src/main/java/org/traccar/WebDataHandler.java
index db99ecaf8..192a15bcf 100644
--- a/src/main/java/org/traccar/WebDataHandler.java
+++ b/src/main/java/org/traccar/WebDataHandler.java
@@ -26,7 +26,6 @@ import org.slf4j.LoggerFactory;
import org.traccar.config.Config;
import org.traccar.config.Keys;
-import org.traccar.database.IdentityManager;
import org.traccar.helper.Checksum;
import org.traccar.model.Device;
import org.traccar.model.Position;
@@ -62,7 +61,6 @@ public class WebDataHandler extends BaseDataHandler {
private static final String KEY_DEVICE = "device";
private final CacheManager cacheManager;
- private final IdentityManager identityManager;
private final ObjectMapper objectMapper;
private final Client client;
@@ -80,11 +78,9 @@ public class WebDataHandler extends BaseDataHandler {
@Inject
public WebDataHandler(
- Config config, CacheManager cacheManager, IdentityManager identityManager,
- ObjectMapper objectMapper, Client client) {
+ Config config, CacheManager cacheManager, ObjectMapper objectMapper, Client client) {
this.cacheManager = cacheManager;
- this.identityManager = identityManager;
this.objectMapper = objectMapper;
this.client = client;
this.url = config.getString(Keys.FORWARD_URL);
@@ -138,7 +134,7 @@ public class WebDataHandler extends BaseDataHandler {
public String formatRequest(Position position) throws UnsupportedEncodingException, JsonProcessingException {
- Device device = identityManager.getById(position.getDeviceId());
+ Device device = cacheManager.getObject(Device.class, position.getDeviceId());
String request = url
.replace("{name}", URLEncoder.encode(device.getName(), StandardCharsets.UTF_8.name()))
@@ -302,7 +298,7 @@ public class WebDataHandler extends BaseDataHandler {
private Map<String, Object> prepareJsonPayload(Position position) {
Map<String, Object> data = new HashMap<>();
- Device device = identityManager.getById(position.getDeviceId());
+ Device device = cacheManager.getObject(Device.class, position.getDeviceId());
data.put(KEY_POSITION, position);
diff --git a/src/main/java/org/traccar/api/resource/AttributeResource.java b/src/main/java/org/traccar/api/resource/AttributeResource.java
index 43d8a7ccd..fb74b9bbe 100644
--- a/src/main/java/org/traccar/api/resource/AttributeResource.java
+++ b/src/main/java/org/traccar/api/resource/AttributeResource.java
@@ -28,7 +28,6 @@ import javax.ws.rs.QueryParam;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;
-import org.traccar.Context;
import org.traccar.api.ExtendedObjectResource;
import org.traccar.config.Config;
import org.traccar.model.Attribute;
@@ -62,8 +61,7 @@ public class AttributeResource extends ExtendedObjectResource<Attribute> {
new Columns.All(),
new Condition.LatestPositions(deviceId)));
- Object result = new ComputedAttributesHandler(config, Context.getIdentityManager(), null)
- .computeAttribute(entity, position);
+ Object result = new ComputedAttributesHandler(config, null).computeAttribute(entity, position);
if (result != null) {
switch (entity.getType()) {
case "number":
diff --git a/src/main/java/org/traccar/database/DeviceManager.java b/src/main/java/org/traccar/database/DeviceManager.java
index 4516255c1..d6c442f10 100644
--- a/src/main/java/org/traccar/database/DeviceManager.java
+++ b/src/main/java/org/traccar/database/DeviceManager.java
@@ -27,7 +27,7 @@ import java.util.Set;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.atomic.AtomicLong;
-public class DeviceManager extends BaseObjectManager<Device> implements IdentityManager {
+public class DeviceManager extends BaseObjectManager<Device> {
private final long dataRefreshDelay;
diff --git a/src/main/java/org/traccar/database/IdentityManager.java b/src/main/java/org/traccar/database/IdentityManager.java
deleted file mode 100644
index 1e0eb00c5..000000000
--- a/src/main/java/org/traccar/database/IdentityManager.java
+++ /dev/null
@@ -1,24 +0,0 @@
-/*
- * Copyright 2015 - 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.
- * 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.Device;
-
-public interface IdentityManager {
-
- Device getById(long id);
-
-}
diff --git a/src/main/java/org/traccar/handler/ComputedAttributesHandler.java b/src/main/java/org/traccar/handler/ComputedAttributesHandler.java
index bec3d38e0..82ac4e804 100644
--- a/src/main/java/org/traccar/handler/ComputedAttributesHandler.java
+++ b/src/main/java/org/traccar/handler/ComputedAttributesHandler.java
@@ -34,7 +34,6 @@ import org.slf4j.LoggerFactory;
import org.traccar.BaseDataHandler;
import org.traccar.config.Config;
import org.traccar.config.Keys;
-import org.traccar.database.IdentityManager;
import org.traccar.model.Attribute;
import org.traccar.model.Device;
import org.traccar.model.Position;
@@ -47,7 +46,6 @@ public class ComputedAttributesHandler extends BaseDataHandler {
private static final Logger LOGGER = LoggerFactory.getLogger(ComputedAttributesHandler.class);
- private final IdentityManager identityManager;
private final CacheManager cacheManager;
private final JexlEngine engine;
@@ -55,9 +53,7 @@ public class ComputedAttributesHandler extends BaseDataHandler {
private final boolean includeDeviceAttributes;
@Inject
- public ComputedAttributesHandler(
- Config config, IdentityManager identityManager, CacheManager cacheManager) {
- this.identityManager = identityManager;
+ public ComputedAttributesHandler(Config config, CacheManager cacheManager) {
this.cacheManager = cacheManager;
engine = new JexlEngine();
engine.setStrict(true);
@@ -68,7 +64,7 @@ public class ComputedAttributesHandler extends BaseDataHandler {
private MapContext prepareContext(Position position) {
MapContext result = new MapContext();
if (includeDeviceAttributes) {
- Device device = identityManager.getById(position.getDeviceId());
+ Device device = cacheManager.getObject(Device.class, position.getDeviceId());
if (device != null) {
for (Object key : device.getAttributes().keySet()) {
result.set((String) key, device.getAttributes().get(key));
diff --git a/src/main/java/org/traccar/protocol/CastelProtocolEncoder.java b/src/main/java/org/traccar/protocol/CastelProtocolEncoder.java
index 0fb4bf8b4..61dde3e80 100644
--- a/src/main/java/org/traccar/protocol/CastelProtocolEncoder.java
+++ b/src/main/java/org/traccar/protocol/CastelProtocolEncoder.java
@@ -1,5 +1,5 @@
/*
- * Copyright 2018 - 2019 Anton Tananaev (anton@traccar.org)
+ * Copyright 2018 - 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.
@@ -33,7 +33,7 @@ public class CastelProtocolEncoder extends BaseProtocolEncoder {
private ByteBuf encodeContent(long deviceId, short type, ByteBuf content) {
ByteBuf buf = Unpooled.buffer(0);
- String uniqueId = getIdentityManager().getById(deviceId).getUniqueId();
+ String uniqueId = getUniqueId(deviceId);
buf.writeByte('@');
buf.writeByte('@');
diff --git a/src/main/java/org/traccar/protocol/GalileoProtocolDecoder.java b/src/main/java/org/traccar/protocol/GalileoProtocolDecoder.java
index a2ba7b029..bf14d47e0 100644
--- a/src/main/java/org/traccar/protocol/GalileoProtocolDecoder.java
+++ b/src/main/java/org/traccar/protocol/GalileoProtocolDecoder.java
@@ -320,14 +320,13 @@ public class GalileoProtocolDecoder extends BaseProtocolDecoder {
} else {
DeviceSession deviceSession = getDeviceSession(channel, remoteAddress);
- String uniqueId = getIdentityManager().getById(deviceSession.getDeviceId()).getUniqueId();
position = new Position(getProtocolName());
position.setDeviceId(deviceSession.getDeviceId());
getLastLocation(position, null);
- position.set(Position.KEY_IMAGE, writeMediaFile(uniqueId, photo, "jpg"));
+ position.set(Position.KEY_IMAGE, writeMediaFile(deviceSession.getUniqueId(), photo, "jpg"));
photo.release();
photo = null;
diff --git a/src/main/java/org/traccar/protocol/Gt06ProtocolDecoder.java b/src/main/java/org/traccar/protocol/Gt06ProtocolDecoder.java
index 4b9757874..c53fbfe5a 100644
--- a/src/main/java/org/traccar/protocol/Gt06ProtocolDecoder.java
+++ b/src/main/java/org/traccar/protocol/Gt06ProtocolDecoder.java
@@ -31,7 +31,6 @@ import org.traccar.helper.Parser;
import org.traccar.helper.PatternBuilder;
import org.traccar.helper.UnitsConverter;
import org.traccar.model.CellTower;
-import org.traccar.model.Device;
import org.traccar.model.Network;
import org.traccar.model.Position;
import org.traccar.model.WifiAccessPoint;
@@ -1026,8 +1025,7 @@ public class Gt06ProtocolDecoder extends BaseProtocolDecoder {
if (photo.writableBytes() > 0) {
sendPhotoRequest(channel, pictureId);
} else {
- Device device = getIdentityManager().getById(deviceSession.getDeviceId());
- position.set(Position.KEY_IMAGE, writeMediaFile(device.getUniqueId(), photo, "jpg"));
+ position.set(Position.KEY_IMAGE, writeMediaFile(deviceSession.getUniqueId(), photo, "jpg"));
photos.remove(pictureId).release();
}
@@ -1262,8 +1260,7 @@ public class Gt06ProtocolDecoder extends BaseProtocolDecoder {
position = new Position(getProtocolName());
position.setDeviceId(deviceSession.getDeviceId());
getLastLocation(position, new Date(timestamp));
- Device device = getIdentityManager().getById(deviceSession.getDeviceId());
- position.set(Position.KEY_IMAGE, writeMediaFile(device.getUniqueId(), photo, "jpg"));
+ position.set(Position.KEY_IMAGE, writeMediaFile(deviceSession.getUniqueId(), photo, "jpg"));
photos.remove(mediaId).release();
}
}
diff --git a/src/main/java/org/traccar/protocol/MeiligaoProtocolDecoder.java b/src/main/java/org/traccar/protocol/MeiligaoProtocolDecoder.java
index 0b6bf8663..f3b56973a 100644
--- a/src/main/java/org/traccar/protocol/MeiligaoProtocolDecoder.java
+++ b/src/main/java/org/traccar/protocol/MeiligaoProtocolDecoder.java
@@ -468,10 +468,9 @@ public class MeiligaoProtocolDecoder extends BaseProtocolDecoder {
} else if (command == MSG_POSITION_IMAGE) {
byte imageIndex = buf.readByte();
buf.readUnsignedByte(); // image upload type
- String uniqueId = getIdentityManager().getById(deviceSession.getDeviceId()).getUniqueId();
ByteBuf photo = photos.remove(imageIndex);
try {
- position.set(Position.KEY_IMAGE, writeMediaFile(uniqueId, photo, "jpg"));
+ position.set(Position.KEY_IMAGE, writeMediaFile(deviceSession.getUniqueId(), photo, "jpg"));
} finally {
photo.release();
}
diff --git a/src/main/java/org/traccar/protocol/MeitrackProtocolDecoder.java b/src/main/java/org/traccar/protocol/MeitrackProtocolDecoder.java
index 30689436d..87459d3fc 100644
--- a/src/main/java/org/traccar/protocol/MeitrackProtocolDecoder.java
+++ b/src/main/java/org/traccar/protocol/MeitrackProtocolDecoder.java
@@ -19,6 +19,7 @@ import io.netty.buffer.ByteBuf;
import io.netty.buffer.Unpooled;
import io.netty.channel.Channel;
import org.traccar.BaseProtocolDecoder;
+import org.traccar.model.Device;
import org.traccar.session.DeviceSession;
import org.traccar.NetworkMessage;
import org.traccar.Protocol;
@@ -203,7 +204,7 @@ public class MeitrackProtocolDecoder extends BaseProtocolDecoder {
position.set(Position.PREFIX_ADC + i, parser.nextHexInt());
}
- String deviceModel = getIdentityManager().getById(deviceSession.getDeviceId()).getModel();
+ String deviceModel = getCacheManager().getObject(Device.class, deviceSession.getDeviceId()).getModel();
if (deviceModel == null) {
deviceModel = "";
}
diff --git a/src/main/java/org/traccar/protocol/PretraceProtocolEncoder.java b/src/main/java/org/traccar/protocol/PretraceProtocolEncoder.java
index 106ba9537..a109e7a07 100644
--- a/src/main/java/org/traccar/protocol/PretraceProtocolEncoder.java
+++ b/src/main/java/org/traccar/protocol/PretraceProtocolEncoder.java
@@ -34,7 +34,7 @@ public class PretraceProtocolEncoder extends BaseProtocolEncoder {
@Override
protected Object encodeCommand(Command command) {
- String uniqueId = getIdentityManager().getById(command.getDeviceId()).getUniqueId();
+ String uniqueId = getUniqueId(command.getDeviceId());
switch (command.getType()) {
case Command.TYPE_CUSTOM:
diff --git a/src/main/java/org/traccar/protocol/Pt502ProtocolDecoder.java b/src/main/java/org/traccar/protocol/Pt502ProtocolDecoder.java
index 21b91203f..2a6a81a65 100644
--- a/src/main/java/org/traccar/protocol/Pt502ProtocolDecoder.java
+++ b/src/main/java/org/traccar/protocol/Pt502ProtocolDecoder.java
@@ -174,14 +174,13 @@ public class Pt502ProtocolDecoder extends BaseProtocolDecoder {
} else {
DeviceSession deviceSession = getDeviceSession(channel, remoteAddress);
- String uniqueId = getIdentityManager().getById(deviceSession.getDeviceId()).getUniqueId();
Position position = new Position(getProtocolName());
position.setDeviceId(deviceSession.getDeviceId());
getLastLocation(position, null);
- position.set(Position.KEY_IMAGE, writeMediaFile(uniqueId, photo, "jpg"));
+ position.set(Position.KEY_IMAGE, writeMediaFile(deviceSession.getUniqueId(), photo, "jpg"));
photo.release();
photo = null;
diff --git a/src/main/java/org/traccar/protocol/TeltonikaProtocolDecoder.java b/src/main/java/org/traccar/protocol/TeltonikaProtocolDecoder.java
index f91eef837..77047fe26 100644
--- a/src/main/java/org/traccar/protocol/TeltonikaProtocolDecoder.java
+++ b/src/main/java/org/traccar/protocol/TeltonikaProtocolDecoder.java
@@ -119,7 +119,8 @@ public class TeltonikaProtocolDecoder extends BaseProtocolDecoder {
return printable;
}
- private void decodeSerial(Channel channel, SocketAddress remoteAddress, Position position, ByteBuf buf) {
+ private void decodeSerial(
+ Channel channel, SocketAddress remoteAddress, DeviceSession deviceSession, Position position, ByteBuf buf) {
getLastLocation(position, null);
@@ -148,10 +149,9 @@ public class TeltonikaProtocolDecoder extends BaseProtocolDecoder {
channel, remoteAddress, photoId,
photo.writerIndex(), Math.min(IMAGE_PACKET_MAX, photo.writableBytes()));
} else {
- String uniqueId = getIdentityManager().getById(position.getDeviceId()).getUniqueId();
photos.remove(photoId);
try {
- position.set(Position.KEY_IMAGE, writeMediaFile(uniqueId, photo, "jpg"));
+ position.set(Position.KEY_IMAGE, writeMediaFile(deviceSession.getUniqueId(), photo, "jpg"));
} finally {
photo.release();
}
@@ -601,7 +601,7 @@ public class TeltonikaProtocolDecoder extends BaseProtocolDecoder {
ByteBufUtil.hexDump(buf.readSlice(length)));
}
} else if (codec == CODEC_12) {
- decodeSerial(channel, remoteAddress, position, buf);
+ decodeSerial(channel, remoteAddress, deviceSession, position, buf);
} else {
decodeLocation(position, buf, codec);
}
diff --git a/src/main/java/org/traccar/reports/EventsReportProvider.java b/src/main/java/org/traccar/reports/EventsReportProvider.java
index 4db842fdb..69d95d1be 100644
--- a/src/main/java/org/traccar/reports/EventsReportProvider.java
+++ b/src/main/java/org/traccar/reports/EventsReportProvider.java
@@ -17,7 +17,6 @@
package org.traccar.reports;
import org.apache.poi.ss.util.WorkbookUtil;
-import org.traccar.Context;
import org.traccar.config.Config;
import org.traccar.config.Keys;
import org.traccar.model.Device;
@@ -133,7 +132,7 @@ public class EventsReportProvider {
}
}
DeviceReportSection deviceEvents = new DeviceReportSection();
- Device device = Context.getIdentityManager().getById(deviceId);
+ Device device = reportUtils.getDevice(deviceId);
deviceEvents.setDeviceName(device.getName());
sheetNames.add(WorkbookUtil.createSafeSheetName(deviceEvents.getDeviceName()));
if (device.getGroupId() > 0) {
diff --git a/src/main/java/org/traccar/reports/RouteReportProvider.java b/src/main/java/org/traccar/reports/RouteReportProvider.java
index b4401bc87..2364cc0f3 100644
--- a/src/main/java/org/traccar/reports/RouteReportProvider.java
+++ b/src/main/java/org/traccar/reports/RouteReportProvider.java
@@ -17,7 +17,6 @@
package org.traccar.reports;
import org.apache.poi.ss.util.WorkbookUtil;
-import org.traccar.Context;
import org.traccar.config.Config;
import org.traccar.config.Keys;
import org.traccar.helper.model.PositionUtil;
@@ -79,7 +78,7 @@ public class RouteReportProvider {
for (long deviceId: reportUtils.getDeviceList(deviceIds, groupIds)) {
var positions = PositionUtil.getPositions(storage, deviceId, from, to);
DeviceReportSection deviceRoutes = new DeviceReportSection();
- Device device = Context.getIdentityManager().getById(deviceId);
+ Device device = reportUtils.getDevice(deviceId);
deviceRoutes.setDeviceName(device.getName());
sheetNames.add(WorkbookUtil.createSafeSheetName(deviceRoutes.getDeviceName()));
if (device.getGroupId() > 0) {
diff --git a/src/main/java/org/traccar/reports/StopsReportProvider.java b/src/main/java/org/traccar/reports/StopsReportProvider.java
index 192d7a0f7..3b1f3c1fe 100644
--- a/src/main/java/org/traccar/reports/StopsReportProvider.java
+++ b/src/main/java/org/traccar/reports/StopsReportProvider.java
@@ -17,7 +17,6 @@
package org.traccar.reports;
import org.apache.poi.ss.util.WorkbookUtil;
-import org.traccar.Context;
import org.traccar.config.Config;
import org.traccar.config.Keys;
import org.traccar.helper.model.PositionUtil;
@@ -86,7 +85,7 @@ public class StopsReportProvider {
for (long deviceId: reportUtils.getDeviceList(deviceIds, groupIds)) {
Collection<StopReportItem> stops = detectStops(deviceId, from, to);
DeviceReportSection deviceStops = new DeviceReportSection();
- Device device = Context.getIdentityManager().getById(deviceId);
+ Device device = reportUtils.getDevice(deviceId);
deviceStops.setDeviceName(device.getName());
sheetNames.add(WorkbookUtil.createSafeSheetName(deviceStops.getDeviceName()));
if (device.getGroupId() > 0) {
diff --git a/src/main/java/org/traccar/reports/SummaryReportProvider.java b/src/main/java/org/traccar/reports/SummaryReportProvider.java
index f3a9786b9..1f136adeb 100644
--- a/src/main/java/org/traccar/reports/SummaryReportProvider.java
+++ b/src/main/java/org/traccar/reports/SummaryReportProvider.java
@@ -17,7 +17,6 @@
package org.traccar.reports;
import org.jxls.util.JxlsHelper;
-import org.traccar.Context;
import org.traccar.api.security.PermissionsService;
import org.traccar.config.Config;
import org.traccar.config.Keys;
@@ -58,10 +57,11 @@ public class SummaryReportProvider {
this.storage = storage;
}
- private SummaryReportItem calculateSummaryResult(long deviceId, Collection<Position> positions) {
+ private SummaryReportItem calculateSummaryResult(
+ long deviceId, Collection<Position> positions) throws StorageException {
SummaryReportItem result = new SummaryReportItem();
result.setDeviceId(deviceId);
- result.setDeviceName(Context.getIdentityManager().getById(deviceId).getName());
+ result.setDeviceName(reportUtils.getDevice(deviceId).getName());
if (positions != null && !positions.isEmpty()) {
Position firstPosition = null;
Position previousPosition = null;
diff --git a/src/main/java/org/traccar/reports/TripsReportProvider.java b/src/main/java/org/traccar/reports/TripsReportProvider.java
index 928609b9e..95612ab30 100644
--- a/src/main/java/org/traccar/reports/TripsReportProvider.java
+++ b/src/main/java/org/traccar/reports/TripsReportProvider.java
@@ -17,7 +17,6 @@
package org.traccar.reports;
import org.apache.poi.ss.util.WorkbookUtil;
-import org.traccar.Context;
import org.traccar.config.Config;
import org.traccar.config.Keys;
import org.traccar.helper.model.PositionUtil;
@@ -85,7 +84,7 @@ public class TripsReportProvider {
for (long deviceId: reportUtils.getDeviceList(deviceIds, groupIds)) {
Collection<TripReportItem> trips = detectTrips(deviceId, from, to);
DeviceReportSection deviceTrips = new DeviceReportSection();
- Device device = Context.getIdentityManager().getById(deviceId);
+ Device device = reportUtils.getDevice(deviceId);
deviceTrips.setDeviceName(device.getName());
sheetNames.add(WorkbookUtil.createSafeSheetName(deviceTrips.getDeviceName()));
if (device.getGroupId() > 0) {
diff --git a/src/main/java/org/traccar/reports/common/ReportUtils.java b/src/main/java/org/traccar/reports/common/ReportUtils.java
index bb37bfa9c..ab009161f 100644
--- a/src/main/java/org/traccar/reports/common/ReportUtils.java
+++ b/src/main/java/org/traccar/reports/common/ReportUtils.java
@@ -31,7 +31,6 @@ import org.traccar.api.security.PermissionsService;
import org.traccar.config.Config;
import org.traccar.config.Keys;
import org.traccar.database.DeviceManager;
-import org.traccar.database.IdentityManager;
import org.traccar.geocoder.Geocoder;
import org.traccar.handler.events.MotionEventHandler;
import org.traccar.helper.UnitsConverter;
@@ -74,7 +73,6 @@ public class ReportUtils {
private final Config config;
private final Storage storage;
private final PermissionsService permissionsService;
- private final IdentityManager identityManager;
private final DeviceManager deviceManager;
private final TripsConfig tripsConfig;
private final VelocityEngine velocityEngine;
@@ -82,13 +80,12 @@ public class ReportUtils {
@Inject
public ReportUtils(
- Config config, Storage storage, PermissionsService permissionsService, IdentityManager identityManager,
+ Config config, Storage storage, PermissionsService permissionsService,
DeviceManager deviceManager, TripsConfig tripsConfig, VelocityEngine velocityEngine,
@Nullable Geocoder geocoder) {
this.config = config;
this.storage = storage;
this.permissionsService = permissionsService;
- this.identityManager = identityManager;
this.deviceManager = deviceManager;
this.tripsConfig = tripsConfig;
this.velocityEngine = velocityEngine;
@@ -104,6 +101,12 @@ public class ReportUtils {
new Condition.Permission(User.class, userId, clazz))));
}
+ public Device getDevice(long deviceId) throws StorageException {
+ return storage.getObject(Device.class, new Request(
+ new Columns.Include("id"),
+ new Condition.Equals("id", "id", deviceId)));
+ }
+
public void checkPeriodLimit(Date from, Date to) {
long limit = config.getLong(Keys.REPORT_PERIOD_LIMIT) * 1000;
if (limit > 0 && to.getTime() - from.getTime() > limit) {
@@ -212,7 +215,7 @@ public class ReportUtils {
long tripDuration = endTrip.getFixTime().getTime() - startTrip.getFixTime().getTime();
long deviceId = startTrip.getDeviceId();
trip.setDeviceId(deviceId);
- trip.setDeviceName(identityManager.getById(deviceId).getName());
+ trip.setDeviceName(getDevice(deviceId).getName());
trip.setStartPositionId(startTrip.getId());
trip.setStartLat(startTrip.getLatitude());
@@ -259,7 +262,8 @@ public class ReportUtils {
}
private StopReportItem calculateStop(
- ArrayList<Position> positions, int startIndex, int endIndex, boolean ignoreOdometer) {
+ ArrayList<Position> positions, int startIndex, int endIndex,
+ boolean ignoreOdometer) throws StorageException {
Position startStop = positions.get(startIndex);
Position endStop = positions.get(endIndex);
@@ -268,7 +272,7 @@ public class ReportUtils {
long deviceId = startStop.getDeviceId();
stop.setDeviceId(deviceId);
- stop.setDeviceName(identityManager.getById(deviceId).getName());
+ stop.setDeviceName(getDevice(deviceId).getName());
stop.setPositionId(startStop.getId());
stop.setLatitude(startStop.getLatitude());
diff --git a/src/test/java/org/traccar/BaseTest.java b/src/test/java/org/traccar/BaseTest.java
index 6db568300..c784150dd 100644
--- a/src/test/java/org/traccar/BaseTest.java
+++ b/src/test/java/org/traccar/BaseTest.java
@@ -3,7 +3,6 @@ package org.traccar;
import io.netty.channel.Channel;
import org.traccar.config.Config;
import org.traccar.database.CommandsManager;
-import org.traccar.database.IdentityManager;
import org.traccar.database.MediaManager;
import org.traccar.database.StatisticsManager;
import org.traccar.model.Device;
@@ -14,8 +13,6 @@ import org.traccar.session.cache.CacheManager;
import java.net.SocketAddress;
import java.util.HashSet;
-import static org.mockito.ArgumentMatchers.anyBoolean;
-import static org.mockito.ArgumentMatchers.anyInt;
import static org.mockito.ArgumentMatchers.anyLong;
import static org.mockito.ArgumentMatchers.eq;
import static org.mockito.Mockito.any;
@@ -29,9 +26,6 @@ public class BaseTest {
decoder.setConfig(config);
var device = mock(Device.class);
when(device.getId()).thenReturn(1L);
- var identityManager = mock(IdentityManager.class);
- when(identityManager.getById(anyLong())).thenReturn(device);
- decoder.setIdentityManager(identityManager);
var cacheManager = mock(CacheManager.class);
when(cacheManager.getConfig()).thenReturn(config);
when(cacheManager.getObject(eq(Device.class), anyLong())).thenReturn(device);
@@ -69,9 +63,6 @@ public class BaseTest {
when(cacheManager.getConfig()).thenReturn(mock(Config.class));
when(cacheManager.getObject(eq(Device.class), anyLong())).thenReturn(device);
encoder.setCacheManager(cacheManager);
- var identityManager = mock(IdentityManager.class);
- when(identityManager.getById(anyLong())).thenReturn(device);
- encoder.setIdentityManager(identityManager);
return encoder;
}
diff --git a/src/test/java/org/traccar/WebDataHandlerTest.java b/src/test/java/org/traccar/WebDataHandlerTest.java
index ff9c80ce6..1e6e1214f 100644
--- a/src/test/java/org/traccar/WebDataHandlerTest.java
+++ b/src/test/java/org/traccar/WebDataHandlerTest.java
@@ -3,13 +3,13 @@ package org.traccar;
import org.junit.Test;
import org.traccar.config.Config;
import org.traccar.config.Keys;
-import org.traccar.database.IdentityManager;
import org.traccar.model.Device;
import org.traccar.model.Position;
import org.traccar.session.cache.CacheManager;
import static org.junit.Assert.assertEquals;
import static org.mockito.ArgumentMatchers.anyLong;
+import static org.mockito.ArgumentMatchers.eq;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
@@ -28,10 +28,10 @@ public class WebDataHandlerTest extends ProtocolTest {
when(device.getName()).thenReturn("test");
when(device.getUniqueId()).thenReturn("123456789012345");
when(device.getStatus()).thenReturn(Device.STATUS_ONLINE);
- var identityManager = mock(IdentityManager.class);
- when(identityManager.getById(anyLong())).thenReturn(device);
+ var cacheManager = mock(CacheManager.class);
+ when(cacheManager.getObject(eq(Device.class), anyLong())).thenReturn(device);
- WebDataHandler handler = new WebDataHandler(config, mock(CacheManager.class), identityManager, null, null);
+ WebDataHandler handler = new WebDataHandler(config, cacheManager, null, null);
assertEquals(
"http://localhost/?fixTime=1451610123000&gprmc=$GPRMC,010203.000,A,2000.0000,N,03000.0000,E,0.00,0.00,010116,,*05&name=test",
diff --git a/src/test/java/org/traccar/handler/ComputedAttributesTest.java b/src/test/java/org/traccar/handler/ComputedAttributesTest.java
index e3886317c..2668c4f14 100644
--- a/src/test/java/org/traccar/handler/ComputedAttributesTest.java
+++ b/src/test/java/org/traccar/handler/ComputedAttributesTest.java
@@ -14,7 +14,7 @@ public class ComputedAttributesTest {
@Test
public void testComputedAttributes() {
- ComputedAttributesHandler handler = new ComputedAttributesHandler(new Config(), null, null);
+ ComputedAttributesHandler handler = new ComputedAttributesHandler(new Config(), null);
Date date = new Date();
Position position = new Position();
diff --git a/src/test/java/org/traccar/reports/ReportUtilsTest.java b/src/test/java/org/traccar/reports/ReportUtilsTest.java
index 1440c4c30..c7f2a2cc6 100644
--- a/src/test/java/org/traccar/reports/ReportUtilsTest.java
+++ b/src/test/java/org/traccar/reports/ReportUtilsTest.java
@@ -1,20 +1,21 @@
package org.traccar.reports;
import org.apache.velocity.app.VelocityEngine;
+import org.junit.Before;
import org.junit.Test;
import org.traccar.BaseTest;
import org.traccar.api.security.PermissionsService;
import org.traccar.config.Config;
import org.traccar.database.DeviceManager;
-import org.traccar.database.IdentityManager;
import org.traccar.helper.model.PositionUtil;
import org.traccar.model.Device;
import org.traccar.model.Position;
import org.traccar.reports.common.ReportUtils;
+import org.traccar.reports.common.TripsConfig;
import org.traccar.reports.model.StopReportItem;
import org.traccar.reports.model.TripReportItem;
-import org.traccar.reports.common.TripsConfig;
import org.traccar.storage.Storage;
+import org.traccar.storage.StorageException;
import java.text.DateFormat;
import java.text.ParseException;
@@ -30,11 +31,19 @@ import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertTrue;
-import static org.mockito.ArgumentMatchers.anyLong;
+import static org.mockito.ArgumentMatchers.any;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
public class ReportUtilsTest extends BaseTest {
+
+ private Storage storage;
+
+ @Before
+ public void init() throws StorageException {
+ storage = mock(Storage.class);
+ when(storage.getObject(any(), any())).thenReturn(mock(Device.class));
+ }
private Date date(String time) throws ParseException {
DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS");
@@ -53,15 +62,7 @@ public class ReportUtilsTest extends BaseTest {
return position;
}
-
- private IdentityManager mockIdentityManager() {
- var device = mock(Device.class);
- when(device.getName()).thenReturn("test");
- var identityManager = mock(IdentityManager.class);
- when(identityManager.getById(anyLong())).thenReturn(device);
- return identityManager;
- }
-
+
@Test
public void testCalculateDistance() {
Position startPosition = new Position();
@@ -77,7 +78,7 @@ public class ReportUtilsTest extends BaseTest {
@Test
public void testCalculateSpentFuel() {
ReportUtils reportUtils = new ReportUtils(
- mock(Config.class), mock(Storage.class), mock(PermissionsService.class), mockIdentityManager(),
+ mock(Config.class), storage, mock(PermissionsService.class),
mock(DeviceManager.class), mock(TripsConfig.class), mock(VelocityEngine.class), null);
Position startPosition = new Position();
Position endPosition = new Position();
@@ -102,7 +103,7 @@ public class ReportUtilsTest extends BaseTest {
TripsConfig tripsConfig = new TripsConfig(500, 300000, 180000, 900000, false, false, 0.01);
ReportUtils reportUtils = new ReportUtils(
- mock(Config.class), mock(Storage.class), mock(PermissionsService.class), mockIdentityManager(),
+ mock(Config.class), storage, mock(PermissionsService.class),
mock(DeviceManager.class), tripsConfig, mock(VelocityEngine.class), null);
Collection<TripReportItem> trips = reportUtils.detectTripsAndStops(data, false, TripReportItem.class);
@@ -157,7 +158,7 @@ public class ReportUtilsTest extends BaseTest {
TripsConfig tripsConfig = new TripsConfig(500, 300000, 180000, 900000, true, false, 0.01);
ReportUtils reportUtils = new ReportUtils(
- mock(Config.class), mock(Storage.class), mock(PermissionsService.class), mockIdentityManager(),
+ mock(Config.class), storage, mock(PermissionsService.class),
mock(DeviceManager.class), tripsConfig, mock(VelocityEngine.class), null);
Collection<TripReportItem> trips = reportUtils.detectTripsAndStops(data, false, TripReportItem.class);
@@ -228,7 +229,7 @@ public class ReportUtilsTest extends BaseTest {
TripsConfig tripsConfig = new TripsConfig(500, 300000, 180000, 900000, false, false, 0.01);
ReportUtils reportUtils = new ReportUtils(
- mock(Config.class), mock(Storage.class), mock(PermissionsService.class), mockIdentityManager(),
+ mock(Config.class), storage, mock(PermissionsService.class),
mock(DeviceManager.class), tripsConfig, mock(VelocityEngine.class), null);
Collection<TripReportItem> trips = reportUtils.detectTripsAndStops(data, false, TripReportItem.class);
@@ -279,7 +280,7 @@ public class ReportUtilsTest extends BaseTest {
TripsConfig tripsConfig = new TripsConfig(500, 300000, 200000, 900000, false, false, 0.01);
ReportUtils reportUtils = new ReportUtils(
- mock(Config.class), mock(Storage.class), mock(PermissionsService.class), mockIdentityManager(),
+ mock(Config.class), storage, mock(PermissionsService.class),
mock(DeviceManager.class), tripsConfig, mock(VelocityEngine.class), null);
Collection<StopReportItem> result = reportUtils.detectTripsAndStops(data, false, StopReportItem.class);
@@ -308,7 +309,7 @@ public class ReportUtilsTest extends BaseTest {
TripsConfig tripsConfig = new TripsConfig(500, 300000, 200000, 900000, false, false, 0.01);
ReportUtils reportUtils = new ReportUtils(
- mock(Config.class), mock(Storage.class), mock(PermissionsService.class), mockIdentityManager(),
+ mock(Config.class), storage, mock(PermissionsService.class),
mock(DeviceManager.class), tripsConfig, mock(VelocityEngine.class), null);
Collection<StopReportItem> result = reportUtils.detectTripsAndStops(data, false, StopReportItem.class);
@@ -337,7 +338,7 @@ public class ReportUtilsTest extends BaseTest {
TripsConfig tripsConfig = new TripsConfig(500, 300000, 200000, 900000, false, false, 0.01);
ReportUtils reportUtils = new ReportUtils(
- mock(Config.class), mock(Storage.class), mock(PermissionsService.class), mockIdentityManager(),
+ mock(Config.class), storage, mock(PermissionsService.class),
mock(DeviceManager.class), tripsConfig, mock(VelocityEngine.class), null);
Collection<StopReportItem> result = reportUtils.detectTripsAndStops(data, false, StopReportItem.class);
@@ -366,7 +367,7 @@ public class ReportUtilsTest extends BaseTest {
TripsConfig tripsConfig = new TripsConfig(500, 300000, 200000, 900000, false, false, 0.01);
ReportUtils reportUtils = new ReportUtils(
- mock(Config.class), mock(Storage.class), mock(PermissionsService.class), mockIdentityManager(),
+ mock(Config.class), storage, mock(PermissionsService.class),
mock(DeviceManager.class), tripsConfig, mock(VelocityEngine.class), null);
Collection<StopReportItem> result = reportUtils.detectTripsAndStops(data, false, StopReportItem.class);
@@ -391,7 +392,7 @@ public class ReportUtilsTest extends BaseTest {
TripsConfig tripsConfig = new TripsConfig(500, 200000, 200000, 900000, false, false, 0.01);
ReportUtils reportUtils = new ReportUtils(
- mock(Config.class), mock(Storage.class), mock(PermissionsService.class), mockIdentityManager(),
+ mock(Config.class), storage, mock(PermissionsService.class),
mock(DeviceManager.class), tripsConfig, mock(VelocityEngine.class), null);
Collection<TripReportItem> trips = reportUtils.detectTripsAndStops(data, false, TripReportItem.class);