--- a/labs/openlayers/lib/OpenLayers/Format/WMSCapabilities/v1_3.js +++ b/labs/openlayers/lib/OpenLayers/Format/WMSCapabilities/v1_3.js @@ -1,1 +1,129 @@ +/* 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/Format/WMSCapabilities/v1.js + */ + +/** + * Class: OpenLayers.Format.WMSCapabilities/v1_3 + * Abstract base class for WMS Capabilities version 1.3.X. + * SLD 1.1.0 adds in the extra operations DescribeLayer and GetLegendGraphic, + * see: http://schemas.opengis.net/sld/1.1.0/sld_capabilities.xsd + * + * Inherits from: + * - + */ +OpenLayers.Format.WMSCapabilities.v1_3 = OpenLayers.Class( + OpenLayers.Format.WMSCapabilities.v1, { + + /** + * Property: readers + * Contains public functions, grouped by namespace prefix, that will + * be applied when a namespaced node is found matching the function + * name. The function will be applied in the scope of this parser + * with two arguments: the node being read and a context object passed + * from the parent. + */ + readers: { + "wms": OpenLayers.Util.applyDefaults({ + "WMS_Capabilities": function(node, obj) { + this.readChildNodes(node, obj); + }, + "LayerLimit": function(node, obj) { + obj.layerLimit = parseInt(this.getChildValue(node)); + }, + "MaxWidth": function(node, obj) { + obj.maxWidth = parseInt(this.getChildValue(node)); + }, + "MaxHeight": function(node, obj) { + obj.maxHeight = parseInt(this.getChildValue(node)); + }, + "BoundingBox": function(node, obj) { + var bbox = OpenLayers.Format.WMSCapabilities.v1.prototype.readers["wms"].BoundingBox.apply(this, [node, obj]); + bbox.srs = node.getAttribute("CRS"); + obj.bbox[bbox.srs] = bbox; + }, + "CRS": function(node, obj) { + // CRS is the synonym of SRS + this.readers.wms.SRS.apply(this, [node, obj]); + }, + "EX_GeographicBoundingBox": function(node, obj) { + // replacement of LatLonBoundingBox + obj.llbbox = []; + this.readChildNodes(node, obj.llbbox); + + }, + "westBoundLongitude": function(node, obj) { + obj[0] = this.getChildValue(node); + }, + "eastBoundLongitude": function(node, obj) { + obj[2] = this.getChildValue(node); + }, + "southBoundLatitude": function(node, obj) { + obj[1] = this.getChildValue(node); + }, + "northBoundLatitude": function(node, obj) { + obj[3] = this.getChildValue(node); + }, + "MinScaleDenominator": function(node, obj) { + obj.maxScale = parseFloat(this.getChildValue(node)).toPrecision(16); + }, + "MaxScaleDenominator": function(node, obj) { + obj.minScale = parseFloat(this.getChildValue(node)).toPrecision(16); + }, + "Dimension": function(node, obj) { + // dimension has extra attributes: default, multipleValues, + // nearestValue, current which used to be part of Extent. It now + // also contains the values. + var name = node.getAttribute("name").toLowerCase(); + var dim = { + name: name, + units: node.getAttribute("units"), + unitsymbol: node.getAttribute("unitSymbol"), + nearestVal: node.getAttribute("nearestValue") === "1", + multipleVal: node.getAttribute("multipleValues") === "1", + "default": node.getAttribute("default") || "", + current: node.getAttribute("current") === "1", + values: this.getChildValue(node).split(",") + + }; + // Theoretically there can be more dimensions with the same + // name, but with a different unit. Until we meet such a case, + // let's just keep the same structure as the WMS 1.1 + // GetCapabilities parser uses. We will store the last + // one encountered. + obj.dimensions[dim.name] = dim; + }, + "Keyword": function(node, obj) { + // TODO: should we change the structure of keyword in v1.js? + // Make it an object with a value instead of a string? + var keyword = {value: this.getChildValue(node), + vocabulary: node.getAttribute("vocabulary")}; + if (obj.keywords) { + obj.keywords.push(keyword); + } + } + }, OpenLayers.Format.WMSCapabilities.v1.prototype.readers["wms"]), + "sld": { + "UserDefinedSymbolization": function(node, obj) { + this.readers.wms.UserDefinedSymbolization.apply(this, [node, obj]); + // add the two extra attributes + obj.userSymbols.inlineFeature = parseInt(node.getAttribute("InlineFeature")) == 1; + obj.userSymbols.remoteWCS = parseInt(node.getAttribute("RemoteWCS")) == 1; + }, + "DescribeLayer": function(node, obj) { + this.readers.wms.DescribeLayer.apply(this, [node, obj]); + }, + "GetLegendGraphic": function(node, obj) { + this.readers.wms.GetLegendGraphic.apply(this, [node, obj]); + } + } + }, + + CLASS_NAME: "OpenLayers.Format.WMSCapabilities.v1_3" + +}); +