/[projects]/android/TrainInfoServiceGoogle/src/dk/thoerup/traininfoservice/LocateStations.java
ViewVC logotype

Diff of /android/TrainInfoServiceGoogle/src/dk/thoerup/traininfoservice/LocateStations.java

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

android/TrainInfoService/src/dk/thoerup/traininfoservice/LocateStations.java revision 309 by torben, Thu Sep 10 19:00:31 2009 UTC android/TrainInfoServiceGoogle/src/dk/thoerup/traininfoservice/LocateStations.java revision 1105 by torben, Wed Sep 22 21:09:39 2010 UTC
# Line 1  Line 1 
1  package dk.thoerup.traininfoservice;  package dk.thoerup.traininfoservice;
2    
3  import java.io.IOException;  import java.io.IOException;
4  import java.sql.Connection;  import java.io.StringWriter;
 import java.sql.PreparedStatement;  
 import java.sql.ResultSet;  
5  import java.sql.SQLException;  import java.sql.SQLException;
6    import java.util.logging.Level;
7    import java.util.logging.Logger;
8    
9  import javax.servlet.ServletException;  import javax.servlet.ServletException;
10  import javax.servlet.http.HttpServlet;  import javax.servlet.http.HttpServlet;
11  import javax.servlet.http.HttpServletRequest;  import javax.servlet.http.HttpServletRequest;
12  import javax.servlet.http.HttpServletResponse;  import javax.servlet.http.HttpServletResponse;
13    
14  import dk.thoerup.traininfoservice.DBConnection;  import org.simpleframework.xml.Serializer;
15    import org.simpleframework.xml.core.Persister;
16    
17    import dk.thoerup.android.traininfo.common.StationBean;
18    
19  /**  /**
20   * Servlet implementation class LocateStations   * Servlet implementation class LocateStations
21   */   */
22    
23  public class LocateStations extends HttpServlet {  public class LocateStations extends HttpServlet {
24          private static final long serialVersionUID = 1L;          private static final long serialVersionUID = 1L;
         
     /**  
      * @see HttpServlet#HttpServlet()  
      */  
     public LocateStations() {  
         super();  
         // TODO Auto-generated constructor stub  
     }  
   
         protected String getStations(Connection conn, double latitude, double longitude) throws SQLException {  
                 //inner select is workaround from not being able to use a calculated column directly in where clause  
                 final String SQL = "SELECT * FROM ( "+  
                                                    "               SELECT id,name,latitude,longitude,stationcode_fjrn,stationcode_stog, " +  
                                                    "                     earth_distance( ll_to_earth(latitude,longitude), ll_to_earth(?,?))::int AS calcdist " +  
                                                    "               FROM trainstations " +  
                                                    "               WHERE latitude IS NOT NULL AND longitude IS NOT NULL " +  
                                                    "       ) AS trainstations2 " +  
                                                "ORDER BY calcdist ASC " +  
                                                "LIMIT 4 ";  
                   
                 System.out.println(SQL);  
                   
                 PreparedStatement stmt = null;  
                 ResultSet res = null;  
                   
                 StringBuffer buff = new StringBuffer();  
                   
                 buff.append("<?xml version=\"1.0\" ?>\n");  
                 buff.append("<stations>\n");  
                 try  
                 {  
                         stmt = conn.prepareStatement(SQL);  
                         stmt.setDouble(1, latitude);  
                         stmt.setDouble(2, longitude);  
                           
                         res = stmt.executeQuery();  
                           
                         while (res.next()) {  
                                 buff.append("<station>\n");  
25    
26                                  buff.append("<id>").append( res.getInt(1) ).append("</id>\n");          Logger logger = Logger.getLogger( LocateStations.class.toString() );
27                                  buff.append("<name>").append( res.getString(2) ) .append("</name>\n");  
28                                  buff.append("<latitude>").append( res.getDouble(3) ) .append("</latitude>\n");          StationDAO stationDao = new StationDAO();
29                                  buff.append("<longitude>").append( res.getDouble(4) ) .append("</longitude>\n");  
30                                  res.getString(5);  
31                                  buff.append("<fjerntog>").append( !res.wasNull() ) .append("</fjerntog>\n");          protected String transformToIntList(String input) {            
32                                  res.getString(6);                  String strings[] = input.split(",");
33                                  buff.append("<stog>").append( !res.wasNull() ) .append("</stog>\n");  
34                                  buff.append("<calcdist>").append( res.getInt(7) ) .append("</calcdist>\n");                  StringBuffer sb = new StringBuffer();
35                                    
36                                  buff.append("</station>\n");                                              for (int i = 0; i<strings.length; i++) {
37                            if (i>0) {
38                                    sb.append(",");
39                          }                          }
40                  } finally {                          sb.append( Integer.parseInt(strings[i])); //by doing the integer conversion we ensure that it really is a integer
                         if (res != null && !res.isClosed())  
                                 res.close();  
                         if (stmt != null && !stmt.isClosed())  
                                 stmt.close();  
41                  }                  }
42                  buff.append("</stations>\n");                  return sb.toString();          
                 return buff.toString();  
43          }          }
44    
45          protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {  
46                            protected StationBean getStations(HttpServletRequest req) throws SQLException {
47                  double latitude = Double.parseDouble( request.getParameter("latitude") );                  StationBean stations = null;
48                  double longitude = Double.parseDouble( request.getParameter("longitude") );                  if (req.getParameter("latitude") != null && req.getParameter("latitude") != null) {
49                                                            
50                  Connection conn = null;                          Statistics.getInstance().incrementStationLookupsLocation();
51                            
52                            double latitude = Double.parseDouble( req.getParameter("latitude") );
53                            double longitude = Double.parseDouble( req.getParameter("longitude") );
54                            stations = stationDao.getByLocation(latitude, longitude);
55    
56                    } else if (req.getParameter("name") != null) {
57                            Statistics.getInstance().incrementStationLookupsName();
58                            String name = req.getParameter("name").trim();
59                            stations = stationDao.getByName(name);
60    
61                    } else if (req.getParameter("list") != null) {
62                            Statistics.getInstance().incrementStationLookupsFavorites();
63                            String list = transformToIntList( req.getParameter("list"));
64                            stations = stationDao.getByList(list);
65                    }
66                    return stations;
67            }
68    
69    
70            protected String formatStations(StationBean stations) throws ServletException {
71    
72                    Serializer serializer = new Persister();
73    
74                    StringWriter out = new StringWriter();
75    
76                  try {                  try {
77                          conn = DBConnection.getConnection();                          serializer.write(stations, out);
                           
                         String xml = getStations(conn, latitude, longitude);  
                           
                         response.setContentType("text/xml");  
                         response.getWriter().print(xml);  
                           
                         conn.close();  
                         conn = null;  
                           
78                  } catch (Exception e) {                  } catch (Exception e) {
79                          throw new ServletException(e);                          throw new ServletException(e);
                 } finally {  
                         try {  
                                 if (conn != null)  
                                         conn.close();  
                         } catch (Throwable t) {}  
80                  }                  }
81                    
82                    return out.toString();
83            }
84    
85            @Override
86            protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
87    
88                    try {
89                            StationBean stations = getStations(request);
90    
91    
92                            if (stations != null){
93                                    String xml = formatStations(stations);
94    
95                                    response.setContentType("text/xml");
96                                    response.getWriter().print(xml);
97                            } else {
98                                    response.sendError(400, "not enough parameters");              
99                            }
100    
101    
102                    } catch (Exception e) {                        
103                            logger.log(Level.SEVERE, "Exception while finding stations", e);
104                            response.sendError(500);                                                
105                    }
106          }          }
107    
108  }  }

Legend:
Removed from v.309  
changed lines
  Added in v.1105

  ViewVC Help
Powered by ViewVC 1.1.20