package dk.thoerup.traininfoservice; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.sql.SQLException; import java.util.logging.Level; import java.util.logging.Logger; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.simpleframework.xml.Serializer; import org.simpleframework.xml.core.Persister; import dk.thoerup.android.traininfo.common.StationBean; /** * Servlet implementation class LocateStations */ @WebServlet(urlPatterns={"/LocateStations"}) public class LocateStations extends HttpServlet { private static final long serialVersionUID = 1L; 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; i0) { sb.append(","); } sb.append( Integer.parseInt(strings[i])); //by doing the integer conversion we ensure that it really is a integer } sb.append(")"); return sb.toString(); } protected StationBean getStations(HttpServletRequest req) throws SQLException { StationBean stations = null; if (req.getParameter("latitude") != null && req.getParameter("latitude") != null) { Statistics.getInstance().incrementStationLookupsLocation(); double latitude = Double.parseDouble( req.getParameter("latitude") ); double longitude = Double.parseDouble( req.getParameter("longitude") ); stations = stationDao.getByLocation(latitude, longitude); } else if (req.getParameter("name") != null) { Statistics.getInstance().incrementStationLookupsName(); String name = req.getParameter("name").trim(); stations = stationDao.getByName(name); } else if (req.getParameter("list") != null) { Statistics.getInstance().incrementStationLookupsFavorites(); String list = transformToIntList( req.getParameter("list")); stations = stationDao.getByList(list); } return stations; } protected String formatStations(StationBean stations) throws ServletException { Serializer serializer = new Persister(); ByteArrayOutputStream out = new ByteArrayOutputStream(); try { serializer.write(stations, out); } catch (Exception e) { throw new ServletException(e); } return out.toString(); } @Override protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { try { StationBean stations = getStations(request); if (stations != null){ String xml = formatStations(stations); response.setContentType("text/xml"); response.getWriter().print(xml); } else { response.sendError(400, "not enough parameters"); } } catch (Exception e) { logger.log(Level.SEVERE, "Exception while finding stations", e); response.sendError(500); } } }