/** * Sets a reference to input data * * @param parameterID ID of the input element * @param value reference URL * @param schema schema if applicable otherwise null * @param encoding encoding if applicable (typically not), otherwise null * @param mimetype mimetype of the input according to the process description. has to be set */ public void addComplexDataReference( String parameterID, String value, String schema, String encoding, String mimetype) { InputDescriptionType inputDesc = getParameterDescription(parameterID); if (inputDesc == null) { throw new IllegalArgumentException("inputDesription is null for: " + parameterID); } if (inputDesc.getComplexData() == null) { throw new IllegalArgumentException( "inputDescription is not of type complexData: " + parameterID); } InputType input = execute.getExecute().getDataInputs().addNewInput(); input.addNewIdentifier().setStringValue(parameterID); input.addNewReference().setHref(value); if (schema != null) { input.getReference().setSchema(schema); } if (encoding != null) { input.getReference().setEncoding(encoding); } if (mimetype != null) { input.getReference().setMimeType(mimetype); } }
/** * @param id * @return the specified parameterdescription. if not available it returns null. */ private InputDescriptionType getParameterDescription(String id) { InputDescriptionType[] inputDescs = processDesc.getDataInputs().getInputArray(); for (InputDescriptionType inputDesc : inputDescs) { if (inputDesc.getIdentifier().getStringValue().equals(id)) { return inputDesc; } } return null; }
/** * Add literal data to the request * * @param parameterID the ID of the input paramter according to the describe process * @param value the value. other types than strings have to be converted to string. The datatype * is automatically determined and set accordingly to the process description */ public void addLiteralData(String parameterID, String value) { InputDescriptionType inputDesc = this.getParameterDescription(parameterID); if (inputDesc == null) { throw new IllegalArgumentException("inputDesription is null for: " + parameterID); } if (inputDesc.getLiteralData() == null) { throw new IllegalArgumentException( "inputDescription is not of type literalData: " + parameterID); } InputType input = execute.getExecute().getDataInputs().addNewInput(); input.addNewIdentifier().setStringValue(parameterID); input.addNewData().addNewLiteralData().setStringValue(value); DomainMetadataType dataType = inputDesc.getLiteralData().getDataType(); if (dataType != null) { input.getData().getLiteralData().setDataType(dataType.getReference()); } }
/** * add an input element. sets the data in the xml request * * @param parameterID the ID of the input (see process description) * @param value the actual value (for xml data xml for binary data is should be base64 encoded * data) * @param schema schema if applicable otherwise null * @param encoding encoding if not the default encoding (for default encoding set it to null) * (i.e. binary data, use base64) * @param mimeType mimetype of the data, has to be set * @throws WPSClientException */ public void addComplexData( String parameterID, IData value, String schema, String encoding, String mimeType) throws WPSClientException { GeneratorFactory fac = StaticDataHandlerRepository.getGeneratorFactory(); InputDescriptionType inputDesc = getParameterDescription(parameterID); if (inputDesc == null) { throw new IllegalArgumentException("inputDesription is null for: " + parameterID); } if (inputDesc.getComplexData() == null) { throw new IllegalArgumentException( "inputDescription is not of type ComplexData: " + parameterID); } LOGGER.debug( "Looking for matching Generator ..." + " schema: " + schema + " mimeType: " + mimeType + " encoding: " + encoding); IGenerator generator = fac.getGenerator(schema, mimeType, encoding, value.getClass()); if (generator == null) { // generator is still null throw new IllegalArgumentException( "Could not find an appropriate generator for parameter: " + parameterID); } InputStream stream = null; InputType input = execute.getExecute().getDataInputs().addNewInput(); input.addNewIdentifier().setStringValue(inputDesc.getIdentifier().getStringValue()); // encoding is UTF-8 (or nothing and we default to UTF-8) // everything that goes to this condition should be inline xml data try { if (encoding == null || encoding.equals("") || encoding.equalsIgnoreCase(IOHandler.DEFAULT_ENCODING)) { stream = generator.generateStream(value, mimeType, schema); } else if (encoding.equalsIgnoreCase("base64")) { stream = generator.generateBase64Stream(value, mimeType, schema); } else { throw new WPSClientException("Encoding not supported"); } ComplexDataType data = input.addNewData().addNewComplexData(); data.set(XmlObject.Factory.parse(stream)); if (schema != null) { data.setSchema(schema); } if (mimeType != null) { data.setMimeType(mimeType); } if (encoding != null) { data.setEncoding(encoding); } } catch (XmlException e) { throw new IllegalArgumentException("error inserting node into execute request", e); } catch (IOException e) { throw new IllegalArgumentException("error reading generator output", e); } }