package com.google.gwt.maps.testing.server.servlets;
/*
* #%L
* GWT Maps API V3 - Showcase
* %%
* Copyright (C) 2011 - 2012 GWT Maps API V3
* %%
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
* #L%
*/
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@SuppressWarnings("serial")
public class KmlGenerator extends HttpServlet {
private String[] example;
/**
* GET request - (no POST request below, that would need to be added)
*
* @param request
* @param response
* @throws IOException
*/
public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException {
drawHtml(request, response);
}
/**
* render some XML as a page
* @param request
* @param response
* @throws IOException
*/
private void drawHtml(HttpServletRequest request, HttpServletResponse response) throws IOException {
String xml = getKml(request);
// write the html to page
response.setContentType("text/xml");
PrintWriter out = response.getWriter();
out.print(xml);
}
/**
* get the kml stuff
*
* @param request
*/
private String getKml(HttpServletRequest request) {
// TODO how to get a parameter - not used yet...
@SuppressWarnings("unused")
Long id = getParameterLong(request, "id");
StringBuilder sb = new StringBuilder();
sb.append("<?xml version=\"1.0\" standalone=\"yes\"?>\n");
sb.append("<kml xmlns=\"http://earth.google.com/kml/2.2\">\n");
sb.append("<Document>\n");
sb.append("<name><![CDATA[<b>Demonstration of <br>multiple data files <br>on one map</b>]]></name>\n");
sb.append("<Folder>\n");
addNetworkLinks(sb);
sb.append("</Folder>\n");
sb.append("</Document>\n");
sb.append("</kml>\n");
return sb.toString();
}
/**
* iterate the kml or kmz links I want
*
* @param sb
*/
private void addNetworkLinks(StringBuilder sb) {
for (int i=0; i < 3; i++) {
addNetworkLinks(sb, i);
}
}
/**
* get the network link
* @param sb
* @param i
*/
private void addNetworkLinks(StringBuilder sb, int i) {
sb.append("<NetworkLink>\n");
sb.append("<Link>\n");
sb.append("<href>" + getLink(i) + "</href>\n");
sb.append("</Link>\n");
sb.append("</NetworkLink>\n");
}
/**
* you could get these from app engine query dynamically, using parameters from the querystring
* @param index
*/
private String getLink(int index) {
if (example == null) {
example = new String[3];
// TODO some encoding of the querystring & has to take place and maybe other chars
//example[0] = "http://sites.google.com/a/cyclingthealps.com/cyclingthealps/routes/Flueelapass.kmz?attredirects=0&d=1";
example[0] = "http://sites.google.com/a/cyclingthealps.com/cyclingthealps/routes/Flueelapass.kmz?attredirects=0&d=1";
example[1] = "http://www.mappingsupport.com/p/gmap4/helpfile/County_Line_trail.kml";
example[2] = "http://www.mappingsupport.com/p/gmap4/helpfile/Teanaway_Peaks.kml";
}
String s = example[index];
return s;
}
/**
* grab a parameter from the request query string http://domain.tld?id=[0-9]+
*
* @param req
* @param parameter
* @return returns a long
*/
private Long getParameterLong(HttpServletRequest req, String parameter) {
String s = req.getParameter(parameter);
if (s == null) {
return null;
}
Long id = null;
try {
id = Long.parseLong(s);
} catch (NumberFormatException e) {
e.printStackTrace();
}
return id;
}
}