add support for wfs:Native, r=tschaub (closes #3349)

git-svn-id: http://svn.openlayers.org/trunk/openlayers@12123 dc9f47b5-9b13-0410-9fdd-eb0c1a62fdaf
This commit is contained in:
bartvde
2011-06-22 07:14:15 +00:00
parent 1951eb3815
commit 39d9715853
3 changed files with 59 additions and 4 deletions
+27 -4
View File
@@ -173,12 +173,16 @@ OpenLayers.Format.WFST.v1 = OpenLayers.Class(OpenLayers.Format.XML, {
* *
* Parameters: * Parameters:
* features - {Array(<OpenLayers.Feature.Vector>)} A list of features. * features - {Array(<OpenLayers.Feature.Vector>)} A list of features.
* options - {Object}
* *
* Returns: * Returns:
* {String} A serialized WFS transaction. * {String} A serialized WFS transaction.
*/ */
write: function(features) { write: function(features, options) {
var node = this.writeNode("wfs:Transaction", features); var node = this.writeNode("wfs:Transaction", {
features:features,
options: options
});
var value = this.schemaLocationAttr(); var value = this.schemaLocationAttr();
if(value) { if(value) {
this.setAttributeNS( this.setAttributeNS(
@@ -216,16 +220,19 @@ OpenLayers.Format.WFST.v1 = OpenLayers.Class(OpenLayers.Format.XML, {
} }
return node; return node;
}, },
"Transaction": function(features) { "Transaction": function(obj) {
var node = this.createElementNSPlus("wfs:Transaction", { var node = this.createElementNSPlus("wfs:Transaction", {
attributes: { attributes: {
service: "WFS", service: "WFS",
version: this.version version: this.version
} }
}); });
var i, len;
var features = obj && obj.features;
var options = obj && obj.options;
if(features) { if(features) {
var name, feature; var name, feature;
for(var i=0, len=features.length; i<len; ++i) { for(i=0, len=features.length; i<len; ++i) {
feature = features[i]; feature = features[i];
name = this.stateName[feature.state]; name = this.stateName[feature.state];
if(name) { if(name) {
@@ -233,6 +240,22 @@ OpenLayers.Format.WFST.v1 = OpenLayers.Class(OpenLayers.Format.XML, {
} }
} }
} }
if (options && options.nativeElements) {
for (i=0, len=options.nativeElements.length; i<len; ++i) {
this.writeNode("wfs:Native",
options.nativeElements[i], node);
}
}
return node;
},
"Native": function(nativeElement) {
var node = this.createElementNSPlus("wfs:Native", {
attributes: {
vendorId: nativeElement.vendorId,
safeToIgnore: nativeElement.safeToIgnore
},
value: nativeElement.value
});
return node; return node;
}, },
"Insert": function(feature) { "Insert": function(feature) {
+8
View File
@@ -294,6 +294,14 @@ OpenLayers.Protocol.WFS.v1 = OpenLayers.Class(OpenLayers.Protocol, {
* *
* Parameters: * Parameters:
* features - {Array(<OpenLayers.Feature.Vector>)} * features - {Array(<OpenLayers.Feature.Vector>)}
* options - {Object}
*
* Valid options properties:
* nativeElements - {Array({Object})} Array of objects with information for writing
* out <Native> elements, these objects have vendorId, safeToIgnore and
* value properties. The <Native> element is intended to allow access to
* vendor specific capabilities of any particular web feature server or
* datastore.
* *
* Returns: * Returns:
* {<OpenLayers.Protocol.Response>} A response object with a features * {<OpenLayers.Protocol.Response>} A response object with a features
+24
View File
@@ -63,6 +63,30 @@
} }
} }
function test_writeNative(t) {
t.plan(1);
var format = new OpenLayers.Format.WFST({
featureNS: "http://www.openplans.org/topp",
featureType: "states",
version: "1.1.0",
featurePrefix: "topp",
geometryName: null
});
var output = format.write(null, {nativeElements: [
{
vendorId: "ORACLE",
safeToIgnore: true,
value: "ALTER SESSION ENABLE PARALLEL DML"
}, {
vendorId: "ORACLE",
safeToIgnore: false,
value: "Another native line goes here"
}]
});
var expected = '<wfs:Transaction xmlns:wfs="http://www.opengis.net/wfs" service="WFS" version="1.1.0" xsi:schemaLocation="http://www.opengis.net/wfs http://schemas.opengis.net/wfs/1.1.0/wfs.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><wfs:Native vendorId="ORACLE" safeToIgnore="true">ALTER SESSION ENABLE PARALLEL DML</wfs:Native><wfs:Native vendorId="ORACLE" safeToIgnore="false">Another native line goes here</wfs:Native></wfs:Transaction>';
t.xml_eq(output, expected, "Native elements written out correctly");
}
function test_write_no_geometry(t) { function test_write_no_geometry(t) {
var format = new OpenLayers.Format.WFST({ var format = new OpenLayers.Format.WFST({
featureNS: "http://www.openplans.org/topp", featureNS: "http://www.openplans.org/topp",