aboutsummaryrefslogtreecommitdiff
path: root/src/org/traccar/web
diff options
context:
space:
mode:
authorAnton Tananaev <anton.tananaev@gmail.com>2015-07-17 22:51:09 +1200
committerAnton Tananaev <anton.tananaev@gmail.com>2015-07-17 22:51:09 +1200
commit466e704934894ed44458bec798fa9fad0532bb4c (patch)
treeeaf48175234c9d4d1b0456a542887a90c1377d00 /src/org/traccar/web
parent6bfaa4bdedcf6719de75afa905a309296aa1bd9d (diff)
parentff640cf8eb19cfeb3c8475ffd9b0aeccbd769f96 (diff)
downloadtrackermap-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.java51
-rw-r--r--src/org/traccar/web/CommandsServlet.java58
-rw-r--r--src/org/traccar/web/EnumFactory.java20
-rw-r--r--src/org/traccar/web/JsonConverter.java20
-rw-r--r--src/org/traccar/web/WebServer.java2
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();