Package org.vfny.geoserver.wms.responses.map.kml

Source Code of org.vfny.geoserver.wms.responses.map.kml.KMLMapProducer

/* Copyright (c) 2001 - 2007 TOPP - www.openplans.org.  All rights reserved.
* This code is licensed under the GPL 2.0 license, availible at the root
* application directory.
*/
package org.vfny.geoserver.wms.responses.map.kml;

import java.io.IOException;
import java.io.OutputStream;
import java.nio.charset.Charset;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.logging.Logger;

import javax.xml.transform.TransformerException;

import org.geoserver.config.ServiceInfo;
import org.geoserver.platform.ServiceException;
import org.geoserver.wms.WMS;
import org.geotools.map.MapLayer;
import org.vfny.geoserver.wms.GetMapProducer;
import org.vfny.geoserver.wms.WmsException;
import org.vfny.geoserver.wms.requests.GetMapRequest;
import org.vfny.geoserver.wms.responses.AbstractGetMapProducer;

/**
* Handles a GetMap request that spects a map in KML format.
*
* @author James Macgill
*/
public class KMLMapProducer extends AbstractGetMapProducer implements GetMapProducer {
  /** standard logger */
  protected static final Logger LOGGER = org.geotools.util.logging.Logging.getLogger("org.vfny.geoserver.responses.wms.kml");

    /**
     * Official KML mime type
     */
    public static final String MIME_TYPE = "application/vnd.google-earth.kml+xml";
   
    public static final List<String> OUTPUT_FORMATS = Arrays.asList(
                MIME_TYPE,
            "application/vnd.google-earth.kml",
            "kml",
            "application/vnd.google-earth.kml xml"
        );

    /** kml transformer which turns the map context into kml */
  protected KMLTransformer transformer;

  private List<String> aliases = new ArrayList<String>();
 
  public KMLMapProducer() {
    super(MIME_TYPE, OUTPUT_FORMATS);
  }

  /**
   * Request that encoding be halted if possible.
   *
   * @param gs
   *            The orriginating Service
   */
  public void abort(ServiceInfo gs) {
    if (transformer != null) {
      // transformer.abort();
    }
  }

  /**
   * aborts the encoding.
   */
  public void abort() {
    LOGGER.fine("aborting KML map response");

    // if (this.kmlEncoder != null) {
    // LOGGER.info("aborting KML encoder");
    // this.kmlEncoder.abort();
    // }
    if (transformer != null) {
      LOGGER.info("aborting KML encoder");

      // transformer.abort();
    }
  }

  /**
   * Produce the actual map ready for outputing.
   *
   * @param map
   *            WMSMapContext describing what layers, styles, area of interest
   *            etc are to be used when producing the map.
   *
   * @throws WmsException
   *             thrown if anything goes wrong during the production.
   */
  public void produceMap() throws WmsException {
    transformer = new KMLTransformer();

    // TODO: use GeoServer.isVerbose() to determine if we should indent?
    transformer.setIndentation(3);
    GetMapRequest request = mapContext.getRequest();
    WMS wms = request.getWMS();
    Charset encoding = wms.getCharSet();
    transformer.setEncoding(encoding);
  }

  /**
   * Pumps the map to the provided output stream. Note by this point that
   * produceMap should already have been called so little work should be done
   * within this method.
   *
   * @param out
   *            OutputStream to stream the map to.
   *
   * @throws ServiceException
   * @throws IOException
   *
   * @TODO replace stream copy with nio code.
   */
  public void writeTo(OutputStream out) throws ServiceException, IOException {
    try {
      transformer.transform(mapContext, out);
    } catch (TransformerException e) {
        //LOGGER.severe(e.getMessage());
        throw (IOException) new IOException().initCause(e);
    }
  }

  /**
   * @return a sensible .kml file name attachment header
   * @see GetMapProducer#getContentDisposition()
   */
  public String getContentDisposition() {
    return super.getContentDisposition(".kml");
  }
}
TOP

Related Classes of org.vfny.geoserver.wms.responses.map.kml.KMLMapProducer

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.