/* (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.wcs2_0.response; import java.io.IOException; import java.io.OutputStream; import java.util.Arrays; import java.util.HashMap; import java.util.Map; import javax.xml.transform.TransformerException; import org.geoserver.config.GeoServer; import org.geoserver.platform.ServiceException; import org.geoserver.wcs.responses.BaseCoverageResponseDelegate; import org.geoserver.wcs.responses.CoverageResponseDelegate; import org.geoserver.wcs2_0.util.EnvelopeAxesLabelsMapper; import org.geotools.coverage.grid.GridCoverage2D; import org.vfny.geoserver.wcs.WcsException; /** * Encoding a {@link GridCoverage2D} as per WCS 2.0 GML format. * * @author Simone Giannecchini, GeoSolutions SAS * */ public class GMLCoverageResponseDelegate extends BaseCoverageResponseDelegate implements CoverageResponseDelegate { /** FILE_EXTENSION */ private static final String FILE_EXTENSION = "gml"; /** MIME_TYPE */ private static final String MIME_TYPE = "application/gml+xml"; /** Can be used to map dimensions name to indexes */ private EnvelopeAxesLabelsMapper envelopeDimensionsMapper; @SuppressWarnings("serial") public GMLCoverageResponseDelegate(EnvelopeAxesLabelsMapper envelopeDimensionsMapper, GeoServer geoserver) { super(geoserver, Arrays.asList(FILE_EXTENSION, MIME_TYPE), // output formats new HashMap<String, String>() { // file extensions { put(MIME_TYPE, FILE_EXTENSION); put(FILE_EXTENSION, FILE_EXTENSION); } }, new HashMap<String, String>() { // mime types { put(MIME_TYPE, MIME_TYPE); put(FILE_EXTENSION, MIME_TYPE); } }); this.envelopeDimensionsMapper = envelopeDimensionsMapper; } @Override public void encode(GridCoverage2D coverage, String outputFormat, Map<String, String> econdingParameters, OutputStream output) throws ServiceException, IOException { final GMLTransformer transformer = new GMLTransformer(envelopeDimensionsMapper); transformer.setIndentation(4); try { transformer.transform(coverage, output); } catch (TransformerException e) { new WcsException(e); } } }