/[projects]/android/DroidRadarService/src/dk/thoerup/droidradarservice/LocationService.java
ViewVC logotype

Annotation of /android/DroidRadarService/src/dk/thoerup/droidradarservice/LocationService.java

Parent Directory Parent Directory | Revision Log Revision Log


Revision 274 - (hide annotations) (download)
Fri Aug 21 14:03:03 2009 UTC (14 years, 9 months ago) by torben
File size: 4705 byte(s)


1 torben 272 package dk.thoerup.droidradarservice;
2    
3     import java.io.IOException;
4     import java.sql.Connection;
5     import java.sql.PreparedStatement;
6     import java.sql.ResultSet;
7     import java.sql.SQLException;
8    
9     import javax.naming.Context;
10     import javax.naming.InitialContext;
11     import javax.servlet.ServletException;
12     import javax.servlet.http.HttpServlet;
13     import javax.servlet.http.HttpServletRequest;
14     import javax.servlet.http.HttpServletResponse;
15     import javax.sql.DataSource;
16    
17     public class LocationService extends HttpServlet {
18     private static final long serialVersionUID = 1L;
19    
20    
21     public LocationService() {
22     super();
23     // TODO Auto-generated constructor stub
24     }
25    
26    
27     protected void updateDb(Connection conn, long imei, double latitude, double longitude, String handle, String group) throws SQLException {
28     PreparedStatement stmt = null;
29     try {
30     stmt = conn.prepareStatement("UPDATE droidradar SET handle=?, groupname=?, latitude=?, longitude=?, updated=now() WHERE imei=?");
31     stmt.setString(1, handle);
32     stmt.setString(2, group);
33     stmt.setDouble(3, latitude);
34     stmt.setDouble(4, longitude);
35     stmt.setLong(5, imei);
36    
37     int count = stmt.executeUpdate();
38    
39    
40     System.out.println("count" + count);
41    
42     if (count < 1) {
43     stmt.close();
44     stmt = conn.prepareStatement("INSERT INTO droidradar (imei,handle,groupname,latitude,longitude,updated) VALUES (?,?,?,?,?, now() )" );
45     stmt.setLong(1, imei);
46     stmt.setString(2, handle);
47     stmt.setString(3, group);
48     stmt.setDouble(4, latitude);
49     stmt.setDouble(5, longitude);
50     stmt.execute();
51     }
52     } finally {
53     if (stmt != null && !stmt.isClosed())
54     stmt.close();
55     }
56     }
57    
58     protected String locateDroids(Connection conn, long imei, double latitude, double longitude) throws SQLException {
59     //inner select is workaround from not being able to use a calculated column directly in where clause
60     final String SQL = "SELECT * FROM ( "+
61 torben 273 " SELECT imei,handle,groupname,latitude,longitude, " +
62     " extract(epoch from now())::int - extract(epoch from updated)::int AS lastupdate, " +
63 torben 274 " earth_distance( ll_to_earth(latitude,longitude), ll_to_earth(?,?))::int AS calcdist " +
64 torben 273 " FROM droidradar " +
65     " WHERE imei <> ? AND updated > now() - interval '15 minutes' " +
66     " ) AS droidradar2 " +
67 torben 272 "WHERE calcdist < 64000 " +
68     "ORDER BY calcdist ASC ";
69    
70     System.out.println(SQL);
71    
72     PreparedStatement stmt = null;
73     ResultSet res = null;
74    
75     StringBuffer buff = new StringBuffer();
76    
77     buff.append("<?xml version=\"1.0\"?>\n");
78     buff.append("<droids>\n");
79     try
80     {
81     stmt = conn.prepareStatement(SQL);
82     stmt.setDouble(1, latitude);
83     stmt.setDouble(2, longitude);
84     stmt.setLong(3, imei);
85    
86     res = stmt.executeQuery();
87    
88     while (res.next()) {
89     buff.append("<droid>\n");
90     buff.append("<imei>").append(res.getLong(1) ) .append("</imei>\n");
91     buff.append("<handle>").append(res.getString(2) ) .append("</handle>\n");
92     buff.append("<group>").append(res.getString(3) ) .append("</group>\n");
93     buff.append("<latitude>").append(res.getString(4) ) .append("</latitude>\n");
94     buff.append("<longitude>").append(res.getString(5) ) .append("</longitude>\n");
95 torben 273 buff.append("<lastupdate>").append(res.getInt(6) ) .append("</lastupdate>\n");
96 torben 272
97     buff.append("</droid>\n");
98     }
99     } finally {
100     if (res != null && !res.isClosed())
101     res.close();
102     if (stmt != null && !stmt.isClosed())
103     stmt.close();
104     }
105     buff.append("</droids>\n");
106     return buff.toString();
107     }
108    
109     protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
110    
111     long imei = Long.parseLong(request.getParameter("imei"));
112    
113     double latitude = Double.parseDouble( request.getParameter("latitude"));
114     double longitude = Double.parseDouble( request.getParameter("longitude"));
115    
116    
117     String handle = request.getParameter("handle");
118     String group = request.getParameter("group");
119    
120    
121     Connection conn = null;
122     try {
123     Context ctx = new InitialContext();
124     DataSource ds = (DataSource) ctx.lookup("java:comp/env/jdbc/test");
125     conn = ds.getConnection();
126    
127     updateDb(conn, imei, latitude, longitude, handle, group);
128    
129     String xml = locateDroids(conn, imei, latitude, longitude);
130    
131     response.setContentType("text/xml");
132     response.getWriter().print(xml);
133    
134     conn.close();
135     conn = null;
136    
137    
138     } catch (Exception e) {
139     throw new ServletException(e);
140     } finally {
141     try {
142     if (conn != null)
143     conn.close();
144     } catch (Throwable t) {}
145     }
146    
147     }
148    
149     }

  ViewVC Help
Powered by ViewVC 1.1.20