UNPKG

wps-js-52-north

Version:

Web Processing Service JavaScrict library

505 lines (433 loc) 14.8 kB
/* * the following variables define XML templates that will be instantiated * during request building! * * in child classes they should be overridden to reflect the correct * WPS version POST request */ var EXECUTE_REQUEST_XML_START = '<wps:Execute service="WPS" version="1.0.0" \ xmlns:wps="http://www.opengis.net/wps/1.0.0" \ xmlns:ows="http://www.opengis.net/ows/1.1" \ xmlns:xlink="http://www.w3.org/1999/xlink" \ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" \ xsi:schemaLocation="http://www.opengis.net/wps/1.0.0 \ http://schemas.opengis.net/wps/1.0.0/wpsExecute_request.xsd"> \ <ows:Identifier>${processIdentifier}</ows:Identifier>\ <wps:DataInputs>\ ${dataInputs}\ </wps:DataInputs>\ ${responseForm}\ </wps:Execute>'; var EXECUTE_REQUEST_XML_COMPLEX_DATA_ALL_INPUT = '<wps:Input>\ <ows:Identifier>${identifier}</ows:Identifier>\ <wps:Data>\ <wps:ComplexData schema="${schema}" mimeType="${mimeType}" encoding="${encoding}">\ ${complexPayload}\ </wps:ComplexData>\ </wps:Data>\ </wps:Input>'; var EXECUTE_REQUEST_XML_COMPLEX_DATA_MIME_TYPE_INPUT = '<wps:Input>\ <ows:Identifier>${identifier}</ows:Identifier>\ <wps:Data>\ <wps:ComplexData mimeType="${mimeType}">\ ${complexPayload}\ </wps:ComplexData>\ </wps:Data>\ </wps:Input>'; var EXECUTE_REQUEST_XML_COMPLEX_DATA_SCHEMA_INPUT = '<wps:Input>\ <ows:Identifier>${identifier}</ows:Identifier>\ <wps:Data>\ <wps:ComplexData schema="${schema}" mimeType="${mimeType}">\ ${complexPayload}\ </wps:ComplexData>\ </wps:Data>\ </wps:Input>'; var EXECUTE_REQUEST_XML_COMPLEX_DATA_ENCODING_INPUT = '<wps:Input>\ <ows:Identifier>${identifier}</ows:Identifier>\ <wps:Data>\ <wps:ComplexData mimeType="${mimeType}" encoding="${encoding}">\ ${complexPayload}\ </wps:ComplexData>\ </wps:Data>\ </wps:Input>'; var EXECUTE_REQUEST_XML_COMPLEX_DATA_BY_REFERENCE_ALL_INPUT = '<wps:Input>\ <ows:Identifier>${identifier}</ows:Identifier>\ <wps:Reference schema="${schema}" mimeType="${mimeType}" encoding="${encoding}"\ xlink:href="${complexPayload}"/>\ </wps:Input>'; var EXECUTE_REQUEST_XML_COMPLEX_DATA_BY_REFERENCE_SCHEMA_INPUT = '<wps:Input>\ <ows:Identifier>${identifier}</ows:Identifier>\ <wps:Reference schema="${schema}" mimeType="${mimeType}"\ xlink:href="${complexPayload}"/>\ </wps:Input>'; var EXECUTE_REQUEST_XML_COMPLEX_DATA_BY_REFERENCE_ENCODING_INPUT = '<wps:Input>\ <ows:Identifier>${identifier}</ows:Identifier>\ <wps:Reference encoding="${encoding}" mimeType="${mimeType}"\ xlink:href="${complexPayload}"/>\ </wps:Input>'; var EXECUTE_REQUEST_XML_COMPLEX_DATA_BY_REFERENCE_INPUT = '<wps:Input>\ <ows:Identifier>${identifier}</ows:Identifier>\ <wps:Reference mimeType="${mimeType}"\ xlink:href="${complexPayload}"/>\ </wps:Input>'; var EXECUTE_REQUEST_XML_LITERAL_DATA_INPUT_TYPE = '<wps:Input>\ <ows:Identifier>${identifier}</ows:Identifier>\ <wps:Data>\ <wps:LiteralData dataType="${dataType}">${value}</wps:LiteralData>\ </wps:Data>\ </wps:Input>'; var EXECUTE_REQUEST_XML_LITERAL_DATA_INPUT_ALL = '<wps:Input>\ <ows:Identifier>${identifier}</ows:Identifier>\ <wps:Data>\ <wps:LiteralData dataType="${dataType}" uom="${uom}">${value}</wps:LiteralData>\ </wps:Data>\ </wps:Input>'; var EXECUTE_REQUEST_XML_LITERAL_DATA_NO_TYPE_INPUT = '<wps:Input>\ <ows:Identifier>${identifier}</ows:Identifier>\ <wps:Data>\ <wps:LiteralData>${value}</wps:LiteralData>\ </wps:Data>\ </wps:Input>'; var EXECUTE_REQUEST_XML_BOUNDING_BOX_INPUT = '<wps:Input>\ <ows:Identifier>${identifier}</ows:Identifier>\ <wps:Data>\ <wps:BoundingBoxData ows:crs="${crs}" ows:dimensions="${dimension}">\ <ows:LowerCorner>${lowerCorner}</ows:LowerCorner>\ <ows:UpperCorner>${upperCorner}</ows:UpperCorner>\ </wps:BoundingBoxData>\ </wps:Data>\ </wps:Input>'; var EXECUTE_REQUEST_XML_RESPONSE_FORM_RAW_ALL = '<wps:ResponseForm>\ <wps:RawDataOutput mimeType="${mimeType}" schema="${schema}" encoding="${encoding}" \ uom="${uom}">\ <ows:Identifier>${identifier}</ows:Identifier>\ </wps:RawDataOutput>\ </wps:ResponseForm>'; var EXECUTE_REQUEST_XML_RESPONSE_FORM_RAW_TYPE_ENCODING_UOM = '<wps:ResponseForm>\ <wps:RawDataOutput mimeType="${mimeType}" encoding="${encoding}"\ uom="${uom}">\ <ows:Identifier>${identifier}</ows:Identifier>\ </wps:RawDataOutput>\ </wps:ResponseForm>'; var EXECUTE_REQUEST_XML_RESPONSE_FORM_RAW_TYPE_UOM = '<wps:ResponseForm>\ <wps:RawDataOutput mimeType="${mimeType}" \ uom="${uom}">\ <ows:Identifier>${identifier}</ows:Identifier>\ </wps:RawDataOutput>\ </wps:ResponseForm>'; var EXECUTE_REQUEST_XML_RESPONSE_FORM_RAW_TYPE = '<wps:ResponseForm>\ <wps:RawDataOutput mimeType="${mimeType}">\ <ows:Identifier>${identifier}</ows:Identifier>\ </wps:RawDataOutput>\ </wps:ResponseForm>'; var EXECUTE_REQUEST_XML_RESPONSE_FORM_DOCUMENT = '<wps:ResponseForm>\ <wps:ResponseDocument storeExecuteResponse="${storeExecuteResponse}" \ lineage="${lineage}" status="${status}">\ ${outputs}\ </wps:ResponseDocument>\ </wps:ResponseForm>'; var EXECUTE_REQUEST_XML_COMPLEX_ALL_OUTPUT = '<wps:Output \ asReference="${asReference}" schema="${schema}" mimeType="${mimeType}" encoding="${encoding}">\ <ows:Identifier>${identifier}</ows:Identifier>\ </wps:Output>'; var EXECUTE_REQUEST_XML_COMPLEX_OUTPUT = '<wps:Output \ asReference="${asReference}">\ <ows:Identifier>${identifier}</ows:Identifier>\ </wps:Output>'; var EXECUTE_REQUEST_XML_COMPLEX_MIME_TYPE_OUTPUT = '<wps:Output \ asReference="${asReference}" mimeType="${mimeType}">\ <ows:Identifier>${identifier}</ows:Identifier>\ </wps:Output>'; var EXECUTE_REQUEST_XML_COMPLEX_SCHEMA_OUTPUT = '<wps:Output \ asReference="${asReference}" schema="${schema}" mimeType="${mimeType}">\ <ows:Identifier>${identifier}</ows:Identifier>\ </wps:Output>'; var EXECUTE_REQUEST_XML_COMPLEX_ENCODING_OUTPUT = '<wps:Output \ asReference="${asReference}" mimeType="${mimeType}" encoding="${encoding}">\ <ows:Identifier>${identifier}</ows:Identifier>\ </wps:Output>'; var EXECUTE_REQUEST_XML_LITERAL_OUTPUT = '<wps:Output>\ <ows:Identifier>${identifier}</ows:Identifier>\ </wps:Output>'; var ExecuteRequest = PostRequest.extend({ addRequestTypeToSettings : function() { // set new requestType parameter to a fixed value from Constants.js this.settings.requestType = EXECUTE_TYPE; }, createPostPayload : function() { /* * used to reset all templates to reflect differences in different WPS version. */ this.overrideTemplates(); /* * used to analyze the given request parameters and, if needed, * add additional parameters to properly instantiate the templates. */ this.addVersionDependentProperties(); /** * instantiate templates */ return this.fillTemplates(); }, /** * will adjust the templates stored in aforementioned variables to reflect * the WPS version dependent execute request POST body */ overrideTemplates : function(){ /* * override in child methods */ }, /** * used to analyze the given request parameters and, if needed, * add additional parameters to properly instantiate the * templates. */ addVersionDependentProperties : function(){ /* * override in child methods */ /* * inspect missing values and instantiate with defaults */ if (!this.settings.executionMode) this.settings.executionMode = "async"; if (!this.settings.responseFormat) this.settings.responseFormat = "document"; }, /** * add certain parameters, if necessary, to the given object */ addVersionDependentPropertiesToFinalExecuteProperties : function(finalExecuteProperties){ /* * override in child classes */ return finalExecuteProperties; }, /** * instantiate all templates and concat them to create the POST body */ fillTemplates : function(){ var inputs = this.settings.inputs; var outputs = this.settings.outputs; var dataInputsMarkup = ""; if (inputs) { dataInputsMarkup = this.createDataInputsMarkup(inputs); } var responseFormMarkup = ""; if (outputs) { responseFormMarkup = this.createResponseFormMarkup(outputs, this.settings.outputStyle); } var finalExecuteProperties = { processIdentifier: this.settings.processIdentifier, dataInputs: dataInputsMarkup, responseForm: responseFormMarkup }; finalExecuteProperties = this.addVersionDependentPropertiesToFinalExecuteProperties(finalExecuteProperties); var result = this.fillTemplate(EXECUTE_REQUEST_XML_START, finalExecuteProperties); return result; }, createDataInputsMarkup : function(inputs) { var result = ""; for (var i = 0; i < inputs.length; i++) { var markup = ""; if (equalsString("literal", inputs[i].type)) { markup = this.createLiteralDataInput(inputs[i]); } else if (equalsString("complex", inputs[i].type)) { markup = this.createComplexDataInput(inputs[i]); } else if (equalsString("bbox", inputs[i].type)) { markup = this.createBoundingBoxDataInput(inputs[i]); } result += markup; } return result; }, /* * example 'input' objects: * * { * identifier: "theInputId", * value: "10.0", * dataType: "xs:double" * } * * { * identifier: "theInputId", * value: "myStringValue" * } * */ createLiteralDataInput : function(input) { var markup; if (input.dataType) { if(input.uom) markup = this.fillTemplate(EXECUTE_REQUEST_XML_LITERAL_DATA_INPUT_ALL, input); else markup = this.fillTemplate(EXECUTE_REQUEST_XML_LITERAL_DATA_INPUT_TYPE, input); } else { markup = this.fillTemplate(EXECUTE_REQUEST_XML_LITERAL_DATA_NO_TYPE_INPUT, input); } return markup; }, /* * example 'input' objects: * * { * identifier: "theProcessId", * schema: "http://schema.xsd.url", * complexPayload: "<heavy><xml><markup/></xml></heavy>" * } * * { * identifier: "theProcessId", * schema: "http://schema.xsd.url", * href: "http://the.online.resource", * method: "GET" * } * */ createComplexDataInput : function(input) { var markup; if (input.asReference) { if (input.schema && input.encoding) { markup = this.fillTemplate(EXECUTE_REQUEST_XML_COMPLEX_DATA_BY_REFERENCE_ALL_INPUT, input); } else if (input.schema && !input.encoding) { markup = this.fillTemplate(EXECUTE_REQUEST_XML_COMPLEX_DATA_BY_REFERENCE_SCHEMA_INPUT, input); } else if (!input.schema && input.encoding) { markup = this.fillTemplate(EXECUTE_REQUEST_XML_COMPLEX_DATA_BY_REFERENCE_ENCODING_INPUT, input); } else { markup = this.fillTemplate(EXECUTE_REQUEST_XML_COMPLEX_DATA_BY_REFERENCE_INPUT, input); } } else { if (input.schema && input.encoding) { markup = this.fillTemplate(EXECUTE_REQUEST_XML_COMPLEX_DATA_ALL_INPUT, input); } else if (input.schema && !input.encoding) { markup = this.fillTemplate(EXECUTE_REQUEST_XML_COMPLEX_DATA_SCHEMA_INPUT, input); } else if (!input.schema && input.encoding) { markup = this.fillTemplate(EXECUTE_REQUEST_XML_COMPLEX_DATA_ENCODING_INPUT, input); } else { markup = this.fillTemplate(EXECUTE_REQUEST_XML_COMPLEX_DATA_MIME_TYPE_INPUT, input); } } return markup; }, /* * example 'input' objects: * * { * identifier: "theInputId", * crs: "EPSG:4236", * dimension: 2, * lowerCorner: "-10.0 40.5", * upperCorner: "20.4 65.3", * } * * { * identifier: "theInputId", * value: "myStringValue" * } * */ createBoundingBoxDataInput : function(input) { /* * set some default values */ if (!input.crs) { input.crs = "EPSG:4326"; } if (!input.dimension) { input.dimension = 2; } var markup = this.fillTemplate(EXECUTE_REQUEST_XML_BOUNDING_BOX_INPUT, input); return markup; }, /* * example 'outputStyle' objects: * * { * storeExecuteResponse: true, * lineage: false, * status: true * } * * example 'outputs' objects: * * [ * { * identifier: "myComplexOutput1", * type: "complex", * asReference:false, * mimeType: "text/xml", * schema:"http://schemas.opengis.net/gml/3.1.1/base/gml.xsd", * encoding: "UTF-8" * }, * { * identifier: "myLiteralOutput1", * type: "literal" * } * ] * */ createResponseFormMarkup : function(outputs, outputStyle) { var outputString = ""; var result; if(this.settings.responseFormat == "raw" && outputs.length == 1){ /* * raw output requested, only one output allowed. So take the first one. */ var rawOutput = outputs[0]; if (rawOutput.encoding && rawOutput.schema && rawOutput.mimeType && rawOutput.uom){ result = this.fillTemplate(EXECUTE_REQUEST_XML_RESPONSE_FORM_RAW_ALL, rawOutput); } else if (rawOutput.encoding && rawOutput.mimeType && rawOutput.uom){ result = this.fillTemplate(EXECUTE_REQUEST_XML_RESPONSE_FORM_RAW_TYPE_ENCODING_UOM, rawOutput); } else if (rawOutput.mimeType && rawOutput.uom){ result = this.fillTemplate(EXECUTE_REQUEST_XML_RESPONSE_FORM_RAW_TYPE_UOM, rawOutput); } else { result = this.fillTemplate(EXECUTE_REQUEST_XML_RESPONSE_FORM_RAW_TYPE, rawOutput); } } else{ /* * response document with additional attributes and multiple outputs! */ for (var i = 0; i < outputs.length; i++) { if (equalsString("literal", outputs[i].type)) { outputString += this.fillTemplate(EXECUTE_REQUEST_XML_LITERAL_OUTPUT, outputs[i]); } else { if (outputs[i].encoding && outputs[i].schema && outputs[i].mimeType) { outputString += this.fillTemplate(EXECUTE_REQUEST_XML_COMPLEX_ALL_OUTPUT, outputs[i]); } else if (outputs[i].encoding && !outputs[i].schema && outputs[i].mimeType) { outputString += this.fillTemplate(EXECUTE_REQUEST_XML_COMPLEX_ENCODING_OUTPUT, outputs[i]); } else if (!outputs[i].encoding && outputs[i].schema && outputs[i].mimeType) { outputString += this.fillTemplate(EXECUTE_REQUEST_XML_COMPLEX_SCHEMA_OUTPUT, outputs[i]); } else if (outputs[i].mimeType){ outputString += this.fillTemplate(EXECUTE_REQUEST_XML_COMPLEX_MIME_TYPE_OUTPUT, outputs[i]); } else{ outputString += this.fillTemplate(EXECUTE_REQUEST_XML_COMPLEX_OUTPUT, outputs[i]); } } } outputStyle.outputs = outputString; result = this.fillTemplate(EXECUTE_REQUEST_XML_RESPONSE_FORM_DOCUMENT, outputStyle); } return result; } });