/* Copyright (c) 2006-2010 by OpenLayers Contributors (see authors.txt for * full list of contributors). Published under the Clear BSD license. * See http://svn.openlayers.org/trunk/openlayers/license.txt for the * full text of the license. */ /** * @requires OpenLayers/Protocol/SOS.js * @requires OpenLayers/Format/SOSGetFeatureOfInterest.js */ /** * Class: OpenLayers.Protocol.SOS.v1_0_0 * An SOS v1.0.0 Protocol for vector layers. Create a new instance with the * constructor. * * Inherits from: * - */ OpenLayers.Protocol.SOS.v1_0_0 = OpenLayers.Class(OpenLayers.Protocol, { /** * APIProperty: fois * {Array(String)} Array of features of interest (foi) */ fois: null, /** * Property: formatOptions * {Object} Optional options for the format. If a format is not provided, * this property can be used to extend the default format options. */ formatOptions: null, /** * Constructor: OpenLayers.Protocol.SOS * A class for giving layers an SOS protocol. * * Parameters: * options - {Object} Optional object whose properties will be set on the * instance. * Valid options properties: * url - {String} URL to send requests to (required). * fois - {Array} The features of interest (required). */ initialize: function(options) { OpenLayers.Protocol.prototype.initialize.apply(this, [options]); if(!options.format) { this.format = new OpenLayers.Format.SOSGetFeatureOfInterest( this.formatOptions); } }, /** * APIMethod: destroy * Clean up the protocol. */ destroy: function() { if(this.options && !this.options.format) { this.format.destroy(); } this.format = null; OpenLayers.Protocol.prototype.destroy.apply(this); }, /** * APIMethod: read * Construct a request for reading new sensor positions. This is done by * issuing one GetFeatureOfInterest request. */ read: function(options) { options = OpenLayers.Util.extend({}, options); OpenLayers.Util.applyDefaults(options, this.options || {}); var response = new OpenLayers.Protocol.Response({requestType: "read"}); var format = this.format; var data = OpenLayers.Format.XML.prototype.write.apply(format, [format.writeNode("sos:GetFeatureOfInterest", {fois: this.fois})] ); response.priv = OpenLayers.Request.POST({ url: options.url, callback: this.createCallback(this.handleRead, response, options), data: data }); return response; }, /** * Method: handleRead * Deal with response from the read request. * * Parameters: * response - {} The response object to pass * to the user callback. * options - {Object} The user options passed to the read call. */ handleRead: function(response, options) { if(options.callback) { var request = response.priv; if(request.status >= 200 && request.status < 300) { // success response.features = this.parseFeatures(request); response.code = OpenLayers.Protocol.Response.SUCCESS; } else { // failure response.code = OpenLayers.Protocol.Response.FAILURE; } options.callback.call(options.scope, response); } }, /** * Method: parseFeatures * Read HTTP response body and return features * * Parameters: * request - {XMLHttpRequest} The request object * * Returns: * {Array({})} Array of features */ parseFeatures: function(request) { var doc = request.responseXML; if(!doc || !doc.documentElement) { doc = request.responseText; } if(!doc || doc.length <= 0) { return null; } return this.format.read(doc); }, CLASS_NAME: "OpenLayers.Protocol.SOS.v1_0_0" });