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

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

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

revision 292 by torben, Tue Sep 1 19:17:18 2009 UTC revision 588 by torben, Mon Feb 8 19:12:15 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;
 import java.sql.Connection;  
 import java.sql.PreparedStatement;  
 import java.sql.ResultSet;  
4  import java.sql.SQLException;  import java.sql.SQLException;
5    import java.util.List;
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    
 import dk.thoerup.traininfoservice.DBConnection;  
   
14  /**  /**
15   * Servlet implementation class LocateStations   * Servlet implementation class LocateStations
16   */   */
17  public class LocateStations extends HttpServlet {  public class LocateStations extends HttpServlet {
18          private static final long serialVersionUID = 1L;          private static final long serialVersionUID = 1L;
19          
20      /**          Logger logger = Logger.getLogger( LocateStations.class.toString() );
21       * @see HttpServlet#HttpServlet()  
22       */          StationDAO stationDao = new StationDAO();
23      public LocateStations() {  
24          super();  
25          // TODO Auto-generated constructor stub          protected String transformToIntList(String input) {            
26      }                  String strings[] = input.split(",");
27    
28          protected String getStations(Connection conn, double latitude, double longitude) throws SQLException {                  StringBuffer sb = new StringBuffer();
29                  //inner select is workaround from not being able to use a calculated column directly in where clause                  sb.append("(");
30                  final String SQL = "SELECT * FROM ( "+                  for (int i = 0; i<strings.length; i++) {
31                                                     "               SELECT name,latitude,longitude,address,stationcode, " +                          if (i>0) {
32                                                     "                     earth_distance( ll_to_earth(latitude,longitude), ll_to_earth(?,?))::int AS calcdist " +                                  sb.append(",");
                                                    "               FROM trainstations " +  
                                                    "       ) 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");  
   
                                 buff.append("<name>").append( res.getString(1) ) .append("</name>\n");  
                                 buff.append("<latitude>").append( res.getDouble(2) ) .append("</latitude>\n");  
                                 buff.append("<longitude>").append( res.getDouble(3) ) .append("</longitude>\n");                                  
                                 buff.append("<address>").append( res.getString(4) ) .append("</address>\n");      
                                 buff.append("<stationcode>").append( res.getString(5) ) .append("</stationcode>\n");  
                                 buff.append("<calcdist>").append( res.getDouble(6) ) .append("</calcdist>\n");  
                                   
                                 buff.append("</station>\n");                              
33                          }                          }
34                  } 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();  
35                  }                  }
36                    sb.append(")");
37                    return sb.toString();          
38            }
39    
40    
41            protected List<StationBean> getStations(HttpServletRequest req) throws SQLException {
42                    List<StationBean> stations = null;
43                    if (req.getParameter("latitude") != null && req.getParameter("latitude") != null) {
44                            double latitude = Double.parseDouble( req.getParameter("latitude") );
45                            double longitude = Double.parseDouble( req.getParameter("longitude") );
46                            stations = stationDao.getByLocation(latitude, longitude);
47    
48                    } else if (req.getParameter("name") != null) {
49                            String name = req.getParameter("name").trim();
50                            stations = stationDao.getByName(name);
51    
52                    } else if (req.getParameter("list") != null) {
53                            String list = transformToIntList( req.getParameter("list"));
54                            stations = stationDao.getByList(list);
55                    }
56                    return stations;
57            }
58    
59    
60            protected String formatStations(List<StationBean> stations)  {
61    
62                    StringBuffer buff = new StringBuffer();
63    
64                    buff.append("<?xml version=\"1.0\" ?>\n");
65                    buff.append("<stations>\n");    
66    
67    
68                    for (int i=0; i<stations.size(); i++) {                
69                            StationBean station = stations.get(i);
70    
71                            buff.append("<station>\n");
72    
73                            buff.append("<id>").append( station.getId() ).append("</id>\n");
74                            buff.append("<name>").append( station.getName() ) .append("</name>\n");
75                            buff.append("<latitude>").append( station.getLatitude() ) .append("</latitude>\n");
76                            buff.append("<longitude>").append( station.getLongitude() ) .append("</longitude>\n");                  
77                            buff.append("<regional>").append( station.getRegional() != null ) .append("</regional>\n");
78                            buff.append("<strain>").append( station.getStrain() != null ) .append("</strain>\n");
79                            buff.append("<metro>").append( station.getMetro() != null ).append("</metro>\n");
80                            buff.append("<address>").append( station.getAddress() != null ?  station.getAddress() : "").append("</address>");                              
81                            buff.append("<calcdist>").append( station.getCalcdist() ) .append("</calcdist>\n");
82    
83                            buff.append("</station>\n");                            
84                    }
85                  buff.append("</stations>\n");                  buff.append("</stations>\n");
86                  return buff.toString();                  return buff.toString();
87          }          }
88    
89            @Override
90          protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {          protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
91                    
92                  double latitude = Double.parseDouble( request.getParameter("latitude") );  
                 double longitude = Double.parseDouble( request.getParameter("longitude") );  
                                   
                 Connection conn = null;  
93                  try {                  try {
94                          conn = DBConnection.getConnection();                          List<StationBean> stations = getStations(request);
95                            
96                          String xml = getStations(conn, latitude, longitude);  
97                                                    if (stations != null){
98                          response.setContentType("text/xml");                                  String xml = formatStations(stations);
99                          response.getWriter().print(xml);  
100                                                            response.setContentType("text/xml");
101                          conn.close();                                  response.getWriter().print(xml);
102                          conn = null;                          } else {
103                                                            response.sendError(400, "not enough parameters");              
104                  } catch (Exception e) {                          }
105                          throw new ServletException(e);  
106                  } finally {  
107                          try {                  } catch (Exception e) {                        
108                                  if (conn != null)                          logger.log(Level.SEVERE, "Exception while finding stations", e);
109                                          conn.close();                          response.sendError(500);                                                
110                          } catch (Throwable t) {}                  }
                 }  
111          }          }
112    
113  }  }

Legend:
Removed from v.292  
changed lines
  Added in v.588

  ViewVC Help
Powered by ViewVC 1.1.20