/* (c) 2014 Open Source Geospatial Foundation - all rights reserved * (c) 2013 OpenPlans * This code is licensed under the GPL 2.0 license, available at the root * application directory. */ package org.geoserver.kml.decorator; import java.io.IOException; import java.util.logging.Logger; import org.geoserver.kml.KmlEncodingContext; import org.geoserver.wms.WMSInfo; import org.geotools.util.logging.Logging; import de.micromata.opengis.kml.v_2_2_0.Feature; import de.micromata.opengis.kml.v_2_2_0.Placemark; import de.micromata.opengis.kml.v_2_2_0.atom.Link; /** * Adds an atom link used by the GeoSearch extension * TODO: move this to the GeoSearch module * * @author Andrea Aime - GeoSolutions */ public class PlacemarkSelfLinkDecoratorFactory implements KmlDecoratorFactory { @Override public KmlDecorator getDecorator(Class<? extends Feature> featureClass, KmlEncodingContext context) { // this decorator makes sense only for WMS if(!(context.getService() instanceof WMSInfo)) { return null; } String selfLinks = (String) context.getRequest().getFormatOptions().get("selfLinks"); if (selfLinks != null && selfLinks.equalsIgnoreCase("true") && Placemark.class.isAssignableFrom(featureClass)) { return new PlacemarkSelfLinkDecorator(); } else { return null; } } static class PlacemarkSelfLinkDecorator extends AbstractGeoSearchDecorator { static final Logger LOGGER = Logging.getLogger(PlacemarkSelfLinkDecorator.class); @Override public Feature decorate(Feature feature, KmlEncodingContext context) { Placemark pm = (Placemark) feature; String link = ""; try { link = getFeatureTypeURL(context); } catch (IOException ioe) { throw new RuntimeException(ioe); } String[] id = context.getCurrentFeature().getID().split("\\."); link = link + "/" + id[1] + ".kml"; Link al = pm.createAndSetAtomLink(link); al.setRel("self"); return pm; } } }