diff options
author | Anton Tananaev <anton.tananaev@gmail.com> | 2016-11-30 18:39:19 +1300 |
---|---|---|
committer | GitHub <noreply@github.com> | 2016-11-30 18:39:19 +1300 |
commit | eb1373894ae52054403625ef1261f3399272f5a7 (patch) | |
tree | be55e2eff98307745633b6149ebe4b294e5d1d70 | |
parent | 137adb0507cacb77c7180d06526f5258f857de57 (diff) | |
parent | d5ec75ecd3697e37782c9dd53998c889d5b9ef4d (diff) | |
download | traccar-server-eb1373894ae52054403625ef1261f3399272f5a7.tar.gz traccar-server-eb1373894ae52054403625ef1261f3399272f5a7.tar.bz2 traccar-server-eb1373894ae52054403625ef1261f3399272f5a7.zip |
Merge pull request #2617 from Abyss777/get_single_position
Add API to get positions by Id
-rw-r--r-- | setup/default.xml | 4 | ||||
-rw-r--r-- | src/org/traccar/api/resource/PositionResource.java | 16 | ||||
-rw-r--r-- | src/org/traccar/database/DataManager.java | 6 |
3 files changed, 23 insertions, 3 deletions
diff --git a/setup/default.xml b/setup/default.xml index 7df352c4d..5c6f8fe90 100644 --- a/setup/default.xml +++ b/setup/default.xml @@ -171,6 +171,10 @@ SELECT * FROM positions WHERE deviceId = :deviceId AND fixTime BETWEEN :from AND :to ORDER BY fixTime </entry> + <entry key='database.selectPosition'> + SELECT * FROM positions WHERE id = :id + </entry> + <entry key='database.insertPosition'> INSERT INTO positions (deviceId, protocol, serverTime, deviceTime, fixTime, valid, latitude, longitude, altitude, speed, course, address, attributes) VALUES (:deviceId, :protocol, :now, :deviceTime, :fixTime, :valid, :latitude, :longitude, :altitude, :speed, :course, :address, :attributes) diff --git a/src/org/traccar/api/resource/PositionResource.java b/src/org/traccar/api/resource/PositionResource.java index c1cfc0b5c..4db73cfd2 100644 --- a/src/org/traccar/api/resource/PositionResource.java +++ b/src/org/traccar/api/resource/PositionResource.java @@ -32,7 +32,9 @@ import javax.ws.rs.core.MediaType; import javax.ws.rs.core.Response; import java.sql.SQLException; +import java.util.ArrayList; import java.util.Collection; +import java.util.List; @Path("positions") @Consumes(MediaType.APPLICATION_JSON) @@ -46,9 +48,18 @@ public class PositionResource extends BaseResource { @GET @Produces(MediaType.APPLICATION_JSON) public Collection<Position> getJson( - @QueryParam("deviceId") long deviceId, @QueryParam("from") String from, @QueryParam("to") String to) + @QueryParam("deviceId") long deviceId, @QueryParam("positionId") List<Long> positionIds, + @QueryParam("from") String from, @QueryParam("to") String to) throws SQLException { - if (deviceId == 0) { + if (!positionIds.isEmpty()) { + ArrayList<Position> positions = new ArrayList<>(); + for (Long positionId : positionIds) { + Position position = Context.getDataManager().getPosition(positionId); + Context.getPermissionsManager().checkDevice(getUserId(), position.getDeviceId()); + positions.add(position); + } + return positions; + } else if (deviceId == 0) { return Context.getDeviceManager().getInitialState(getUserId()); } else { Context.getPermissionsManager().checkDevice(getUserId(), deviceId); @@ -81,5 +92,4 @@ public class PositionResource extends BaseResource { deviceId, DateUtil.parseDate(from), DateUtil.parseDate(to))); return Response.ok(gpx.build()).header(HttpHeaders.CONTENT_DISPOSITION, CONTENT_DISPOSITION_VALUE_GPX).build(); } - } diff --git a/src/org/traccar/database/DataManager.java b/src/org/traccar/database/DataManager.java index afa8b1677..8be53ad7b 100644 --- a/src/org/traccar/database/DataManager.java +++ b/src/org/traccar/database/DataManager.java @@ -280,6 +280,12 @@ public class DataManager { .executeQuery(Position.class); } + public Position getPosition(long positionId) throws SQLException { + return QueryBuilder.create(dataSource, getQuery("database.selectPosition")) + .setLong("id", positionId) + .executeQuerySingle(Position.class); + } + public void addPosition(Position position) throws SQLException { position.setId(QueryBuilder.create(dataSource, getQuery("database.insertPosition"), true) .setDate("now", new Date()) |