/* (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.describelayer;
import java.io.IOException;
import java.io.OutputStream;
import java.nio.charset.Charset;
import javax.xml.transform.TransformerException;
import org.geoserver.platform.ServiceException;
import org.geoserver.wms.DescribeLayerRequest;
import org.geoserver.wms.WMS;
/**
* A GetFeatureInfo response handler specialized in producing GML 3 data for a GetFeatureInfo
* request.
*
* <p>
* This class does not deals directly with GML encoding. Instead, it works by taking the
* FeatureResults produced in <code>execute()</code> and constructs a <code>GetFeaturesResult</code>
* wich is passed to a <code>GML2FeatureResponseDelegate</code>, as if it where the result of a
* GetFeature WFS request.
* </p>
*
* @author carlo cancellieri - GeoSolutions
*/
public class XMLDescribeLayerResponse extends DescribeLayerResponse {
public static final String DESCLAYER_MIME_TYPE = "application/vnd.ogc.wms_xml";
protected final WMS wms;
/**
* Constructor for subclasses
*/
public XMLDescribeLayerResponse(final WMS wms) {
super(DESCLAYER_MIME_TYPE);
this.wms = wms;
}
public XMLDescribeLayerResponse(final WMS wms, String type) {
super(type);
this.wms = wms;
}
/**
* Takes the <code>FeatureResult</code>s generated by the <code>execute</code> method in the
* superclass and constructs a <code>DescribeLayerResult</code> which is passed to a
* <code>GML2FeatureResponseDelegate</code>.
*
* @see AbstractFeatureInfoResponse#writeTo(OutputStream)
*/
@Override
public void write(DescribeLayerModel results, DescribeLayerRequest request, OutputStream out)
throws ServiceException, IOException {
DescribeLayerTransformer transformer;
transformer = new DescribeLayerTransformer(request.getBaseUrl());
Charset encoding = wms.getCharSet();
transformer.setEncoding(encoding);
if (wms.getGeoServer().getSettings().isVerbose()) {
transformer.setIndentation(2);
}
try {
transformer.transform(request, out);
out.flush();
} catch (TransformerException e) {
throw new ServiceException(e);
}
}
}