diff options
-rw-r--r-- | src/org/traccar/api/BaseObjectResource.java | 25 | ||||
-rw-r--r-- | src/org/traccar/api/ExtendedObjectResource.java | 62 | ||||
-rw-r--r-- | src/org/traccar/api/SimpleObjectResource.java | 43 | ||||
-rw-r--r-- | src/org/traccar/api/resource/AttributeResource.java | 48 | ||||
-rw-r--r-- | src/org/traccar/api/resource/CalendarResource.java | 35 | ||||
-rw-r--r-- | src/org/traccar/api/resource/DriverResource.java | 52 | ||||
-rw-r--r-- | src/org/traccar/api/resource/GeofenceResource.java | 50 | ||||
-rw-r--r-- | src/org/traccar/api/resource/GroupResource.java | 32 | ||||
-rw-r--r-- | src/org/traccar/reports/Events.java | 2 | ||||
-rw-r--r-- | src/org/traccar/reports/ReportUtils.java | 8 | ||||
-rw-r--r-- | src/org/traccar/reports/Route.java | 2 | ||||
-rw-r--r-- | src/org/traccar/reports/Stops.java | 9 | ||||
-rw-r--r-- | src/org/traccar/reports/Summary.java | 2 | ||||
-rw-r--r-- | src/org/traccar/reports/Trips.java | 2 | ||||
-rw-r--r-- | test/org/traccar/protocol/CastelProtocolDecoderTest.java | 3 | ||||
-rw-r--r-- | test/org/traccar/protocol/H02ProtocolDecoderTest.java | 3 |
16 files changed, 168 insertions, 210 deletions
diff --git a/src/org/traccar/api/BaseObjectResource.java b/src/org/traccar/api/BaseObjectResource.java index 4475e3b4d..a1b90bc28 100644 --- a/src/org/traccar/api/BaseObjectResource.java +++ b/src/org/traccar/api/BaseObjectResource.java @@ -17,6 +17,7 @@ package org.traccar.api; import java.sql.SQLException; +import java.util.Set; import javax.ws.rs.DELETE; import javax.ws.rs.POST; @@ -28,6 +29,7 @@ import javax.ws.rs.core.Response; import org.traccar.Context; import org.traccar.database.BaseObjectManager; import org.traccar.database.ExtendedObjectManager; +import org.traccar.database.ManagableObjects; import org.traccar.database.SimpleObjectManager; import org.traccar.model.BaseModel; import org.traccar.model.Device; @@ -42,6 +44,29 @@ public abstract class BaseObjectResource<T extends BaseModel> extends BaseResour this.baseClass = baseClass; } + protected final Class<T> getBaseClass() { + return baseClass; + } + + protected final Set<Long> getSimpleManagerItems(BaseObjectManager<T> manager, boolean all, long userId) { + Set<Long> result = null; + if (all) { + if (Context.getPermissionsManager().isAdmin(getUserId())) { + result = manager.getAllItems(); + } else { + Context.getPermissionsManager().checkManager(getUserId()); + result = ((ManagableObjects) manager).getManagedItems(getUserId()); + } + } else { + if (userId == 0) { + userId = getUserId(); + } + Context.getPermissionsManager().checkUser(getUserId(), userId); + result = ((ManagableObjects) manager).getUserItems(userId); + } + return result; + } + @POST public Response add(T entity) throws SQLException { Context.getPermissionsManager().checkReadonly(getUserId()); diff --git a/src/org/traccar/api/ExtendedObjectResource.java b/src/org/traccar/api/ExtendedObjectResource.java new file mode 100644 index 000000000..007a7b1bd --- /dev/null +++ b/src/org/traccar/api/ExtendedObjectResource.java @@ -0,0 +1,62 @@ +/* + * Copyright 2017 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.api; + +import java.sql.SQLException; +import java.util.Collection; +import java.util.HashSet; +import java.util.Set; + +import javax.ws.rs.GET; +import javax.ws.rs.QueryParam; + +import org.traccar.Context; +import org.traccar.database.ExtendedObjectManager; +import org.traccar.model.BaseModel; + +public class ExtendedObjectResource<T extends BaseModel> extends BaseObjectResource<T> { + + public ExtendedObjectResource(Class<T> baseClass) { + super(baseClass); + } + + @GET + public Collection<T> get( + @QueryParam("all") boolean all, @QueryParam("userId") long userId, @QueryParam("groupId") long groupId, + @QueryParam("deviceId") long deviceId, @QueryParam("refresh") boolean refresh) throws SQLException { + + ExtendedObjectManager<T> manager = (ExtendedObjectManager<T>) Context.getManager(getBaseClass()); + if (refresh) { + manager.refreshItems(); + } + + Set<Long> result = new HashSet<>(getSimpleManagerItems(manager, all, userId)); + + if (groupId != 0) { + Context.getPermissionsManager().checkGroup(getUserId(), groupId); + result.retainAll(manager.getGroupItems(groupId)); + } + + if (deviceId != 0) { + Context.getPermissionsManager().checkDevice(getUserId(), deviceId); + result.retainAll(manager.getDeviceItems(deviceId)); + } + return manager.getItems(result); + + } + +} diff --git a/src/org/traccar/api/SimpleObjectResource.java b/src/org/traccar/api/SimpleObjectResource.java new file mode 100644 index 000000000..a7fcae0e7 --- /dev/null +++ b/src/org/traccar/api/SimpleObjectResource.java @@ -0,0 +1,43 @@ +/* + * Copyright 2017 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.api; + +import java.sql.SQLException; +import java.util.Collection; + +import javax.ws.rs.GET; +import javax.ws.rs.QueryParam; + +import org.traccar.Context; +import org.traccar.database.BaseObjectManager; +import org.traccar.model.BaseModel; + +public class SimpleObjectResource<T extends BaseModel> extends BaseObjectResource<T> { + + public SimpleObjectResource(Class<T> baseClass) { + super(baseClass); + } + + @GET + public Collection<T> get( + @QueryParam("all") boolean all, @QueryParam("userId") long userId) throws SQLException { + + BaseObjectManager<T> manager = Context.getManager(getBaseClass()); + return manager.getItems(getSimpleManagerItems(manager, all, userId)); + } + +} diff --git a/src/org/traccar/api/resource/AttributeResource.java b/src/org/traccar/api/resource/AttributeResource.java index 55fd39fc6..26a1f6931 100644 --- a/src/org/traccar/api/resource/AttributeResource.java +++ b/src/org/traccar/api/resource/AttributeResource.java @@ -17,12 +17,8 @@ package org.traccar.api.resource; import java.sql.SQLException; -import java.util.Collection; -import java.util.HashSet; -import java.util.Set; import javax.ws.rs.Consumes; -import javax.ws.rs.GET; import javax.ws.rs.POST; import javax.ws.rs.Path; import javax.ws.rs.Produces; @@ -31,8 +27,7 @@ import javax.ws.rs.core.MediaType; import javax.ws.rs.core.Response; import org.traccar.Context; -import org.traccar.api.BaseObjectResource; -import org.traccar.database.AttributesManager; +import org.traccar.api.ExtendedObjectResource; import org.traccar.model.Attribute; import org.traccar.model.Position; import org.traccar.processing.ComputedAttributesHandler; @@ -40,51 +35,12 @@ import org.traccar.processing.ComputedAttributesHandler; @Path("attributes/computed") @Produces(MediaType.APPLICATION_JSON) @Consumes(MediaType.APPLICATION_JSON) -public class AttributeResource extends BaseObjectResource<Attribute> { +public class AttributeResource extends ExtendedObjectResource<Attribute> { public AttributeResource() { super(Attribute.class); } - @GET - public Collection<Attribute> get( - @QueryParam("all") boolean all, @QueryParam("userId") long userId, @QueryParam("groupId") long groupId, - @QueryParam("deviceId") long deviceId, @QueryParam("refresh") boolean refresh) throws SQLException { - - AttributesManager attributesManager = Context.getAttributesManager(); - if (refresh) { - attributesManager.refreshItems(); - } - - Set<Long> result = new HashSet<>(); - if (all) { - if (Context.getPermissionsManager().isAdmin(getUserId())) { - result.addAll(attributesManager.getAllItems()); - } else { - Context.getPermissionsManager().checkManager(getUserId()); - result.addAll(attributesManager.getManagedItems(getUserId())); - } - } else { - if (userId == 0) { - userId = getUserId(); - } - Context.getPermissionsManager().checkUser(getUserId(), userId); - result.addAll(attributesManager.getUserItems(userId)); - } - - if (groupId != 0) { - Context.getPermissionsManager().checkGroup(getUserId(), groupId); - result.retainAll(attributesManager.getGroupItems(groupId)); - } - - if (deviceId != 0) { - Context.getPermissionsManager().checkDevice(getUserId(), deviceId); - result.retainAll(attributesManager.getDeviceItems(deviceId)); - } - return attributesManager.getItems(result); - - } - @POST @Path("test") public Response test(@QueryParam("deviceId") long deviceId, Attribute entity) throws SQLException { diff --git a/src/org/traccar/api/resource/CalendarResource.java b/src/org/traccar/api/resource/CalendarResource.java index d43a3b02e..9399c34a5 100644 --- a/src/org/traccar/api/resource/CalendarResource.java +++ b/src/org/traccar/api/resource/CalendarResource.java @@ -16,52 +16,21 @@ */ package org.traccar.api.resource; -import java.sql.SQLException; -import java.util.Collection; -import java.util.Set; - import javax.ws.rs.Consumes; -import javax.ws.rs.GET; import javax.ws.rs.Path; import javax.ws.rs.Produces; -import javax.ws.rs.QueryParam; import javax.ws.rs.core.MediaType; -import org.traccar.Context; -import org.traccar.api.BaseObjectResource; -import org.traccar.database.CalendarManager; +import org.traccar.api.SimpleObjectResource; import org.traccar.model.Calendar; @Path("calendars") @Produces(MediaType.APPLICATION_JSON) @Consumes(MediaType.APPLICATION_JSON) -public class CalendarResource extends BaseObjectResource<Calendar> { +public class CalendarResource extends SimpleObjectResource<Calendar> { public CalendarResource() { super(Calendar.class); } - @GET - public Collection<Calendar> get( - @QueryParam("all") boolean all, @QueryParam("userId") long userId) throws SQLException { - - CalendarManager calendarManager = Context.getCalendarManager(); - Set<Long> result = null; - if (all) { - if (Context.getPermissionsManager().isAdmin(getUserId())) { - result = calendarManager.getAllItems(); - } else { - Context.getPermissionsManager().checkManager(getUserId()); - result = calendarManager.getManagedItems(getUserId()); - } - } else { - if (userId == 0) { - userId = getUserId(); - } - Context.getPermissionsManager().checkUser(getUserId(), userId); - result = calendarManager.getUserItems(userId); - } - return calendarManager.getItems(result); - } - } diff --git a/src/org/traccar/api/resource/DriverResource.java b/src/org/traccar/api/resource/DriverResource.java index 185f4a0dc..91aa54c5e 100644 --- a/src/org/traccar/api/resource/DriverResource.java +++ b/src/org/traccar/api/resource/DriverResource.java @@ -16,69 +16,21 @@ */ package org.traccar.api.resource; -import java.sql.SQLException; -import java.util.Collection; -import java.util.HashSet; -import java.util.Set; - import javax.ws.rs.Consumes; -import javax.ws.rs.GET; import javax.ws.rs.Path; import javax.ws.rs.Produces; -import javax.ws.rs.QueryParam; import javax.ws.rs.core.MediaType; -import org.traccar.Context; -import org.traccar.api.BaseObjectResource; -import org.traccar.database.DriversManager; +import org.traccar.api.ExtendedObjectResource; import org.traccar.model.Driver; @Path("drivers") @Produces(MediaType.APPLICATION_JSON) @Consumes(MediaType.APPLICATION_JSON) -public class DriverResource extends BaseObjectResource<Driver> { +public class DriverResource extends ExtendedObjectResource<Driver> { public DriverResource() { super(Driver.class); } - @GET - public Collection<Driver> get( - @QueryParam("all") boolean all, @QueryParam("userId") long userId, @QueryParam("groupId") long groupId, - @QueryParam("deviceId") long deviceId, @QueryParam("refresh") boolean refresh) throws SQLException { - - DriversManager driversManager = Context.getDriversManager(); - if (refresh) { - driversManager.refreshItems(); - } - - Set<Long> result = new HashSet<>(); - if (all) { - if (Context.getPermissionsManager().isAdmin(getUserId())) { - result.addAll(driversManager.getAllItems()); - } else { - Context.getPermissionsManager().checkManager(getUserId()); - result.addAll(driversManager.getManagedItems(getUserId())); - } - } else { - if (userId == 0) { - userId = getUserId(); - } - Context.getPermissionsManager().checkUser(getUserId(), userId); - result.addAll(driversManager.getUserItems(userId)); - } - - if (groupId != 0) { - Context.getPermissionsManager().checkGroup(getUserId(), groupId); - result.retainAll(driversManager.getGroupItems(groupId)); - } - - if (deviceId != 0) { - Context.getPermissionsManager().checkDevice(getUserId(), deviceId); - result.retainAll(driversManager.getDeviceItems(deviceId)); - } - return driversManager.getItems(result); - - } - } diff --git a/src/org/traccar/api/resource/GeofenceResource.java b/src/org/traccar/api/resource/GeofenceResource.java index d07810732..58f2c188c 100644 --- a/src/org/traccar/api/resource/GeofenceResource.java +++ b/src/org/traccar/api/resource/GeofenceResource.java @@ -15,67 +15,21 @@ */ package org.traccar.api.resource; -import org.traccar.Context; -import org.traccar.api.BaseObjectResource; -import org.traccar.database.GeofenceManager; +import org.traccar.api.ExtendedObjectResource; import org.traccar.model.Geofence; import javax.ws.rs.Consumes; -import javax.ws.rs.GET; import javax.ws.rs.Path; import javax.ws.rs.Produces; -import javax.ws.rs.QueryParam; import javax.ws.rs.core.MediaType; -import java.sql.SQLException; -import java.util.Collection; -import java.util.HashSet; -import java.util.Set; - @Path("geofences") @Produces(MediaType.APPLICATION_JSON) @Consumes(MediaType.APPLICATION_JSON) -public class GeofenceResource extends BaseObjectResource<Geofence> { +public class GeofenceResource extends ExtendedObjectResource<Geofence> { public GeofenceResource() { super(Geofence.class); } - @GET - public Collection<Geofence> get( - @QueryParam("all") boolean all, @QueryParam("userId") long userId, @QueryParam("groupId") long groupId, - @QueryParam("deviceId") long deviceId, @QueryParam("refresh") boolean refresh) throws SQLException { - - GeofenceManager geofenceManager = Context.getGeofenceManager(); - if (refresh) { - geofenceManager.refreshItems(); - } - - Set<Long> result = new HashSet<>(); - if (all) { - if (Context.getPermissionsManager().isAdmin(getUserId())) { - result.addAll(geofenceManager.getAllItems()); - } else { - Context.getPermissionsManager().checkManager(getUserId()); - result.addAll(geofenceManager.getManagedItems(getUserId())); - } - } else { - if (userId == 0) { - userId = getUserId(); - } - Context.getPermissionsManager().checkUser(getUserId(), userId); - result.addAll(geofenceManager.getUserItems(userId)); - } - - if (groupId != 0) { - Context.getPermissionsManager().checkGroup(getUserId(), groupId); - result.retainAll(geofenceManager.getGroupItems(groupId)); - } - - if (deviceId != 0) { - Context.getPermissionsManager().checkDevice(getUserId(), deviceId); - result.retainAll(geofenceManager.getDeviceItems(deviceId)); - } - return geofenceManager.getItems(result); - } } diff --git a/src/org/traccar/api/resource/GroupResource.java b/src/org/traccar/api/resource/GroupResource.java index 2be4e6492..fcea15d0a 100644 --- a/src/org/traccar/api/resource/GroupResource.java +++ b/src/org/traccar/api/resource/GroupResource.java @@ -15,49 +15,21 @@ */ package org.traccar.api.resource; -import org.traccar.Context; -import org.traccar.api.BaseObjectResource; -import org.traccar.database.GroupsManager; +import org.traccar.api.SimpleObjectResource; import org.traccar.model.Group; import javax.ws.rs.Consumes; -import javax.ws.rs.GET; import javax.ws.rs.Path; import javax.ws.rs.Produces; -import javax.ws.rs.QueryParam; import javax.ws.rs.core.MediaType; -import java.sql.SQLException; -import java.util.Collection; -import java.util.Set; @Path("groups") @Produces(MediaType.APPLICATION_JSON) @Consumes(MediaType.APPLICATION_JSON) -public class GroupResource extends BaseObjectResource<Group> { +public class GroupResource extends SimpleObjectResource<Group> { public GroupResource() { super(Group.class); } - @GET - public Collection<Group> get( - @QueryParam("all") boolean all, @QueryParam("userId") long userId) throws SQLException { - GroupsManager groupsManager = Context.getGroupsManager(); - Set<Long> result = null; - if (all) { - if (Context.getPermissionsManager().isAdmin(getUserId())) { - result = groupsManager.getAllItems(); - } else { - Context.getPermissionsManager().checkManager(getUserId()); - result = groupsManager.getManagedItems(getUserId()); - } - } else { - if (userId == 0) { - userId = getUserId(); - } - Context.getPermissionsManager().checkUser(getUserId(), userId); - result = groupsManager.getUserItems(userId); - } - return groupsManager.getItems(result); - } } diff --git a/src/org/traccar/reports/Events.java b/src/org/traccar/reports/Events.java index 63077de32..a13aeeeb4 100644 --- a/src/org/traccar/reports/Events.java +++ b/src/org/traccar/reports/Events.java @@ -42,6 +42,7 @@ public final class Events { public static Collection<Event> getObjects(long userId, Collection<Long> deviceIds, Collection<Long> groupIds, Collection<String> types, Date from, Date to) throws SQLException { + ReportUtils.checkPeriodLimit(from, to); ArrayList<Event> result = new ArrayList<>(); for (long deviceId: ReportUtils.getDeviceList(deviceIds, groupIds)) { Context.getPermissionsManager().checkDevice(userId, deviceId); @@ -62,6 +63,7 @@ public final class Events { public static void getExcel(OutputStream outputStream, long userId, Collection<Long> deviceIds, Collection<Long> groupIds, Collection<String> types, Date from, Date to) throws SQLException, IOException { + ReportUtils.checkPeriodLimit(from, to); ArrayList<DeviceReport> devicesEvents = new ArrayList<>(); ArrayList<String> sheetNames = new ArrayList<>(); HashMap<Long, String> geofenceNames = new HashMap<>(); diff --git a/src/org/traccar/reports/ReportUtils.java b/src/org/traccar/reports/ReportUtils.java index cf94030ab..540feb6c6 100644 --- a/src/org/traccar/reports/ReportUtils.java +++ b/src/org/traccar/reports/ReportUtils.java @@ -40,6 +40,7 @@ import java.math.BigDecimal; import java.math.RoundingMode; import java.util.ArrayList; import java.util.Collection; +import java.util.Date; import java.util.List; import java.util.Locale; import java.util.TimeZone; @@ -49,6 +50,13 @@ public final class ReportUtils { private ReportUtils() { } + public static void checkPeriodLimit(Date from, Date to) { + long limit = Context.getConfig().getLong("report.periodLimit") * 1000; + if (limit > 0 && to.getTime() - from.getTime() > limit) { + throw new IllegalArgumentException("Time period exceeds the limit"); + } + } + public static String getDistanceUnit(long userId) { return (String) Context.getPermissionsManager().lookupPreference(userId, "distanceUnit", "km"); } diff --git a/src/org/traccar/reports/Route.java b/src/org/traccar/reports/Route.java index 1c53a15cc..6adb00aae 100644 --- a/src/org/traccar/reports/Route.java +++ b/src/org/traccar/reports/Route.java @@ -39,6 +39,7 @@ public final class Route { public static Collection<Position> getObjects(long userId, Collection<Long> deviceIds, Collection<Long> groupIds, Date from, Date to) throws SQLException { + ReportUtils.checkPeriodLimit(from, to); ArrayList<Position> result = new ArrayList<>(); for (long deviceId: ReportUtils.getDeviceList(deviceIds, groupIds)) { Context.getPermissionsManager().checkDevice(userId, deviceId); @@ -50,6 +51,7 @@ public final class Route { public static void getExcel(OutputStream outputStream, long userId, Collection<Long> deviceIds, Collection<Long> groupIds, Date from, Date to) throws SQLException, IOException { + ReportUtils.checkPeriodLimit(from, to); ArrayList<DeviceReport> devicesRoutes = new ArrayList<>(); ArrayList<String> sheetNames = new ArrayList<>(); for (long deviceId: ReportUtils.getDeviceList(deviceIds, groupIds)) { diff --git a/src/org/traccar/reports/Stops.java b/src/org/traccar/reports/Stops.java index 886fd7915..ee6746e4e 100644 --- a/src/org/traccar/reports/Stops.java +++ b/src/org/traccar/reports/Stops.java @@ -55,8 +55,10 @@ public final class Stops { return (Collection<StopReport>) result; } - public static Collection<StopReport> getObjects(long userId, Collection<Long> deviceIds, Collection<Long> groupIds, + public static Collection<StopReport> getObjects( + long userId, Collection<Long> deviceIds, Collection<Long> groupIds, Date from, Date to) throws SQLException { + ReportUtils.checkPeriodLimit(from, to); ArrayList<StopReport> result = new ArrayList<>(); for (long deviceId: ReportUtils.getDeviceList(deviceIds, groupIds)) { Context.getPermissionsManager().checkDevice(userId, deviceId); @@ -65,9 +67,10 @@ public final class Stops { return result; } - public static void getExcel(OutputStream outputStream, - long userId, Collection<Long> deviceIds, Collection<Long> groupIds, + public static void getExcel( + OutputStream outputStream, long userId, Collection<Long> deviceIds, Collection<Long> groupIds, Date from, Date to) throws SQLException, IOException { + ReportUtils.checkPeriodLimit(from, to); ArrayList<DeviceReport> devicesStops = new ArrayList<>(); ArrayList<String> sheetNames = new ArrayList<>(); for (long deviceId: ReportUtils.getDeviceList(deviceIds, groupIds)) { diff --git a/src/org/traccar/reports/Summary.java b/src/org/traccar/reports/Summary.java index dd9877cd7..366e40421 100644 --- a/src/org/traccar/reports/Summary.java +++ b/src/org/traccar/reports/Summary.java @@ -68,6 +68,7 @@ public final class Summary { public static Collection<SummaryReport> getObjects(long userId, Collection<Long> deviceIds, Collection<Long> groupIds, Date from, Date to) throws SQLException { + ReportUtils.checkPeriodLimit(from, to); ArrayList<SummaryReport> result = new ArrayList<>(); for (long deviceId: ReportUtils.getDeviceList(deviceIds, groupIds)) { Context.getPermissionsManager().checkDevice(userId, deviceId); @@ -79,6 +80,7 @@ public final class Summary { public static void getExcel(OutputStream outputStream, long userId, Collection<Long> deviceIds, Collection<Long> groupIds, Date from, Date to) throws SQLException, IOException { + ReportUtils.checkPeriodLimit(from, to); Collection<SummaryReport> summaries = getObjects(userId, deviceIds, groupIds, from, to); String templatePath = Context.getConfig().getString("report.templatesPath", "templates/export/"); diff --git a/src/org/traccar/reports/Trips.java b/src/org/traccar/reports/Trips.java index 68b03a819..6b97507f4 100644 --- a/src/org/traccar/reports/Trips.java +++ b/src/org/traccar/reports/Trips.java @@ -56,6 +56,7 @@ public final class Trips { public static Collection<TripReport> getObjects(long userId, Collection<Long> deviceIds, Collection<Long> groupIds, Date from, Date to) throws SQLException { + ReportUtils.checkPeriodLimit(from, to); ArrayList<TripReport> result = new ArrayList<>(); for (long deviceId: ReportUtils.getDeviceList(deviceIds, groupIds)) { Context.getPermissionsManager().checkDevice(userId, deviceId); @@ -67,6 +68,7 @@ public final class Trips { public static void getExcel(OutputStream outputStream, long userId, Collection<Long> deviceIds, Collection<Long> groupIds, Date from, Date to) throws SQLException, IOException { + ReportUtils.checkPeriodLimit(from, to); ArrayList<DeviceReport> devicesTrips = new ArrayList<>(); ArrayList<String> sheetNames = new ArrayList<>(); for (long deviceId: ReportUtils.getDeviceList(deviceIds, groupIds)) { diff --git a/test/org/traccar/protocol/CastelProtocolDecoderTest.java b/test/org/traccar/protocol/CastelProtocolDecoderTest.java index 6b52373e1..bdf69e1af 100644 --- a/test/org/traccar/protocol/CastelProtocolDecoderTest.java +++ b/test/org/traccar/protocol/CastelProtocolDecoderTest.java @@ -13,6 +13,9 @@ public class CastelProtocolDecoderTest extends ProtocolTest { CastelProtocolDecoder decoder = new CastelProtocolDecoder(new CastelProtocol()); verifyPositions(decoder, binary(ByteOrder.LITTLE_ENDIAN, + "40408200033231334c32303137303031313039000000000000100136477b5964477b590400000000000000dc410f000000000204000709207910008304011c07110e110dd41a160714a95a0f00001e058c4944442d3231334c2056312e312e3120323031372d30352d3038004944442d3231334c2056312e312e300000006da10d0a")); + + verifyPositions(decoder, binary(ByteOrder.LITTLE_ENDIAN, "40408200033231334c323031373030303131370000000000001001000c6759a10d67590a9e1200000000000e3e0000000000020000000e4e791c000004010d0711060515083017086cd1181f000040067d4944442d3231334c2056312e312e3120323031372d30352d3038004944442d3231334c2056312e312e3000000066e30d0a")); verifyAttributes(decoder, binary(ByteOrder.LITTLE_ENDIAN, diff --git a/test/org/traccar/protocol/H02ProtocolDecoderTest.java b/test/org/traccar/protocol/H02ProtocolDecoderTest.java index bd4de3363..48f4d987e 100644 --- a/test/org/traccar/protocol/H02ProtocolDecoderTest.java +++ b/test/org/traccar/protocol/H02ProtocolDecoderTest.java @@ -11,6 +11,9 @@ public class H02ProtocolDecoderTest extends ProtocolTest { H02ProtocolDecoder decoder = new H02ProtocolDecoder(new H02Protocol()); + verifyPosition(decoder, binary( + "2442091341332059572807175137358006000183640e000000fffffbfdff001f080000000000ea1e0000000021")); + verifyNull(decoder, buffer( "*HQ,4109198974,#")); |