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
This commit is contained in:
@@ -34,6 +34,14 @@ OpenLayers.Format.SLD = OpenLayers.Class(OpenLayers.Format.XML, {
|
|||||||
*/
|
*/
|
||||||
version: null,
|
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
|
* Property: parser
|
||||||
* {Object} Instance of the versioned parser. Cached for multiple read and
|
* {Object} Instance of the versioned parser. Cached for multiple read and
|
||||||
@@ -87,11 +95,12 @@ OpenLayers.Format.SLD = OpenLayers.Class(OpenLayers.Format.XML, {
|
|||||||
*
|
*
|
||||||
* Parameters:
|
* Parameters:
|
||||||
* data - {String | DOMElement} Data to read.
|
* data - {String | DOMElement} Data to read.
|
||||||
|
* options - {Object} Options for the reader.
|
||||||
*
|
*
|
||||||
* Returns:
|
* Returns:
|
||||||
* {Object} An object representing the SLD.
|
* {Object} An object representing the SLD.
|
||||||
*/
|
*/
|
||||||
read: function(data) {
|
read: function(data, options) {
|
||||||
if(typeof data == "string") {
|
if(typeof data == "string") {
|
||||||
data = OpenLayers.Format.XML.prototype.read.apply(this, [data]);
|
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);
|
this.parser = new format(this.options);
|
||||||
}
|
}
|
||||||
var sld = this.parser.read(data);
|
var sld = this.parser.read(data, options);
|
||||||
return sld;
|
return sld;
|
||||||
},
|
},
|
||||||
|
|
||||||
|
|||||||
@@ -73,13 +73,20 @@ OpenLayers.Format.SLD.v1 = OpenLayers.Class(OpenLayers.Format.Filter.v1_0_0, {
|
|||||||
*
|
*
|
||||||
* Parameters:
|
* Parameters:
|
||||||
* data - {DOMElement} An SLD document element.
|
* 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:
|
* Returns:
|
||||||
* {Object} An object representing the SLD.
|
* {Object} An object representing the SLD.
|
||||||
*/
|
*/
|
||||||
read: function(data) {
|
read: function(data, options) {
|
||||||
|
options = OpenLayers.Util.applyDefaults(options, this.options);
|
||||||
var sld = {
|
var sld = {
|
||||||
namedLayers: {}
|
namedLayers: options.namedLayersAsArray === true ? [] : {}
|
||||||
};
|
};
|
||||||
this.readChildNodes(data, sld);
|
this.readChildNodes(data, sld);
|
||||||
return 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<len; ++i) {
|
for(var i=0, len=layer.userStyles.length; i<len; ++i) {
|
||||||
layer.userStyles[i].layerName = layer.name;
|
layer.userStyles[i].layerName = layer.name;
|
||||||
}
|
}
|
||||||
sld.namedLayers[layer.name] = layer;
|
if(sld.namedLayers instanceof Array) {
|
||||||
|
sld.namedLayers.push(layer);
|
||||||
|
} else {
|
||||||
|
sld.namedLayers[layer.name] = layer;
|
||||||
|
}
|
||||||
},
|
},
|
||||||
"NamedStyle": function(node, layer) {
|
"NamedStyle": function(node, layer) {
|
||||||
layer.namedStyles.push(
|
layer.namedStyles.push(
|
||||||
@@ -435,8 +446,15 @@ OpenLayers.Format.SLD.v1 = OpenLayers.Class(OpenLayers.Format.Filter.v1_0_0, {
|
|||||||
this.writeNode("Abstract", sld.description, root);
|
this.writeNode("Abstract", sld.description, root);
|
||||||
}
|
}
|
||||||
// add in named layers
|
// add in named layers
|
||||||
for(var name in sld.namedLayers) {
|
// allow namedLayers to be an array
|
||||||
this.writeNode("NamedLayer", sld.namedLayers[name], root);
|
if(sld.namedLayers instanceof Array) {
|
||||||
|
for(var i=0, len=sld.namedLayers.length; i<len; ++i) {
|
||||||
|
this.writeNode("NamedLayer", sld.namedLayers[i], root);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
for(var name in sld.namedLayers) {
|
||||||
|
this.writeNode("NamedLayer", sld.namedLayers[name], root);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return root;
|
return root;
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -125,18 +125,32 @@
|
|||||||
'</StyledLayerDescriptor>';
|
'</StyledLayerDescriptor>';
|
||||||
|
|
||||||
function test_read(t) {
|
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 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
|
// test the named layer count
|
||||||
var count = 0;
|
var count = 0;
|
||||||
for(var key in obj.namedLayers) {
|
for(var key in obj.namedLayers) {
|
||||||
++count;
|
++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;
|
var layer, style, rule;
|
||||||
|
|
||||||
@@ -189,16 +203,21 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
function test_write(t) {
|
function test_write(t) {
|
||||||
t.plan(2);
|
t.plan(3);
|
||||||
|
|
||||||
// read first - testing that write produces the SLD aboce
|
// read first - testing that write produces the SLD aboce
|
||||||
var parser = new OpenLayers.Format.SLD.v1_0_0();
|
var parser = new OpenLayers.Format.SLD.v1_0_0();
|
||||||
var xml = new OpenLayers.Format.XML();
|
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);
|
var node = parser.write(obj);
|
||||||
t.xml_eq(node, sld, "SLD correctly written");
|
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
|
// test that 0 fill opacity gets written
|
||||||
var symbolizer = {
|
var symbolizer = {
|
||||||
fillColor: "red",
|
fillColor: "red",
|
||||||
|
|||||||
Reference in New Issue
Block a user