From 44ab482e898261c346c3a1e1ae02e5f0eca86295 Mon Sep 17 00:00:00 2001 From: ahocevar Date: Fri, 27 Mar 2009 08:39:15 +0000 Subject: [PATCH] addad namedLayersAsArray option to Format.SLD.v1. Patch by tschaub and me, r=tschaub,me (closes #2005) git-svn-id: http://svn.openlayers.org/trunk/openlayers@9140 dc9f47b5-9b13-0410-9fdd-eb0c1a62fdaf --- lib/OpenLayers/Format/SLD.js | 13 +++++++++++-- lib/OpenLayers/Format/SLD/v1.js | 28 +++++++++++++++++++++++----- tests/Format/SLD/v1_0_0.html | 31 +++++++++++++++++++++++++------ 3 files changed, 59 insertions(+), 13 deletions(-) diff --git a/lib/OpenLayers/Format/SLD.js b/lib/OpenLayers/Format/SLD.js index 5d5070612a..1e3120e00d 100644 --- a/lib/OpenLayers/Format/SLD.js +++ b/lib/OpenLayers/Format/SLD.js @@ -34,6 +34,14 @@ OpenLayers.Format.SLD = OpenLayers.Class(OpenLayers.Format.XML, { */ version: null, + /** + * APIProperty: namedLayersAsArray + * {Boolean} Generate a namedLayers array. If false, the namedLayers + * property value will be an object keyed by layer name. Default is + * false. + */ + namedLayersAsArray: false, + /** * Property: parser * {Object} Instance of the versioned parser. Cached for multiple read and @@ -87,11 +95,12 @@ OpenLayers.Format.SLD = OpenLayers.Class(OpenLayers.Format.XML, { * * Parameters: * data - {String | DOMElement} Data to read. + * options - {Object} Options for the reader. * * Returns: * {Object} An object representing the SLD. */ - read: function(data) { + read: function(data, options) { if(typeof data == "string") { data = OpenLayers.Format.XML.prototype.read.apply(this, [data]); } @@ -113,7 +122,7 @@ OpenLayers.Format.SLD = OpenLayers.Class(OpenLayers.Format.XML, { } this.parser = new format(this.options); } - var sld = this.parser.read(data); + var sld = this.parser.read(data, options); return sld; }, diff --git a/lib/OpenLayers/Format/SLD/v1.js b/lib/OpenLayers/Format/SLD/v1.js index 187bd9cc4a..34da8bc90e 100644 --- a/lib/OpenLayers/Format/SLD/v1.js +++ b/lib/OpenLayers/Format/SLD/v1.js @@ -73,13 +73,20 @@ OpenLayers.Format.SLD.v1 = OpenLayers.Class(OpenLayers.Format.Filter.v1_0_0, { * * Parameters: * data - {DOMElement} An SLD document element. + * options - {Object} Options for the reader. + * + * Valid options: + * namedLayersAsArray - {Boolean} Generate a namedLayers array. If false, + * the namedLayers property value will be an object keyed by layer name. + * Default is false. * * Returns: * {Object} An object representing the SLD. */ - read: function(data) { + read: function(data, options) { + options = OpenLayers.Util.applyDefaults(options, this.options); var sld = { - namedLayers: {} + namedLayers: options.namedLayersAsArray === true ? [] : {} }; this.readChildNodes(data, sld); return sld; @@ -118,7 +125,11 @@ OpenLayers.Format.SLD.v1 = OpenLayers.Class(OpenLayers.Format.Filter.v1_0_0, { for(var i=0, len=layer.userStyles.length; i'; function test_read(t) { - t.plan(18); + t.plan(21); - var parser = new OpenLayers.Format.SLD.v1_0_0(); var xml = new OpenLayers.Format.XML(); - var obj = parser.read(xml.read(sld)); + var sldxml = xml.read(sld); + // test that format options are considered in read + var parser = new OpenLayers.Format.SLD({ + version: "1.0.0", + namedLayersAsArray: true + }); + var obj = parser.read(sldxml); + t.ok(obj.namedLayers instanceof Array, "namedLayersAsArray option for read works"); + + parser = new OpenLayers.Format.SLD.v1_0_0(); + var obj = parser.read(sldxml, {namedLayersAsArray: true}); + t.ok(obj.namedLayers instanceof Array, "namedLayersAsArray option for read works"); + var arrayLen = obj.namedLayers.length; + + var obj = parser.read(sldxml); + t.eq(typeof obj.namedLayers, "object", "read returns a namedLayers object by default"); // test the named layer count var count = 0; for(var key in obj.namedLayers) { ++count; } - t.eq(count, 2, "correct number of named layers"); + t.eq(count, arrayLen, "number of named layers in array equals number of named layers in object"); var layer, style, rule; @@ -189,16 +203,21 @@ } function test_write(t) { - t.plan(2); + t.plan(3); // read first - testing that write produces the SLD aboce var parser = new OpenLayers.Format.SLD.v1_0_0(); var xml = new OpenLayers.Format.XML(); - var obj = parser.read(xml.read(sld)); + var sldxml = xml.read(sld); + var obj = parser.read(sldxml); var node = parser.write(obj); t.xml_eq(node, sld, "SLD correctly written"); + obj = parser.read(sldxml, {namedLayersAsArray: true}); + node = parser.write(obj); + t.xml_eq(node, sld, "SLD from namedLayers array correctly written"); + // test that 0 fill opacity gets written var symbolizer = { fillColor: "red",