Add ol.format.filter.during

This commit is contained in:
Frederic Junod
2017-04-05 09:46:33 +02:00
parent 735ab45480
commit fcf9649ef9
4 changed files with 128 additions and 0 deletions

View File

@@ -2,6 +2,7 @@ goog.provide('ol.format.filter');
goog.require('ol.format.filter.And');
goog.require('ol.format.filter.Bbox');
goog.require('ol.format.filter.During');
goog.require('ol.format.filter.EqualTo');
goog.require('ol.format.filter.GreaterThan');
goog.require('ol.format.filter.GreaterThanOrEqualTo');
@@ -230,3 +231,17 @@ ol.format.filter.like = function(propertyName, pattern,
return new ol.format.filter.IsLike(propertyName, pattern,
opt_wildCard, opt_singleChar, opt_escapeChar, opt_matchCase);
};
/**
* Create a `<During>` temporal operator.
*
* @param {!string} propertyName Name of the context property to compare.
* @param {!string} begin The begin date in ISO-8601 format.
* @param {!string} end The end date in ISO-8601 format.
* @returns {!ol.format.filter.During} `<During>` operator.
* @api
*/
ol.format.filter.during = function(propertyName, begin, end) {
return new ol.format.filter.During(propertyName, begin, end);
};

View File

@@ -0,0 +1,33 @@
goog.provide('ol.format.filter.During');
goog.require('ol');
goog.require('ol.format.filter.Comparison');
/**
* @classdesc
* Represents a `<During>` comparison operator.
*
* @constructor
* @param {!string} propertyName Name of the context property to compare.
* @param {!string} begin The begin date in ISO-8601 format.
* @param {!string} end The end date in ISO-8601 format.
* @extends {ol.format.filter.Comparison}
* @api
*/
ol.format.filter.During = function(propertyName, begin, end) {
ol.format.filter.Comparison.call(this, 'During', propertyName);
/**
* @public
* @type {!string}
*/
this.begin = begin;
/**
* @public
* @type {!string}
*/
this.end = end;
};
ol.inherits(ol.format.filter.During, ol.format.filter.Comparison);

View File

@@ -90,6 +90,13 @@ ol.format.WFS.OGCNS = 'http://www.opengis.net/ogc';
ol.format.WFS.WFSNS = 'http://www.opengis.net/wfs';
/**
* @const
* @type {string}
*/
ol.format.WFS.FESNS = 'http://www.opengis.net/fes';
/**
* @const
* @type {Object.<string, string>}
@@ -646,6 +653,32 @@ ol.format.WFS.writeWithinFilter_ = function(node, filter, objectStack) {
};
/**
* @param {Node} node Node.
* @param {ol.format.filter.During} filter Filter.
* @param {Array.<*>} objectStack Node stack.
* @private
*/
ol.format.WFS.writeDuringFilter_ = function(node, filter, objectStack) {
var valueReference = ol.xml.createElementNS(ol.format.WFS.FESNS, 'ValueReference');
ol.format.XSD.writeStringTextNode(valueReference, filter.propertyName);
node.appendChild(valueReference);
var timePeriod = ol.xml.createElementNS(ol.format.GMLBase.GMLNS, 'TimePeriod');
node.appendChild(timePeriod);
var begin = ol.xml.createElementNS(ol.format.GMLBase.GMLNS, 'begin');
timePeriod.appendChild(begin);
ol.format.WFS.writeTimeInstant_(begin, filter.begin);
var end = ol.xml.createElementNS(ol.format.GMLBase.GMLNS, 'end');
timePeriod.appendChild(end);
ol.format.WFS.writeTimeInstant_(end, filter.end);
};
/**
* @param {Node} node Node.
* @param {ol.format.filter.LogicalNary} filter Filter.
@@ -777,6 +810,21 @@ ol.format.WFS.writeOgcLiteral_ = function(node, value) {
};
/**
* @param {Node} node Node.
* @param {string} time PropertyName value.
* @private
*/
ol.format.WFS.writeTimeInstant_ = function(node, time) {
var timeInstant = ol.xml.createElementNS(ol.format.GMLBase.GMLNS, 'TimeInstant');
node.appendChild(timeInstant);
var timePosition = ol.xml.createElementNS(ol.format.GMLBase.GMLNS, 'timePosition');
timeInstant.appendChild(timePosition);
ol.format.XSD.writeStringTextNode(timePosition, time);
};
/**
* @type {Object.<string, Object.<string, ol.XmlSerializer>>}
* @private
@@ -786,6 +834,7 @@ ol.format.WFS.GETFEATURE_SERIALIZERS_ = {
'Query': ol.xml.makeChildAppender(ol.format.WFS.writeQuery_)
},
'http://www.opengis.net/ogc': {
'During': ol.xml.makeChildAppender(ol.format.WFS.writeDuringFilter_),
'And': ol.xml.makeChildAppender(ol.format.WFS.writeLogicalFilter_),
'Or': ol.xml.makeChildAppender(ol.format.WFS.writeLogicalFilter_),
'Not': ol.xml.makeChildAppender(ol.format.WFS.writeNotFilter_),

View File

@@ -587,6 +587,37 @@ describe('ol.format.WFS', function() {
expect(serialized.firstElementChild).to.xmleql(ol.xml.parse(text));
});
it('creates During property filter', function() {
var text =
'<wfs:Query xmlns:wfs="http://www.opengis.net/wfs" ' +
' typeName="states" srsName="EPSG:4326">' +
' <ogc:Filter xmlns:ogc="http://www.opengis.net/ogc">' +
' <ogc:During>' +
' <fes:ValueReference xmlns:fes="http://www.opengis.net/fes">date_prop</fes:ValueReference>' +
' <gml:TimePeriod xmlns:gml="http://www.opengis.net/gml">' +
' <gml:begin>' +
' <gml:TimeInstant>' +
' <gml:timePosition>2010-01-20T00:00:00Z</gml:timePosition>' +
' </gml:TimeInstant>' +
' </gml:begin>' +
' <gml:end>' +
' <gml:TimeInstant>' +
' <gml:timePosition>2012-12-31T00:00:00Z</gml:timePosition>' +
' </gml:TimeInstant>' +
' </gml:end>' +
' </gml:TimePeriod>' +
' </ogc:During>' +
' </ogc:Filter>' +
'</wfs:Query>';
var serialized = new ol.format.WFS().writeGetFeature({
srsName: 'EPSG:4326',
featureTypes: ['states'],
filter: ol.format.filter.during('date_prop', '2010-01-20T00:00:00Z', '2012-12-31T00:00:00Z')
});
expect(serialized.firstElementChild).to.xmleql(ol.xml.parse(text));
});
});
describe('when writing out a Transaction request', function() {