/* Copyright (c) 2001 - 2007 TOPP - www.openplans.org. All rights reserved.
* This code is licensed under the GPL 2.0 license, availible at the root
* application directory.
*/
package org.geoserver.wms.describelayer;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import javax.xml.transform.TransformerException;
import org.geoserver.ows.Response;
import org.geoserver.platform.Operation;
import org.geoserver.platform.ServiceException;
import org.geoserver.wms.DescribeLayer;
import org.geoserver.wms.DescribeLayerRequest;
import org.springframework.util.Assert;
/**
* Executes a <code>DescribeLayer</code> WMS request.
*
* <p>
* Receives a <code>DescribeLayerRequest</code> object holding the references to the requested
* layers and utilizes a transformer based on the org.geotools.xml.transform framework to encode the
* response.
* </p>
*
* @author Gabriel Roldan
* @version $Id$
*/
public class DescribeLayerResponse extends Response {
public static final String DESCLAYER_MIME_TYPE = "application/vnd.ogc.wms_xml";
public DescribeLayerResponse() {
super(DescribeLayerTransformer.class);
}
/**
* @return {@code "application/vnd.ogc.wms_xml"}
* @see org.geoserver.ows.Response#getMimeType(java.lang.Object,
* org.geoserver.platform.Operation)
*/
@Override
public String getMimeType(Object value, Operation operation) throws ServiceException {
return DESCLAYER_MIME_TYPE;
}
/**
* @param value
* {@link DescribeLayerTransformer}
* @param output
* where to write the response
* @param operation
* {@link DescribeLayer} operation that originated the {@code value} response
* @see org.geoserver.ows.Response#write(java.lang.Object, java.io.OutputStream,
* org.geoserver.platform.Operation)
*/
@Override
public void write(Object value, OutputStream output, Operation operation) throws IOException,
ServiceException {
Assert.isTrue(value instanceof DescribeLayerTransformer);
Assert.notNull(operation.getParameters());
Assert.isTrue(operation.getParameters()[0] instanceof DescribeLayerRequest);
DescribeLayerTransformer transformer = (DescribeLayerTransformer) value;
DescribeLayerRequest request = (DescribeLayerRequest) operation.getParameters()[0];
ByteArrayOutputStream out = new ByteArrayOutputStream();
try {
transformer.transform(request, out);
out.flush();
} catch (TransformerException e) {
throw new ServiceException(e);
}
output.write(out.toByteArray());
output.flush();
}
}