Applying VersionedOGC pattern to WMSDescribeLayer format

The WMSDescribeLayer format currently differs from other formats that
inhreit from VersionedOGC by having an array instead of an object as return
type. This especially bad since the VersionedOGC superclass sets a version
property on the array. With this change, the WMSDescribeLayer format will
also be compatible with GeoServer's new JSON response type for
DescribeLayer - see
http://sourceforge.net/mailarchive/message.php?msg_id=29912776.

Another change included here is the removal of the WMSDescribeLayer
format's getVersion hack, which was replaced by a generic fallback to less
generic parsers, e.g. from a v1_1_1 parser to a v1_1 parser if v1_1_1 is
not implemented.
This commit is contained in:
ahocevar
2012-10-02 14:35:05 +02:00
parent 95839728a1
commit 84a8d8d1f6
6 changed files with 34 additions and 36 deletions

View File

@@ -45,10 +45,12 @@ OpenLayers.Format.WMSDescribeLayer.v1_1 = OpenLayers.Class(
* data - {String} or {DOMElement} data to read/parse.
*
* Returns:
* {Array} Array of {<LayerDescription>} objects which have:
* {Object} Object with a layerDescriptions property, which holds an Array
* of {<LayerDescription>} objects which have:
* - {String} owsType: WFS/WCS
* - {String} owsURL: the online resource
* - {String} typeName: the name of the typename on the service
* - {String} typeName: the name of the typename on the owsType service
* - {String} layerName: the name of the WMS layer we did a lookup for
*/
read: function(data) {
if(typeof data == "string") {
@@ -56,7 +58,7 @@ OpenLayers.Format.WMSDescribeLayer.v1_1 = OpenLayers.Class(
}
var root = data.documentElement;
var children = root.childNodes;
var describelayer = [];
var describelayer = {layerDescriptions: []};
var childNode, nodeName;
for(var i=0; i<children.length; ++i) {
childNode = children[i];
@@ -89,8 +91,16 @@ OpenLayers.Format.WMSDescribeLayer.v1_1 = OpenLayers.Class(
typeName = query[0].getAttribute('typename');
}
}
describelayer.push({layerName: layerName, owsType: owsType,
owsURL: owsURL, typeName: typeName});
var layerDescription = {
layerName: layerName, owsType: owsType,
owsURL: owsURL, typeName: typeName
};
describelayer.layerDescriptions.push(layerDescription);
// deprecated array style index for backwards compatibility
describelayer.length = describelayer.layerDescriptions.length;
describelayer[describelayer.length - 1] = layerDescription;
} else if (nodeName == 'ServiceException') {
// an exception must have occurred, so parse it
var parser = new OpenLayers.Format.OGCExceptionReport();