fix for WFS-T delete and update have improper typeName. Includes tests.

Vague +1 from tschaub. WFS format now matches the more modern WFS-T v1 format
as confirmed by cargo culting the WFS-T tests. (Closes #1787, #1471) 


git-svn-id: http://svn.openlayers.org/trunk/openlayers@8978 dc9f47b5-9b13-0410-9fdd-eb0c1a62fdaf
This commit is contained in:
crschmidt
2009-03-10 04:04:59 +00:00
parent 676475d902
commit 861ef81552
3 changed files with 86 additions and 2 deletions

View File

@@ -135,7 +135,8 @@ OpenLayers.Format.WFS = OpenLayers.Class(OpenLayers.Format.GML, {
update: function(feature) {
if (!feature.fid) { OpenLayers.Console.userError(OpenLayers.i18n("noFID")); }
var updateNode = this.createElementNS(this.wfsns, 'wfs:Update');
updateNode.setAttribute("typeName", this.layerName);
updateNode.setAttribute("typeName", this.featurePrefix + ':' + this.featureName);
updateNode.setAttribute("xmlns:" + this.featurePrefix, this.featureNS);
var propertyNode = this.createElementNS(this.wfsns, 'wfs:Property');
var nameNode = this.createElementNS(this.wfsns, 'wfs:Name');
@@ -194,7 +195,8 @@ OpenLayers.Format.WFS = OpenLayers.Class(OpenLayers.Format.GML, {
return false;
}
var deleteNode = this.createElementNS(this.wfsns, 'wfs:Delete');
deleteNode.setAttribute("typeName", this.layerName);
deleteNode.setAttribute("typeName", this.featurePrefix + ':' + this.featureName);
deleteNode.setAttribute("xmlns:" + this.featurePrefix, this.featureNS);
var filterNode = this.createElementNS(this.ogcns, 'ogc:Filter');
var filterIdNode = this.createElementNS(this.ogcns, 'ogc:FeatureId');

81
tests/Format/WFS.html Normal file
View File

@@ -0,0 +1,81 @@
<html>
<head>
<script src="../../lib/OpenLayers.js"></script>
<script>
function test_wfs_update_node(t) {
t.plan(2);
var expected = readXML("Update");
var updateFeature = new OpenLayers.Feature.Vector(
new OpenLayers.Geometry.Point(1,2),
{foo: "bar"});
updateFeature.fid = "fid.42";
updateFeature.state = OpenLayers.State.UPDATE;
var format = new OpenLayers.Format.WFS({
'featureNS':'http://www.openplans.org/topp',
'featureName': 'states',
'geometryName': 'the_geom',
'featurePrefix': 'topp'
}, {options:{}});
var updateNode = format.update(updateFeature);
t.xml_eq(updateNode, expected, "update node matches expected XML value.");
var format = new OpenLayers.Format.WFS({
'featurePrefix': 'topp'
}, {options:{typename: 'states', 'featureNS': 'http://www.openplans.org/topp', 'geometry_column': 'the_geom' }});
var updateNode = format.update(updateFeature);
t.xml_eq(updateNode, expected, "update node matches expected XML value.");
}
function test_wfs_delete_node(t) {
t.plan(2);
var expected = readXML("Delete");
var feature = new OpenLayers.Feature.Vector(new OpenLayers.Geometry.Point(0,0));
feature.state = OpenLayers.State.DELETE;
feature.fid = "fid.37";
var format = new OpenLayers.Format.WFS({
'featureNS':'http://www.openplans.org/topp',
'featureName': 'states',
'featurePrefix': 'topp'
}, {options:{}});
var deleteNode = format.remove(feature);
t.xml_eq(deleteNode, expected, "delete node matches expected XML value.");
var format = new OpenLayers.Format.WFS({
'featurePrefix': 'topp'
}, {options:{typename: 'states', 'featureNS': 'http://www.openplans.org/topp'}});
var deleteNode = format.remove(feature);
t.xml_eq(deleteNode, expected, "delete node matches expected XML value.");
}
function readXML(id) {
var xml = document.getElementById(id).firstChild.nodeValue;
return new OpenLayers.Format.XML().read(xml).documentElement;
}
</script>
</head>
<body>
<div id="Update"><!--
<wfs:Update xmlns:wfs="http://www.opengis.net/wfs" typeName="topp:states" xmlns:topp="http://www.openplans.org/topp">
<wfs:Property>
<wfs:Name>the_geom</wfs:Name>
<wfs:Value>
<gml:Point xmlns:gml="http://www.opengis.net/gml">
<gml:coordinates decimal="." cs="," ts=" ">1,2</gml:coordinates>
</gml:Point>
</wfs:Value>
</wfs:Property>
<wfs:Property>
<wfs:Name>foo</wfs:Name>
<wfs:Value>bar</wfs:Value>
</wfs:Property>
<ogc:Filter xmlns:ogc="http://www.opengis.net/ogc">
<ogc:FeatureId fid="fid.42"/>
</ogc:Filter>
</wfs:Update>
--></div>
<div id="Delete"><!--
<wfs:Delete xmlns:wfs="http://www.opengis.net/wfs" typeName="topp:states" xmlns:topp="http://www.openplans.org/topp">
<ogc:Filter xmlns:ogc="http://www.opengis.net/ogc">
<ogc:FeatureId fid="fid.37"/>
</ogc:Filter>
</wfs:Delete>
--></div>
</body>
</html>

View File

@@ -57,6 +57,7 @@
<li>Format/Filter/v1_0_0.html</li>
<li>Format/Filter/v1_1_0.html</li>
<li>Format/WFSDescribeFeatureType.html</li>
<li>Format/WFS.html</li>
<li>Format/WFST.html</li>
<li>Format/WFST/v1.html</li>
<li>Format/WFST/v1_0_0.html</li>