diff options
author | Anton Tananaev <anton.tananaev@gmail.com> | 2015-07-17 22:51:09 +1200 |
---|---|---|
committer | Anton Tananaev <anton.tananaev@gmail.com> | 2015-07-17 22:51:09 +1200 |
commit | 466e704934894ed44458bec798fa9fad0532bb4c (patch) | |
tree | eaf48175234c9d4d1b0456a542887a90c1377d00 /src/org/traccar/web | |
parent | 6bfaa4bdedcf6719de75afa905a309296aa1bd9d (diff) | |
parent | ff640cf8eb19cfeb3c8475ffd9b0aeccbd769f96 (diff) | |
download | trackermap-server-466e704934894ed44458bec798fa9fad0532bb4c.tar.gz trackermap-server-466e704934894ed44458bec798fa9fad0532bb4c.tar.bz2 trackermap-server-466e704934894ed44458bec798fa9fad0532bb4c.zip |
Merge commands implementation (fix #7)
Diffstat (limited to 'src/org/traccar/web')
-rw-r--r-- | src/org/traccar/web/CommandServlet.java | 51 | ||||
-rw-r--r-- | src/org/traccar/web/CommandsServlet.java | 58 | ||||
-rw-r--r-- | src/org/traccar/web/EnumFactory.java | 20 | ||||
-rw-r--r-- | src/org/traccar/web/JsonConverter.java | 20 | ||||
-rw-r--r-- | src/org/traccar/web/WebServer.java | 2 |
5 files changed, 55 insertions, 96 deletions
diff --git a/src/org/traccar/web/CommandServlet.java b/src/org/traccar/web/CommandServlet.java new file mode 100644 index 000000000..049a0534d --- /dev/null +++ b/src/org/traccar/web/CommandServlet.java @@ -0,0 +1,51 @@ +package org.traccar.web; + +import javax.json.Json; +import javax.json.JsonObject; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import org.traccar.Context; +import org.traccar.model.Command; +import org.traccar.database.ActiveDevice; + +public class CommandServlet extends BaseServlet { + + @Override + protected boolean handle(String command, HttpServletRequest req, HttpServletResponse resp) throws Exception { + + switch (command) { + case "/send": + send(req, resp); + return true; + case "/raw": + raw(req, resp); + return true; + default: + return false; + } + } + + public ActiveDevice getActiveDevice(long deviceId) { + ActiveDevice activeDevice = Context.getConnectionManager().getActiveDevice(deviceId); + if (activeDevice == null) { + throw new RuntimeException("The device is not registered on the server"); + } + return activeDevice; + } + + private void send(HttpServletRequest req, HttpServletResponse resp) throws Exception { + + Command command = JsonConverter.objectFromJson(req.getReader(), new Command()); + getActiveDevice(command.getDeviceId()).write(command); + sendResponse(resp.getWriter(), true); + } + + private void raw(HttpServletRequest req, HttpServletResponse resp) throws Exception { + + JsonObject json = Json.createReader(req.getReader()).readObject(); + long deviceId = json.getJsonNumber("deviceId").longValue(); + String command = json.getString("command"); + getActiveDevice(deviceId).write(command); + sendResponse(resp.getWriter(), true); + } +} diff --git a/src/org/traccar/web/CommandsServlet.java b/src/org/traccar/web/CommandsServlet.java deleted file mode 100644 index b12c0fa53..000000000 --- a/src/org/traccar/web/CommandsServlet.java +++ /dev/null @@ -1,58 +0,0 @@ -package org.traccar.web; - -import javax.json.Json; -import javax.json.JsonObject; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import org.traccar.Context; -import org.traccar.command.CommandType; -import org.traccar.command.GpsCommand; -import org.traccar.database.ActiveDevice; - -public class CommandsServlet extends BaseServlet { - - @Override - protected boolean handle(String command, HttpServletRequest req, HttpServletResponse resp) throws Exception { - - switch (command) { - case "/send": - send(req, resp); - return true; - case "/raw": - sendRawCommand(req, resp); - return true; - default: - return false; - } - } - - private void send(HttpServletRequest req, HttpServletResponse resp) throws Exception { - GpsCommand command = JsonConverter.<GpsCommand>enumObjectFromJson(req.getReader(), new EnumFactory(CommandType.class, "type")); - - String uniqueId = command.getUniqueId(); - - ActiveDevice activeDevice = Context.getConnectionManager().getActiveDevice(uniqueId); - if(activeDevice == null) { - throw new RuntimeException("The device has not yet registered to the server"); - } - - activeDevice.sendCommand(command); - - sendResponse(resp.getWriter(), JsonConverter.objectToJson(new Object())); - } - - private void sendRawCommand(HttpServletRequest req, HttpServletResponse resp) throws Exception { - JsonObject json = Json.createReader(req.getReader()).readObject(); - String uniqueId = json.getString("uniqueId"); - - ActiveDevice activeDevice = Context.getConnectionManager().getActiveDevice(uniqueId); - if(activeDevice == null) { - throw new RuntimeException("The device has not yet registered to the server"); - } - - String command = json.getString("command"); - activeDevice.write(command); - - sendResponse(resp.getWriter(), JsonConverter.objectToJson(new Object())); - } -} diff --git a/src/org/traccar/web/EnumFactory.java b/src/org/traccar/web/EnumFactory.java deleted file mode 100644 index efbfd4b20..000000000 --- a/src/org/traccar/web/EnumFactory.java +++ /dev/null @@ -1,20 +0,0 @@ -package org.traccar.web; - -import org.traccar.model.Factory; - -import javax.json.JsonObject; - -public class EnumFactory<T extends Enum<T> & Factory> { - private Class<T> commandTypeClass; - private String jsonKey; - - public EnumFactory(Class<T> commandTypeClass, String type) { - this.commandTypeClass = commandTypeClass; - jsonKey = type; - } - - public <K> K create(JsonObject json) { - Factory factory = Enum.valueOf(commandTypeClass, json.getString(jsonKey)); - return (K) factory.create(); - } -} diff --git a/src/org/traccar/web/JsonConverter.java b/src/org/traccar/web/JsonConverter.java index 7962ac8ab..0dc4f24eb 100644 --- a/src/org/traccar/web/JsonConverter.java +++ b/src/org/traccar/web/JsonConverter.java @@ -46,20 +46,9 @@ public class JsonConverter { return objectFromJson(Json.createReader(reader).readObject(), prototype); } - public static <T> T enumObjectFromJson(Reader reader, EnumFactory<? extends Enum<?>> factory) throws ParseException { - JsonObject json = Json.createReader(reader).readObject(); - T object = factory.<T>create(json); - populateObject(json, object); - return object; - } - public static <T extends Factory> T objectFromJson(JsonObject json, T prototype) throws ParseException { T object = (T) prototype.create(); - populateObject(json, object); - return object; - } - private static void populateObject(JsonObject json, Object object) throws ParseException { Method[] methods = object.getClass().getMethods(); for (final Method method : methods) { @@ -86,17 +75,14 @@ public class JsonConverter { } else if (parameterType.isEnum()) { method.invoke(object, Enum.valueOf((Class<? extends Enum>) parameterType, json.getString(name))); } else if (parameterType.equals(Map.class)) { - //method.invoke(object, json.getString(name)); - } else { - Object nestedObject = parameterType.newInstance(); - populateObject(json.getJsonObject(name), nestedObject); - method.invoke(object, nestedObject); + // TODO: method.invoke(object, json.getString(name)); } - } catch (IllegalAccessException | InvocationTargetException | InstantiationException error) { + } catch (IllegalAccessException | InvocationTargetException error) { } } } + return object; } public static <T> JsonObject objectToJson(T object) { diff --git a/src/org/traccar/web/WebServer.java b/src/org/traccar/web/WebServer.java index 698796467..38345ffe7 100644 --- a/src/org/traccar/web/WebServer.java +++ b/src/org/traccar/web/WebServer.java @@ -74,7 +74,7 @@ public class WebServer { servletHandler.addServlet(new ServletHolder(new UserServlet()), "/user/*"); servletHandler.addServlet(new ServletHolder(new DeviceServlet()), "/device/*"); servletHandler.addServlet(new ServletHolder(new PositionServlet()), "/position/*"); - servletHandler.addServlet(new ServletHolder(new CommandsServlet()), "/commands/*"); + servletHandler.addServlet(new ServletHolder(new CommandServlet()), "/command/*"); servletHandler.addServlet(new ServletHolder(new MainServlet()), "/*"); /*ResourceHandler mobileResourceHandler = new ResourceHandler(); |