Merge pull request #717 from walkermatt/master
Support for PropertyIsNull Filter
This commit is contained in:
@@ -26,7 +26,8 @@ OpenLayers.Filter.Comparison = OpenLayers.Class(OpenLayers.Filter, {
|
||||
* - OpenLayers.Filter.Comparison.LESS_THAN_OR_EQUAL_TO = "<=";
|
||||
* - OpenLayers.Filter.Comparison.GREATER_THAN_OR_EQUAL_TO = ">=";
|
||||
* - OpenLayers.Filter.Comparison.BETWEEN = "..";
|
||||
* - OpenLayers.Filter.Comparison.LIKE = "~";
|
||||
* - OpenLayers.Filter.Comparison.LIKE = "~";
|
||||
* - OpenLayers.Filter.Comparison.IS_NULL = "NULL";
|
||||
*/
|
||||
type: null,
|
||||
|
||||
@@ -154,6 +155,9 @@ OpenLayers.Filter.Comparison = OpenLayers.Class(OpenLayers.Filter, {
|
||||
var regexp = new RegExp(this.value, "gi");
|
||||
result = regexp.test(got);
|
||||
break;
|
||||
case OpenLayers.Filter.Comparison.IS_NULL:
|
||||
result = (got === null);
|
||||
break;
|
||||
}
|
||||
return result;
|
||||
},
|
||||
@@ -260,3 +264,4 @@ OpenLayers.Filter.Comparison.LESS_THAN_OR_EQUAL_TO = "<=";
|
||||
OpenLayers.Filter.Comparison.GREATER_THAN_OR_EQUAL_TO = ">=";
|
||||
OpenLayers.Filter.Comparison.BETWEEN = "..";
|
||||
OpenLayers.Filter.Comparison.LIKE = "~";
|
||||
OpenLayers.Filter.Comparison.IS_NULL = "NULL";
|
||||
|
||||
@@ -212,6 +212,13 @@ OpenLayers.Format.Filter.v1 = OpenLayers.Class(OpenLayers.Format.XML, {
|
||||
"Function": function(node, obj) {
|
||||
//TODO write decoder for it
|
||||
return;
|
||||
},
|
||||
"PropertyIsNull": function(node, obj) {
|
||||
var filter = new OpenLayers.Filter.Comparison({
|
||||
type: OpenLayers.Filter.Comparison.IS_NULL
|
||||
});
|
||||
this.readChildNodes(node, filter);
|
||||
obj.filters.push(filter);
|
||||
}
|
||||
}
|
||||
},
|
||||
@@ -448,6 +455,11 @@ OpenLayers.Format.Filter.v1 = OpenLayers.Class(OpenLayers.Format.XML, {
|
||||
this.writeOgcExpression(params[i], node);
|
||||
}
|
||||
return node;
|
||||
},
|
||||
"PropertyIsNull": function(filter) {
|
||||
var node = this.createElementNSPlus("ogc:PropertyIsNull");
|
||||
this.writeNode("PropertyName", filter, node);
|
||||
return node;
|
||||
}
|
||||
}
|
||||
},
|
||||
@@ -480,6 +492,7 @@ OpenLayers.Format.Filter.v1 = OpenLayers.Class(OpenLayers.Format.XML, {
|
||||
">=": "PropertyIsGreaterThanOrEqualTo",
|
||||
"..": "PropertyIsBetween",
|
||||
"~": "PropertyIsLike",
|
||||
"NULL": "PropertyIsNull",
|
||||
"BBOX": "BBOX",
|
||||
"DWITHIN": "DWITHIN",
|
||||
"WITHIN": "WITHIN",
|
||||
|
||||
@@ -164,6 +164,34 @@
|
||||
}),
|
||||
context: {prop: "FOO"},
|
||||
expect: false
|
||||
}, {
|
||||
filter: new OpenLayers.Filter.Comparison({
|
||||
type: OpenLayers.Filter.Comparison.IS_NULL,
|
||||
property: "prop"
|
||||
}),
|
||||
context: {prop: null},
|
||||
expect: true
|
||||
}, {
|
||||
filter: new OpenLayers.Filter.Comparison({
|
||||
type: OpenLayers.Filter.Comparison.IS_NULL,
|
||||
property: "prop"
|
||||
}),
|
||||
context: {},
|
||||
expect: false
|
||||
}, {
|
||||
filter: new OpenLayers.Filter.Comparison({
|
||||
type: OpenLayers.Filter.Comparison.IS_NULL,
|
||||
property: "prop"
|
||||
}),
|
||||
context: {prop: "foo"},
|
||||
expect: false
|
||||
}, {
|
||||
filter: new OpenLayers.Filter.Comparison({
|
||||
type: OpenLayers.Filter.Comparison.IS_NULL,
|
||||
property: "prop"
|
||||
}),
|
||||
context: {prop: 0},
|
||||
expect: false
|
||||
}];
|
||||
|
||||
t.plan(cases.length);
|
||||
@@ -274,6 +302,34 @@
|
||||
}),
|
||||
context: new OpenLayers.Feature.Vector(null, {prop: "FOO"}),
|
||||
expect: false
|
||||
}, {
|
||||
filter: new OpenLayers.Filter.Comparison({
|
||||
type: OpenLayers.Filter.Comparison.IS_NULL,
|
||||
property: "prop"
|
||||
}),
|
||||
context: new OpenLayers.Feature.Vector(null, {prop: null}),
|
||||
expect: true
|
||||
}, {
|
||||
filter: new OpenLayers.Filter.Comparison({
|
||||
type: OpenLayers.Filter.Comparison.IS_NULL,
|
||||
property: "prop"
|
||||
}),
|
||||
context: new OpenLayers.Feature.Vector(null, {}),
|
||||
expect: false
|
||||
}, {
|
||||
filter: new OpenLayers.Filter.Comparison({
|
||||
type: OpenLayers.Filter.Comparison.IS_NULL,
|
||||
property: "prop"
|
||||
}),
|
||||
context: new OpenLayers.Feature.Vector(null, {prop: "foo"}),
|
||||
expect: false
|
||||
}, {
|
||||
filter: new OpenLayers.Filter.Comparison({
|
||||
type: OpenLayers.Filter.Comparison.IS_NULL,
|
||||
property: "prop"
|
||||
}),
|
||||
context: new OpenLayers.Feature.Vector(null, {prop: 0}),
|
||||
expect: false
|
||||
}];
|
||||
|
||||
t.plan(cases.length);
|
||||
|
||||
@@ -51,6 +51,38 @@
|
||||
"[1] record correct upper boundary value");
|
||||
}
|
||||
|
||||
function test_PropertyIsNull(t) {
|
||||
|
||||
t.plan(3);
|
||||
|
||||
var format, test_xml, xml, filter, node;
|
||||
|
||||
format = new OpenLayers.Format.Filter.v1();
|
||||
|
||||
test_xml =
|
||||
'<ogc:Filter xmlns:ogc="http://www.opengis.net/ogc">' +
|
||||
'<ogc:PropertyIsNull>' +
|
||||
'<ogc:PropertyName>prop</ogc:PropertyName>' +
|
||||
'</ogc:PropertyIsNull>' +
|
||||
'</ogc:Filter>';
|
||||
|
||||
// Test reading a PropertyIsNull filter from an XML doc
|
||||
xml = new OpenLayers.Format.XML();
|
||||
filter = format.read(xml.read(test_xml).documentElement);
|
||||
t.eq(filter.type, OpenLayers.Filter.Comparison.IS_NULL,
|
||||
"[0] read correct type");
|
||||
t.eq(filter.property, 'prop',
|
||||
"[0] record correct property name");
|
||||
|
||||
// Test writing a PropertyIsNull filter out to XML
|
||||
filter = new OpenLayers.Filter.Comparison({
|
||||
type: OpenLayers.Filter.Comparison.IS_NULL,
|
||||
property: "prop"
|
||||
});
|
||||
node = format.write(filter);
|
||||
t.xml_eq(node, test_xml, "filter correctly written");
|
||||
|
||||
}
|
||||
|
||||
function test_Intersects(t) {
|
||||
|
||||
|
||||
Reference in New Issue
Block a user