--- android/TrainInfoService/src/dk/thoerup/traininfoservice/LocateStations.java 2010/02/08 18:42:00 587 +++ android/TrainInfoService/src/dk/thoerup/traininfoservice/LocateStations.java 2010/02/08 19:12:15 588 @@ -1,11 +1,8 @@ package dk.thoerup.traininfoservice; import java.io.IOException; -import java.sql.Connection; -import java.sql.PreparedStatement; -import java.sql.ResultSet; import java.sql.SQLException; - +import java.util.List; import java.util.logging.Level; import java.util.logging.Logger; @@ -22,11 +19,12 @@ Logger logger = Logger.getLogger( LocateStations.class.toString() ); + StationDAO stationDao = new StationDAO(); + - protected String transformToIntList(String input) { String strings[] = input.split(","); - + StringBuffer sb = new StringBuffer(); sb.append("("); for (int i = 0; i getStations(HttpServletRequest req) throws SQLException { + List stations = null; if (req.getParameter("latitude") != null && req.getParameter("latitude") != null) { - //inner select is workaround from not being able to use a calculated column directly in where clause - SQL = "SELECT * FROM ( "+ - " SELECT id,name,latitude,longitude,stationcode_fjrn,stationcode_stog, stationcode_metro, address," + - " earth_distance( ll_to_earth(latitude,longitude), ll_to_earth(?,?))::int AS calcdist " + - " FROM trainstations " + - " WHERE enabled = true " + - " ) AS trainstations2 " + - "ORDER BY calcdist ASC " + - "LIMIT 4 "; double latitude = Double.parseDouble( req.getParameter("latitude") ); double longitude = Double.parseDouble( req.getParameter("longitude") ); - stmt = conn.prepareStatement(SQL); - stmt.setDouble(1, latitude); - stmt.setDouble(2, longitude); - } else if (req.getParameter("name") != null) { - SQL = "SELECT id,name,latitude,longitude,stationcode_fjrn,stationcode_stog, stationcode_metro, address, 0.0 " + - "FROM trainstations " + - "WHERE name ILIKE ? AND enabled = true " + - "ORDER BY name "; + stations = stationDao.getByLocation(latitude, longitude); + } else if (req.getParameter("name") != null) { String name = req.getParameter("name").trim(); - stmt = conn.prepareStatement(SQL); - stmt.setString(1, name + "%"); + stations = stationDao.getByName(name); + } else if (req.getParameter("list") != null) { String list = transformToIntList( req.getParameter("list")); - SQL = "SELECT id,name,latitude,longitude,stationcode_fjrn,stationcode_stog,stationcode_metro, address,0.0 " + - "FROM trainstations " + - "WHERE id IN " + list + " AND enabled = true " + - "ORDER BY name "; - stmt = conn.prepareStatement(SQL); - } - - return stmt; + stations = stationDao.getByList(list); + } + return stations; } - protected String formatResultset(PreparedStatement stmt) throws SQLException { - ResultSet res = null; + protected String formatStations(List stations) { StringBuffer buff = new StringBuffer(); buff.append("\n"); buff.append("\n"); - try - { - res = stmt.executeQuery(); - - while (res.next()) { - buff.append("\n"); - - buff.append("").append( res.getInt(1) ).append("\n"); - buff.append("").append( res.getString(2) ) .append("\n"); - buff.append("").append( res.getDouble(3) ) .append("\n"); - buff.append("").append( res.getDouble(4) ) .append("\n"); - res.getString(5); - buff.append("").append( !res.wasNull() ) .append("\n"); - res.getString(6); - buff.append("").append( !res.wasNull() ) .append("\n"); - res.getString(7); - buff.append("").append( !res.wasNull() ).append("\n"); - - String address = res.getString(8); - buff.append("
").append( res.wasNull() ? "" : address ).append("
"); - buff.append("").append( res.getInt(9) ) .append("\n"); - buff.append("
\n"); - } - } finally { - if (res != null && !res.isClosed()) - res.close(); - if (stmt != null && !stmt.isClosed()) - stmt.close(); - } + for (int i=0; i\n"); + + buff.append("").append( station.getId() ).append("\n"); + buff.append("").append( station.getName() ) .append("\n"); + buff.append("").append( station.getLatitude() ) .append("\n"); + buff.append("").append( station.getLongitude() ) .append("\n"); + buff.append("").append( station.getRegional() != null ) .append("\n"); + buff.append("").append( station.getStrain() != null ) .append("\n"); + buff.append("").append( station.getMetro() != null ).append("\n"); + buff.append("
").append( station.getAddress() != null ? station.getAddress() : "").append("
"); + buff.append("").append( station.getCalcdist() ) .append("\n"); + + buff.append("\n"); + } buff.append("
\n"); return buff.toString(); } @@ -127,13 +89,13 @@ @Override protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { - Connection conn = null; + try { - conn = DBConnection.getConnection(); + List stations = getStations(request); + - PreparedStatement stmt = createStatement(conn, request); - if (stmt != null){ - String xml = formatResultset(stmt); + if (stations != null){ + String xml = formatStations(stations); response.setContentType("text/xml"); response.getWriter().print(xml); @@ -145,13 +107,7 @@ } catch (Exception e) { logger.log(Level.SEVERE, "Exception while finding stations", e); response.sendError(500); - } finally { - try { - if (conn != null) { - conn.close(); - } - } catch (Exception t) {} - } + } } }