/* (c) 2015 Open Source Geospatial Foundation - all rights reserved * This code is licensed under the GPL 2.0 license, available at the root * application directory. */ package org.geoserver.wps.gdal; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.InputStream; import java.io.OutputStream; import javax.xml.parsers.SAXParser; import javax.xml.parsers.SAXParserFactory; import org.geoserver.wcs.response.GdalCoverageResponseDelegate; import org.geoserver.wps.ppio.XMLPPIO; import org.geotools.coverage.grid.GridCoverage2D; import org.geotools.gml4wcs.GML; import org.xml.sax.ContentHandler; import org.xml.sax.InputSource; import org.xml.sax.XMLReader; /** * Encode XML based output parameter using gdal_translate command */ public class GdalXMLPPIO extends XMLPPIO { private GdalCoverageResponseDelegate delegate; private String outputFormat; private String fileExtension; protected GdalXMLPPIO(String outputFormat, GdalCoverageResponseDelegate delegate) { super(GridCoverage2D.class, GridCoverage2D.class, GML.RectifiedGridType); this.delegate = delegate; this.outputFormat = outputFormat; this.fileExtension = delegate.getFileExtension(outputFormat); } @Override public String getFileExtension() { return this.fileExtension; } @Override public PPIODirection getDirection() { return PPIODirection.ENCODING; } @Override public Object decode(InputStream input) throws Exception { return null; } @Override public void encode(Object value, OutputStream os) throws Exception { delegate.encode((GridCoverage2D) value, outputFormat, null, os); } @Override public void encode(Object value, ContentHandler handler) throws Exception { ByteArrayOutputStream os = new ByteArrayOutputStream(); encode(value, os); InputStream bis = new ByteArrayInputStream(os.toByteArray()); SAXParserFactory saxParserFactory = SAXParserFactory.newInstance(); SAXParser saxParser = saxParserFactory.newSAXParser(); XMLReader parser = saxParser.getXMLReader(); parser.setContentHandler(handler); parser.parse(new InputSource(bis)); } }