--- android/TrainInfoService/src/dk/thoerup/traininfoservice/RequestPlotter.java 2010/06/03 14:28:13 797 +++ android/TrainInfoService/src/dk/thoerup/traininfoservice/RequestPlotter.java 2010/06/07 08:37:29 798 @@ -1,12 +1,14 @@ package dk.thoerup.traininfoservice; import java.io.BufferedReader; +import java.io.ByteArrayOutputStream; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStreamReader; import java.util.logging.Level; import java.util.logging.Logger; - +import java.util.zip.ZipEntry; +import java.util.zip.ZipOutputStream; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; @@ -18,6 +20,9 @@ static final Logger log = Logger.getLogger(RequestPlotter.class.getName()); + static final String KML = "application/vnd.google-earth.kml"; + static final String KMZ = "application/vnd.google-earth.kmz"; + protected String getKml() { StringBuilder sb = new StringBuilder(); try { @@ -42,17 +47,18 @@ String toks[] = line.split(" "); String ip = toks[0]; String time = toks[3].replace("[", ""); - String argpart = toks[6].split("?")[1]; + String argpart = toks[6].split("\\?")[1]; + String args[] = argpart.split("&"); String lat = args[0].split("=")[1]; - String lng = args[0].split("=")[1]; + String lng = args[1].split("=")[1]; - sb.append( " " ); - sb.append( " IP=" + ip + " Time=" + time + "" ); - sb.append( " " + lng + "," + lat + ",0" ); - sb.append( " " ); + sb.append( " \n" ); + sb.append( " IP=" + ip + " Time=" + time + "\n" ); + sb.append( " " + lng + "," + lat + ",0\n" ); + sb.append( " \n" ); } @@ -69,8 +75,28 @@ @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { - resp.setContentType("application/vnd.google-earth.kml"); - resp.getWriter().print( getKml() ); + String data = getKml(); + + if (req.getParameter("zip") != null) { + + ByteArrayOutputStream baos = new ByteArrayOutputStream(); + + ZipOutputStream zip = new ZipOutputStream(baos); + zip.putNextEntry( new ZipEntry("trains.kml") ); + zip.write( data.getBytes() ); + zip.closeEntry(); + zip.close(); + + byte bytes[] = baos.toByteArray(); + + resp.setContentType(KMZ); + resp.setContentLength( bytes.length ); + resp.getOutputStream().write(bytes); + + } else { + resp.setContentType(KML); + resp.getWriter().print( getKml() ); + } }