/* (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.awt.datatransfer.DataFlavor;
import java.awt.datatransfer.UnsupportedFlavorException;
import java.io.IOException;
import java.io.OutputStream;
import javax.activation.DataContentHandler;
import javax.activation.DataSource;
import javax.xml.transform.TransformerException;
import org.geoserver.wcs2_0.util.EnvelopeAxesLabelsMapper;
import org.geotools.coverage.grid.GridCoverage2D;
import org.vfny.geoserver.wcs.WcsException;
/**
* A data handler for the fake "geoserver/coverage20" mime type. In fact, it encodes WCS 2.0 GMLCov
* document (an xml document)
*
* @author Andrea Aime - GeoSolutions
*/
public class GMLCovHandler implements DataContentHandler {
public Object getContent(DataSource source) throws IOException {
throw new UnsupportedOperationException(
"This handler is not able to work on the parsing side");
}
public Object getTransferData(DataFlavor flavor, DataSource source)
throws UnsupportedFlavorException, IOException {
throw new UnsupportedOperationException(
"This handler is not able to work on the parsing side");
}
public DataFlavor[] getTransferDataFlavors() {
return null;
}
public void writeTo(Object value, String mimeType, OutputStream os) throws IOException {
CoverageData data = (CoverageData) value;
final GMLTransformer transformer = new GMLTransformer(data.envelopeDimensionsMapper);
transformer.setIndentation(4);
transformer.setFileReference(data.fileReference);
try {
transformer.transform(data.coverage, os);
} catch (TransformerException e) {
new WcsException(e);
}
}
/**
* Just a data holder to keep togheter the informations needed to encode the GMLCOV response
*
* @author Andrea Aime - GeoSolutions
*/
static class CoverageData {
GridCoverage2D coverage;
FileReference fileReference;
EnvelopeAxesLabelsMapper envelopeDimensionsMapper;
public CoverageData(GridCoverage2D coverage, FileReference fileReference, EnvelopeAxesLabelsMapper envelopeDimensionsMapper) {
this.coverage = coverage;
this.fileReference = fileReference;
this.envelopeDimensionsMapper = envelopeDimensionsMapper;
}
}
}