aboutsummaryrefslogtreecommitdiff
path: root/src/org/traccar
diff options
context:
space:
mode:
Diffstat (limited to 'src/org/traccar')
-rw-r--r--src/org/traccar/Server.java2
-rw-r--r--src/org/traccar/http/WebServer.java112
-rw-r--r--src/org/traccar/model/DataManager.java4
-rw-r--r--src/org/traccar/model/DatabaseDataManager.java27
4 files changed, 134 insertions, 11 deletions
diff --git a/src/org/traccar/Server.java b/src/org/traccar/Server.java
index 1c11f07b0..fda5e6ad3 100644
--- a/src/org/traccar/Server.java
+++ b/src/org/traccar/Server.java
@@ -87,7 +87,7 @@ public class Server {
// Initialize web server
Integer port = Integer.valueOf(properties.getProperty("http.port", "8082"));
- webServer = new WebServer(port);
+ webServer = new WebServer(port, dataManager);
}
/**
diff --git a/src/org/traccar/http/WebServer.java b/src/org/traccar/http/WebServer.java
index 9b3b78413..a99f6e11b 100644
--- a/src/org/traccar/http/WebServer.java
+++ b/src/org/traccar/http/WebServer.java
@@ -15,23 +15,130 @@
*/
package org.traccar.http;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.io.PrintWriter;
+import java.util.Iterator;
+import javax.servlet.ServletException;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import org.eclipse.jetty.server.Request;
import org.eclipse.jetty.server.Server;
+import org.eclipse.jetty.server.handler.AbstractHandler;
+import org.traccar.model.DataManager;
+import org.traccar.model.Device;
+import org.traccar.model.Position;
/**
- * Integrated http server
+ * Integrated HTTP server
*/
public class WebServer {
private Server server;
- public WebServer(Integer port) {
+ public class WebHandler extends AbstractHandler {
+
+ private DataManager dataManager;
+
+ public WebHandler(DataManager dataManager) {
+ this.dataManager = dataManager;
+ }
+
+ public void handleIndex(String target,Request baseRequest,HttpServletRequest request,HttpServletResponse response)
+ throws IOException, ServletException {
+
+ response.setContentType("text/html");
+
+ InputStream in = this.getClass().getClassLoader().getResourceAsStream("index.html");
+ OutputStream out = response.getOutputStream();
+
+ byte[] buffer = new byte[1024]; // Magic number
+ int count;
+ while ((count = in.read(buffer)) != -1) {
+ out.write(buffer, 0, count);
+ }
+ out.flush();
+ }
+
+ public void handleData(String target,Request baseRequest,HttpServletRequest request,HttpServletResponse response)
+ throws IOException, ServletException {
+
+ response.setContentType("application/json");
+
+ PrintWriter out = response.getWriter();
+ out.print("{'success':true,'results':[");
+
+ try {
+ if (target.equals("/devices.json")) {
+
+ Iterator<Device> i = dataManager.getDevices().iterator();
+ while (i.hasNext()) {
+ Device device = i.next();
+ out.format("{'id':%d,'imei':'%s'}",
+ device.getId(),
+ device.getImei());
+ if (i.hasNext()) out.print(",");
+ }
+
+ } else if (target.equals("/positions.json")) {
+
+ String deviceId = request.getParameter("deviceId");
+ if (deviceId != null) {
+ Iterator<Position> i = dataManager.getPositions(Long.valueOf(deviceId)).iterator();
+ while (i.hasNext()) {
+ Position position = i.next();
+ out.format("{'device_id':%d,'time':'%tF %tT','valid':%b,'latitude':%f,'longitude':%f,'speed':%f,'course':%f}",
+ position.getDeviceId(),
+ position.getTime(),
+ position.getTime(),
+ position.getValid(),
+ position.getLatitude(),
+ position.getLongitude(),
+ position.getSpeed(),
+ position.getCourse());
+ if (i.hasNext()) out.print(",");
+ }
+ }
+
+ }
+ } catch (Exception error) {
+ System.out.println(error.getMessage());
+ }
+
+ //" {'id': 1, 'imei': '123456789012345'} ]}");
+ out.print("]}");
+ out.flush();
+ }
+
+ public void handleOther(String target,Request baseRequest,HttpServletRequest request,HttpServletResponse response)
+ throws IOException, ServletException {
+ response.sendRedirect(response.encodeRedirectURL("/"));
+ }
+
+ public void handle(String target,Request baseRequest,HttpServletRequest request,HttpServletResponse response)
+ throws IOException, ServletException
+ {
+ if (target.equals("/") || target.equals("/index.html")) {
+ handleIndex(target, baseRequest, request, response);
+ } else if (target.matches("/.+\\.json")) {
+ handleData(target, baseRequest, request, response);
+ } else {
+ handleOther(target, baseRequest, request, response);
+ }
+ }
+ }
+
+ public WebServer(Integer port, DataManager dataManager) {
server = new Server(port);
+ server.setHandler(new WebHandler(dataManager));
}
public void start() {
try {
server.start();
} catch (Exception error) {
+ System.out.println(error.getMessage());
}
}
@@ -39,6 +146,7 @@ public class WebServer {
try {
server.stop();
} catch (Exception error) {
+ System.out.println(error.getMessage());
}
}
diff --git a/src/org/traccar/model/DataManager.java b/src/org/traccar/model/DataManager.java
index a7dbd6719..d0f290962 100644
--- a/src/org/traccar/model/DataManager.java
+++ b/src/org/traccar/model/DataManager.java
@@ -25,7 +25,7 @@ public interface DataManager {
/**
* Manage devices
*/
- public List getDevices() throws Exception;
+ public List<Device> getDevices() throws Exception;
public void addDevice(Device device) throws Exception;
public void addUpdate(Device device) throws Exception;
public void addRemove(Device device) throws Exception;
@@ -34,7 +34,7 @@ public interface DataManager {
/**
* Manage positions
*/
- public List getPositions(Long deviceId) throws Exception;
+ public List<Position> getPositions(Long deviceId) throws Exception;
public void addPosition(Position position) throws Exception;
}
diff --git a/src/org/traccar/model/DatabaseDataManager.java b/src/org/traccar/model/DatabaseDataManager.java
index 8e12f177c..7d90ac194 100644
--- a/src/org/traccar/model/DatabaseDataManager.java
+++ b/src/org/traccar/model/DatabaseDataManager.java
@@ -77,9 +77,9 @@ public class DatabaseDataManager implements DataManager {
queryAddPosition = new NamedParameterStatement(connection, query);
}
- public synchronized List getDevices() throws SQLException {
+ public synchronized List<Device> getDevices() throws SQLException {
- List deviceList = new LinkedList();
+ List<Device> deviceList = new LinkedList();
queryGetDevices.prepare();
ResultSet result = queryGetDevices.executeQuery();
@@ -101,9 +101,8 @@ public class DatabaseDataManager implements DataManager {
if ((devices == null) || (Calendar.getInstance().getTimeInMillis() - devicesLastUpdate.getTimeInMillis() > devicesRefreshDelay)) {
devices = new HashMap();
- List deviceList = getDevices();
- for (Object device: deviceList) {
- devices.put(((Device) device).getImei(), device);
+ for (Device device: getDevices()) {
+ devices.put(device.getImei(), device);
}
devicesLastUpdate = Calendar.getInstance();
}
@@ -111,7 +110,23 @@ public class DatabaseDataManager implements DataManager {
return (Device) devices.get(imei);
}
- public List getPositions(Long deviceId) { return null; } // TODO: implement
+ public List<Position> getPositions(Long deviceId) { // TODO: implement
+
+ List<Position> positionList = new LinkedList();
+
+ Position p = new Position();
+ p.setDeviceId(new Long(1));
+ p.setTime(new Date());
+ p.setValid(true);
+ p.setLatitude(1.0);
+ p.setLongitude(1.0);
+ p.setSpeed(1.0);
+ p.setCourse(1.0);
+
+ positionList.add(p);
+
+ return positionList;
+ }
public synchronized void addPosition(Position position) throws SQLException {