/* (c) 2014 Open Source Geospatial Foundation - all rights reserved * (c) 2001 - 2013 OpenPlans * This code is licensed under the GPL 2.0 license, available at the root * application directory. */ package org.geoserver.wms.georss; import java.io.IOException; import java.nio.charset.Charset; import java.util.Arrays; import java.util.Collections; import java.util.Set; import java.util.TreeSet; import org.geoserver.platform.ServiceException; import org.geoserver.wms.GetMapOutputFormat; import org.geoserver.wms.GetMapRequest; import org.geoserver.wms.MapProducerCapabilities; import org.geoserver.wms.WMS; import org.geoserver.wms.WMSMapContent; import org.geoserver.wms.map.XMLTransformerMap; public class AtomGeoRSSMapOutputFormat implements GetMapOutputFormat { /** mime type */ public static String MIME_TYPE = "application/atom+xml"; static final MapProducerCapabilities ATOM_CAPABILITIES = new MapProducerCapabilities(false, false, false, true, null); /** format names/aliases */ public static final Set<String> FORMAT_NAMES; static { String[] FORMATS = { MIME_TYPE, "atom", "application/atom xml" }; Set<String> names = new TreeSet<String>(String.CASE_INSENSITIVE_ORDER); names.addAll(Arrays.asList(FORMATS)); FORMAT_NAMES = Collections.unmodifiableSet(names); } private WMS wms; public AtomGeoRSSMapOutputFormat(WMS wms) { this.wms = wms; } /** * @see org.geoserver.wms.GetMapOutputFormat#getMimeType() */ public String getMimeType() { return MIME_TYPE; } /** * @see GetMapOutputFormat#getOutputFormatNames() */ public Set<String> getOutputFormatNames() { return FORMAT_NAMES; } /** * @see org.geoserver.wms.GetMapOutputFormat#produceMap(org.geoserver.wms.WMSMapContent) */ public XMLTransformerMap produceMap(WMSMapContent mapContent) throws ServiceException, IOException { AtomGeoRSSTransformer tx = new AtomGeoRSSTransformer(wms); GetMapRequest request = mapContent.getRequest(); String geometryEncoding = (String) request.getFormatOptions().get("encoding"); if ("gml".equals(geometryEncoding)) { tx.setGeometryEncoding(GeoRSSTransformerBase.GeometryEncoding.GML); } else if ("latlong".equals(geometryEncoding)) { tx.setGeometryEncoding(GeoRSSTransformerBase.GeometryEncoding.LATLONG); } else { tx.setGeometryEncoding(GeoRSSTransformerBase.GeometryEncoding.SIMPLE); } Charset encoding = wms.getCharSet(); tx.setEncoding(encoding); XMLTransformerMap result = new XMLTransformerMap(mapContent, tx, mapContent, getMimeType()); return result; } public MapProducerCapabilities getCapabilities(String format) { return ATOM_CAPABILITIES; } }