/** * Copyright (c) 2006-2012 by OpenLayers Contributors (see authors.txt for * full list of contributors). Published under the 2-clause BSD license. * See license.txt in the OpenLayers distribution or repository for the * full text of the license. * * @requires OpenLayers/SingleFile.js */ /** * @requires OpenLayers/Events.js * @requires OpenLayers/Geometry.js * @requires OpenLayers/Feature/Vector.js */ /** * Class: OpenLayers.WPSProces */ OpenLayers.WPSProcess = OpenLayers.Class({ /** * APIProperty: events * {} * * Supported event types: * describeprocess - fires when the process description is available */ events: null, /** * Property: client * {} The client that manages this process. */ client: null, /** * Property: server * {String} Local client identifier for this process's server. */ server: null, /** * Property: identifier * {String} Process identifier known to the server. */ identifier: null, /** * Property: description * {Object} DescribeProcess response for this process. */ description: null, /** * Property: formats * {Object} OpenLayers.Format instances keyed by mimetype. */ formats: null, /** * Constructor: OpenLayers.WPSProcess * * Parameters: * options - {Object} Object whose properties will be set on the instance. * * Avaliable options: * client - {. */ describe: function() { var server = this.client.servers[this.server]; if (this.description !== null) { return; } else if (server.describeProcessResponse[this.identifier] === null) { // pending request return; } else if (this.identifier in server.describeProcessResponse) { // process description already cached on client this.parseDescription(); return; } // set to null so we know a describeFeature request is pending server.describeProcessResponse[this.identifier] = null; OpenLayers.Request.GET({ url: server.url, params: { SERVICE: 'WPS', VERSION: server.version, REQUEST: 'DescribeProcess', IDENTIFIER: this.identifier }, success: this.parseDescription, scope: this }); }, /** * APIMethod: execute * Executes the process * * Parameters: * options - {Object} * * Available options: * inputs - {Object} The inputs for the process, keyed by input identifier. * For spatial data inputs, the value of an input is usually an * , an or an array of * geometries or features. * success - {Function} Callback to call when the process is complete. * This function is called with an outputs object as argument, which * will have a 'result' property. For processes that generate spatial * output, this will either be a single or * an array of features. * scope - {Object} Optional scope for the success callback. */ execute: function(options) { if (!this.description) { this.events.register('describeprocess', this, function execute() { this.events.unregister('describeprocess', this, execute); this.execute(options); }); this.describe(); return; } var description = this.description, inputs = options.inputs, input, i, ii; for (i=0, ii=description.dataInputs.length; i, an or an array of * geometries or features. */ setInputData: function(input, data) { // clear any previous data input.data = {}; if (data) { var complexData = input.complexData; if (complexData) { var format = this.findMimeType(complexData); input.data.complexData = { mimeType: format, value: this.formats[format].write(this.toFeatures(data)) }; } } }, /** * Method: setResponseForm * Sets the responseForm property of the payload. */ setResponseForm: function() { output = this.description.processOutputs[0]; this.description.responseForm = { rawDataOutput: { identifier: output.identifier, mimeType: this.findMimeType(output.complexOutput) } }; }, /** * Method: toFeatures * Converts spatial input into features so it can be processed by * instances. * * Parameters: * source - {Mixed} An , an * , or an array of geometries or features * * Returns: * {Array()} */ toFeatures: function(source) { var isArray = OpenLayers.Util.isArray(source); if (!isArray) { source = [source]; } var target = new Array(source.length), current; for (var i=0, ii=source.length; i