//parse the inputs for the request
Map<String, Object> inputs = new HashMap();
for ( Iterator i = request.getDataInputs().getInput().iterator(); i.hasNext(); ) {
InputType input = (InputType) i.next();
//locate the parameter for this request
Parameter p = pf.getParameterInfo(processName).get( input.getIdentifier().getValue() );
if ( p == null ) {
throw new WPSException( "No such parameter: " + input.getIdentifier().getValue() );
}
//find the ppio
ProcessParameterIO ppio = ProcessParameterIO.find( p, context );
if ( ppio == null ) {
throw new WPSException( "Unable to decode input: " + input.getIdentifier().getValue() );
}
//read the data
Object decoded = null;
if ( input.getReference() != null ) {
//this is a reference
InputReferenceType ref = input.getReference();
//grab the location and method
String href = ref.getHref();
MethodType meth = ref.getMethod() != null ? ref.getMethod() : MethodType.GET_LITERAL;
//handle get vs post
if ( meth == MethodType.POST_LITERAL ) {
//post, handle the body
}
else {
//get, parse kvp
}
}
else {
//actual data, figure out which type
DataType data = input.getData();
if ( data.getLiteralData() != null ) {
LiteralDataType literal = data.getLiteralData();
decoded = ((LiteralPPIO)ppio).decode( literal.getValue() );
}
else if ( data.getComplexData() != null ) {
ComplexDataType complex = data.getComplexData();
decoded = complex.getData().get( 0 );
try {
decoded = ((ComplexPPIO)ppio).decode( decoded );
}
catch (Exception e) {
throw new WPSException( "Unable to decode input: " + input.getIdentifier().getValue() );
}
}
}
//decode the input
inputs.put( p.key, decoded );
}
//execute the process
Map<String,Object> result = null;
Throwable error = null;
try {
Process p = pf.create(processName);
result = p.execute( inputs, null );
}
catch( Throwable t ) {
//save the error to report back
error = t;
}
//build the response
Wps10Factory f = Wps10Factory.eINSTANCE;
ExecuteResponseType response = f.createExecuteResponseType();
response.setLang("en");
response.setServiceInstance(ResponseUtils.appendQueryString(ResponseUtils.buildURL(request.getBaseUrl(), "ows", null, URLType.SERVICE), ""));
//process
final ProcessBriefType process = f.createProcessBriefType();
response.setProcess( process );
process.setIdentifier(ct);
process.setProcessVersion(pf.getVersion(processName));
process.setTitle( Ows11Util.languageString( pf.getTitle(processName).toString() ) );
process.setAbstract( Ows11Util.languageString( pf.getDescription(processName).toString() ) );
//status
response.setStatus( f.createStatusType() );
response.getStatus().setCreationTime( Converters.convert( started, XMLGregorianCalendar.class ));
if ( error != null ) {
ProcessFailedType failure = f.createProcessFailedType();
response.getStatus().setProcessFailed( failure );
failure.setExceptionReport( Ows11Util.exceptionReport( new ServiceException( error ), wps.getGeoServer().getGlobal().isVerboseExceptions()) );
}
else {
response.getStatus().setProcessSucceeded( "Process succeeded.");
}
//inputs
response.setDataInputs( f.createDataInputsType1() );
for ( Iterator i = request.getDataInputs().getInput().iterator(); i.hasNext(); ) {
InputType input = (InputType) i.next();
response.getDataInputs().getInput().add( EMFUtils.clone( input, f, true ) );
}
//output definitions
OutputDefinitionsType outputs = f.createOutputDefinitionsType();