More trip planner testing with colors
[busui.git] / labs / openlayers / lib / OpenLayers / Protocol / SOS / v1_0_0.js
blob:a/labs/openlayers/lib/OpenLayers/Protocol/SOS/v1_0_0.js -> blob:b/labs/openlayers/lib/OpenLayers/Protocol/SOS/v1_0_0.js
  /* 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
  * <OpenLayers.Protocol.SOS.v1_0_0> constructor.
  *
  * Inherits from:
  * - <OpenLayers.Protocol>
  */
  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 - {<OpenLayers.Protocol.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({<OpenLayers.Feature.Vector>})} 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"
  });