/* (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.csw.response;
import java.io.IOException;
import java.io.OutputStream;
import javax.xml.transform.TransformerException;
import net.opengis.cat.csw20.GetDomainType;
import net.opengis.cat.csw20.RequestBaseType;
import org.geoserver.catalog.util.CloseableIterator;
import org.geoserver.config.GeoServer;
import org.geoserver.csw.CSWInfo;
import org.geoserver.ows.Response;
import org.geoserver.platform.Operation;
import org.geoserver.platform.ServiceException;
/**
* Encodes domain values responses
*
* @author Andrea Aime - GeoSolutions
*/
public class CSWGetDomainResponse extends Response {
GeoServer gs;
public CSWGetDomainResponse(GeoServer gs) {
super(CloseableIterator.class);
this.gs = gs;
}
@Override
public boolean canHandle(Operation operation) {
Object request = operation.getParameters()[0];
if (request instanceof GetDomainType) {
return true;
} else {
throw new IllegalArgumentException("Unsupported request object type: " + request);
}
}
@Override
public String getMimeType(Object value, Operation operation) throws ServiceException {
return "application/xml";
}
@Override
public void write(Object value, OutputStream output, Operation operation) throws IOException,
ServiceException {
CloseableIterator<String> result = (CloseableIterator<String>) value;
RequestBaseType request = (RequestBaseType) operation.getParameters()[0];
CSWInfo csw = gs.getService(CSWInfo.class);
transformResponse(output, result, request, csw);
}
/**
* Actually encodes the response into a set of records
*
* @param output
* @param result
* @param request
* @param csw
*/
protected void transformResponse(OutputStream output, CloseableIterator<String> result,
RequestBaseType request, CSWInfo csw) {
CSWDomainValuesTransformer transformer = new CSWDomainValuesTransformer(request,
csw.isCanonicalSchemaLocation());
try {
transformer.transform(result, output);
} catch (TransformerException e) {
throw new ServiceException(e);
}
}
}