package org.geoserver.csw;
import net.opengis.cat.csw20.CapabilitiesType;
import net.opengis.ows10.DomainType;
import net.opengis.ows10.OperationType;
import net.opengis.ows10.OperationsMetadataType;
import org.geoserver.csw.store.CatalogStore;
/**
* Adds a output format to the GetRecords element. If the generation is properly
* isolated, doing so won't result in an accumulation of output formats as the
* decorate method is called across different GetCapabilities requests
*
* @author Andrea Aime - GeoSolution
*/
public class CSWTestDecorator implements CapabilitiesDecorator {
@Override
public CapabilitiesType decorate(CapabilitiesType caps, CatalogStore store) {
// amend GetRecords
OperationsMetadataType operations = caps.getOperationsMetadata();
OperationType gro = getOperation("GetRecords", operations);
DomainType outputFormats = getParameter("outputFormat", gro);
outputFormats.getValue().add("text/xml");
return caps;
}
private OperationType getOperation(String operationName,
OperationsMetadataType operations) {
for (Object o : operations.getOperation()) {
OperationType op = (OperationType) o;
if (operationName.equals(op.getName())) {
return op;
}
}
throw new IllegalArgumentException("Could not find operation "
+ operationName);
}
private DomainType getParameter(String parameterName,
OperationType operation) {
DomainType result = getParameterIfExists(parameterName, operation);
if (result == null) {
throw new IllegalArgumentException("Could not find parameter "
+ parameterName);
} else {
return result;
}
}
private DomainType getParameterIfExists(String parameterName,
OperationType operation) {
for (Object o : operation.getParameter()) {
DomainType dt = (DomainType) o;
if (parameterName.equals(dt.getName())) {
return dt;
}
}
return null;
}
}