public void handleXML(OperationContext context, Node root, XPath xpath)
throws Exception {
// initialize
LOGGER.finer("Handling csw:GetCapabilities request XML...");
CapabilityOptions cOptions = context.getRequestOptions().getCapabilityOptions();
ServiceProperties svcProps = context.getServiceProperties();
ParseHelper pHelper = new ParseHelper();
ValidationHelper vHelper = new ValidationHelper();
String locator;
String[] parsed;
ISupportedValues supported;
// service and version are parsed by the parent RequestHandler
// output format
locator = "ows:AcceptFormats/ows:OutputFormat";
parsed = pHelper.getParameterValues(root,xpath,locator);
supported = svcProps.getSupportedValues(CswConstants.Parameter_OutputFormat);
String outputFormat = Val.chkStr(vHelper.negotiateValue(supported,locator,parsed,false));
if (outputFormat.length() > 0) {
context.getOperationResponse().setOutputFormat(outputFormat);
} else {
locator = "@outputFormat";
parsed = pHelper.getParameterValues(root,xpath,locator);
supported = svcProps.getSupportedValues(CswConstants.Parameter_OutputFormat);
outputFormat = vHelper.validateValue(supported,locator,parsed,false);
context.getOperationResponse().setOutputFormat(outputFormat);
}
// sections (an empty sections parameter should return all non-optional sections)
locator = "ows:Sections/ows:Section";
parsed = pHelper.getParameterValues(root,xpath,locator);
supported = new SupportedValues(
"ServiceIdentification,ServiceProvider,OperationsMetadata,Filter_Capabilities",",");
if (parsed == null) {
parsed = pHelper.getParameterValues(root,xpath,"ows:Sections");
if (parsed != null) {
cOptions.setSections(new StringSet());
cOptions.getSections().add("Filter_Capabilities");
} else {
cOptions.setSections(vHelper.validateValues(supported,locator,parsed,false));
}
} else {
cOptions.setSections(vHelper.validateValues(supported,locator,parsed,false));
}
// execute
this.execute(context);
}