From a77632a88cd6a49ef77a2579d7f7dab96d5bbdcb Mon Sep 17 00:00:00 2001 From: Bart van den Eijnden Date: Wed, 23 Oct 2013 14:54:21 +0200 Subject: [PATCH] write out GetFeature in WFS 1.1 --- src/ol/parser/ogc/wfsparser_v1.js | 2 +- src/ol/parser/ogc/wfsparser_v1_0_0.js | 7 ++++ src/ol/parser/ogc/wfsparser_v1_1_0.js | 38 +++++++++++-------- test/spec/ol/parser/ogc/wfs_v1_1_0.test.js | 21 ++++++++++ .../parser/ogc/xml/wfs_v1_1_0/getfeature0.xml | 11 ++++++ 5 files changed, 62 insertions(+), 17 deletions(-) create mode 100644 test/spec/ol/parser/ogc/xml/wfs_v1_1_0/getfeature0.xml diff --git a/src/ol/parser/ogc/wfsparser_v1.js b/src/ol/parser/ogc/wfsparser_v1.js index 73b12f4ff3..d4ea23f0d1 100644 --- a/src/ol/parser/ogc/wfsparser_v1.js +++ b/src/ol/parser/ogc/wfsparser_v1.js @@ -42,7 +42,7 @@ ol.parser.ogc.WFS_v1 = function() { this.setAttributeNS( node, 'http://www.w3.org/2001/XMLSchema-instance', 'xsi:schemaLocation', this.schemaLocation); - return node; + return {node: node, options: options}; } }; goog.base(this); diff --git a/src/ol/parser/ogc/wfsparser_v1_0_0.js b/src/ol/parser/ogc/wfsparser_v1_0_0.js index 1fc20a5bb4..602817f5a4 100644 --- a/src/ol/parser/ogc/wfsparser_v1_0_0.js +++ b/src/ol/parser/ogc/wfsparser_v1_0_0.js @@ -1,6 +1,7 @@ goog.provide('ol.parser.ogc.WFS_v1_0_0'); goog.require('goog.array'); +goog.require('goog.functions'); goog.require('goog.object'); goog.require('ol.parser.ogc.Filter_v1_0_0'); goog.require('ol.parser.ogc.WFS_v1'); @@ -40,6 +41,12 @@ ol.parser.ogc.WFS_v1_0_0 = function() { } }); goog.object.extend(this.writers[this.defaultNamespaceURI], { + 'GetFeature': goog.functions.compose( + function(obj) { + return obj.node; + }, + this.writers['http://www.opengis.net/wfs']['GetFeature'] + ), 'Query': function(options) { var prefix = goog.isDef(options.featurePrefix) ? options.featurePrefix + ':' : ''; diff --git a/src/ol/parser/ogc/wfsparser_v1_1_0.js b/src/ol/parser/ogc/wfsparser_v1_1_0.js index 4889ccf1aa..b17488b1d7 100644 --- a/src/ol/parser/ogc/wfsparser_v1_1_0.js +++ b/src/ol/parser/ogc/wfsparser_v1_1_0.js @@ -1,7 +1,9 @@ goog.provide('ol.parser.ogc.WFS_v1_1_0'); +goog.require('goog.asserts'); goog.require('goog.functions'); goog.require('goog.object'); +goog.require('ol.expr.Identifier'); goog.require('ol.parser.ogc.Filter_v1_1_0'); goog.require('ol.parser.ogc.WFS_v1'); @@ -47,18 +49,23 @@ ol.parser.ogc.WFS_v1_1_0 = function() { } }); goog.object.extend(this.writers[this.defaultNamespaceURI], { - 'GetFeature': function(options) { - var node = this.writers['http://www.opengis.net/wfs']['GetFeature']. - apply(this, arguments); - if (goog.isDef(options)) { - node.setAttribute('resultType', options.resultType); - if (goog.isDef(options.startIndex)) { - node.setAttribute('startIndex', options.startIndex); - } - node.setAttribute('count', options.count); - } - return node; - }, + 'GetFeature': goog.functions.compose( + function(obj) { + var options = obj.options; + var node = obj.node; + if (goog.isDef(options)) { + node.setAttribute('resultType', options.resultType); + if (goog.isDef(options.startIndex)) { + node.setAttribute('startIndex', options.startIndex); + } + if (goog.isDef(options.count)) { + node.setAttribute('count', options.count); + } + } + return node; + }, + this.writers['http://www.opengis.net/wfs']['GetFeature'] + ), 'Query': function(options) { var prefix = goog.isDef(options.featurePrefix) ? options.featurePrefix + ':' : ''; @@ -70,9 +77,7 @@ ol.parser.ogc.WFS_v1_1_0 = function() { } if (goog.isDef(options.propertyNames)) { for (var i = 0, ii = options.propertyNames.length; i < ii; i++) { - this.writeNode('wfs:PropertyName', { - property: options.propertyNames[i] - }, null, node); + this.writeNode('PropertyName', options.propertyNames[i], null, node); } } if (goog.isDef(options.filter)) { @@ -82,8 +87,9 @@ ol.parser.ogc.WFS_v1_1_0 = function() { return node; }, 'PropertyName': function(obj) { + goog.asserts.assertInstanceof(obj, ol.expr.Identifier); var node = this.createElementNS('wfs:PropertyName'); - node.appendChild(this.createTextNode(obj.property)); + node.appendChild(this.createTextNode(obj.getName())); return node; } }); diff --git a/test/spec/ol/parser/ogc/wfs_v1_1_0.test.js b/test/spec/ol/parser/ogc/wfs_v1_1_0.test.js index 4ae4b1b672..c92d02eeea 100644 --- a/test/spec/ol/parser/ogc/wfs_v1_1_0.test.js +++ b/test/spec/ol/parser/ogc/wfs_v1_1_0.test.js @@ -68,6 +68,27 @@ describe('ol.parser.ogc.WFS_v1_1_0', function() { expect(goog.dom.xml.loadXml(p.serialize(output))).to.xmleql(xml); done(); }); + + }); + + it('handles writing GetFeature with PropertyName', function(done) { + var url = 'spec/ol/parser/ogc/xml/wfs_v1_1_0/getfeature0.xml'; + afterLoadXml(url, function(xml) { + var p = new ol.parser.ogc.WFS_v1_1_0(); + var output = p.writers[p.defaultNamespaceURI]['GetFeature'].apply( + p, [{ + resultType: 'hits', + srsName: 'urn:ogc:def:crs:EPSG::4326', + propertyNames: [new ol.expr.Identifier('STATE_NAME'), + new ol.expr.Identifier('STATE_FIPS'), + new ol.expr.Identifier('STATE_ABBR')], + featureNS: 'http://www.openplans.org/topp', + featurePrefix: 'topp', + featureTypes: ['states'] + }]); + expect(goog.dom.xml.loadXml(p.serialize(output))).to.xmleql(xml); + done(); + }); }); }); diff --git a/test/spec/ol/parser/ogc/xml/wfs_v1_1_0/getfeature0.xml b/test/spec/ol/parser/ogc/xml/wfs_v1_1_0/getfeature0.xml new file mode 100644 index 0000000000..7449d7d826 --- /dev/null +++ b/test/spec/ol/parser/ogc/xml/wfs_v1_1_0/getfeature0.xml @@ -0,0 +1,11 @@ + + + STATE_NAME + STATE_FIPS + STATE_ABBR + +