org.waterforpeople.mapping.app.web.WaterForPeopleMappingGoogleServlet.java Source code

Java tutorial

Introduction

Here is the source code for org.waterforpeople.mapping.app.web.WaterForPeopleMappingGoogleServlet.java

Source

/*
 *  Copyright (C) 2010-2012 Stichting Akvo (Akvo Foundation)
 *
 *  This file is part of Akvo FLOW.
 *
 *  Akvo FLOW is free software: you can redistribute it and modify it under the terms of
 *  the GNU Affero General Public License (AGPL) as published by the Free Software Foundation,
 *  either version 3 of the License or any later version.
 *
 *  Akvo FLOW is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
 *  without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
 *  See the GNU Affero General Public License included below for more details.
 *
 *  The full license text can also be seen at <http://www.gnu.org/licenses/agpl.html>.
 */

package org.waterforpeople.mapping.app.web;

import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.util.Date;
import java.util.List;
import java.util.logging.Logger;

import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.commons.lang.time.DateFormatUtils;
import org.waterforpeople.mapping.dao.KMLDAO;

import com.gallatinsystems.common.util.ZipUtil;
import com.gallatinsystems.gis.map.dao.MapFragmentDao;
import com.gallatinsystems.gis.map.domain.MapFragment;
import com.gallatinsystems.gis.map.domain.MapFragment.FRAGMENTTYPE;
import com.google.appengine.api.datastore.Blob;

@SuppressWarnings("serial")
public class WaterForPeopleMappingGoogleServlet extends HttpServlet {
    @SuppressWarnings("unused")
    private static final Logger log = Logger.getLogger(WaterForPeopleMappingGoogleServlet.class.getName());

    public void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException {

        String showKML = req.getParameter("showKML");
        @SuppressWarnings("unused")
        String processFile = req.getParameter("processFile");
        String showRegion = req.getParameter("showRegion");
        String action = req.getParameter("action");
        String countryCode = req.getParameter("countryCode");
        if (showKML != null) {
            Long kmlKey = null;
            if (req.getParameter("kmlID") != null) {
                kmlKey = Long.parseLong(req.getParameter("kmlID"));
            }
            if (kmlKey != null) {
                KMLDAO kmlDAO = new KMLDAO();
                String kmlString = kmlDAO.getKML(kmlKey);
                resp.setContentType("application/vnd.google-earth.kml+xml");
                resp.getWriter().println(kmlString);

            } else {
                KMLGenerator kmlGen = new KMLGenerator();
                String placemarksDocument = null;
                String timestamp = DateFormatUtils.formatUTC(new Date(),
                        DateFormatUtils.ISO_DATE_FORMAT.getPattern());
                if (countryCode != null) {
                    placemarksDocument = kmlGen.generateDocument("PlacemarksNewLook.vm", countryCode);
                    resp.setHeader("Content-Disposition",
                            "inline; filename=waterforpeoplemapping_" + countryCode + "_" + timestamp + ".kmz;");
                } else {
                    placemarksDocument = kmlGen.generateDocument("PlacemarksNewLook.vm");
                    resp.setHeader("Content-Disposition",
                            "inline; filename=waterforpeoplemapping_" + timestamp + "_.kmz;");
                }
                // ToDo implement kmz compression now that kmls are so big
                // application/vnd.google-earth.kmz
                resp.setContentType("application/vnd.google-earth.kmz+xml");
                ServletOutputStream out = resp.getOutputStream();

                ByteArrayOutputStream os = ZipUtil.generateZip(placemarksDocument, "waterforpeoplemapping.kml");
                out.write(os.toByteArray());
                out.flush();

            }
        } else if (showRegion != null) {
            KMLGenerator kmlGen = new KMLGenerator();
            String placemarksDocument = kmlGen.generateRegionDocumentString("Regions.vm");
            resp.setContentType("application/vnd.google-earth.kml+xml");
            resp.getWriter().println(placemarksDocument);

        } else if ("getLatestMap".equals(action)) {
            MapFragmentDao mfDao = new MapFragmentDao();
            List<MapFragment> mfList = mfDao.searchMapFragments(null, null, null,
                    FRAGMENTTYPE.GLOBAL_ALL_PLACEMARKS, "all", "createdDateTime", "desc");
            Blob map = mfList.get(0).getBlob();
            resp.setContentType("application/vnd.google-earth.kmz+xml");
            ServletOutputStream out = resp.getOutputStream();
            resp.setHeader("Content-Disposition", "inline; filename=waterforpeoplemapping.kmz;");
            out.write(map.getBytes());
            out.flush();
        }
    }

}