Merge pull request #717 from walkermatt/master
Support for PropertyIsNull Filter
This commit is contained in:
@@ -27,6 +27,7 @@ OpenLayers.Filter.Comparison = OpenLayers.Class(OpenLayers.Filter, {
|
|||||||
* - OpenLayers.Filter.Comparison.GREATER_THAN_OR_EQUAL_TO = ">=";
|
* - OpenLayers.Filter.Comparison.GREATER_THAN_OR_EQUAL_TO = ">=";
|
||||||
* - OpenLayers.Filter.Comparison.BETWEEN = "..";
|
* - OpenLayers.Filter.Comparison.BETWEEN = "..";
|
||||||
* - OpenLayers.Filter.Comparison.LIKE = "~";
|
* - OpenLayers.Filter.Comparison.LIKE = "~";
|
||||||
|
* - OpenLayers.Filter.Comparison.IS_NULL = "NULL";
|
||||||
*/
|
*/
|
||||||
type: null,
|
type: null,
|
||||||
|
|
||||||
@@ -154,6 +155,9 @@ OpenLayers.Filter.Comparison = OpenLayers.Class(OpenLayers.Filter, {
|
|||||||
var regexp = new RegExp(this.value, "gi");
|
var regexp = new RegExp(this.value, "gi");
|
||||||
result = regexp.test(got);
|
result = regexp.test(got);
|
||||||
break;
|
break;
|
||||||
|
case OpenLayers.Filter.Comparison.IS_NULL:
|
||||||
|
result = (got === null);
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
return result;
|
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.GREATER_THAN_OR_EQUAL_TO = ">=";
|
||||||
OpenLayers.Filter.Comparison.BETWEEN = "..";
|
OpenLayers.Filter.Comparison.BETWEEN = "..";
|
||||||
OpenLayers.Filter.Comparison.LIKE = "~";
|
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) {
|
"Function": function(node, obj) {
|
||||||
//TODO write decoder for it
|
//TODO write decoder for it
|
||||||
return;
|
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);
|
this.writeOgcExpression(params[i], node);
|
||||||
}
|
}
|
||||||
return 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",
|
">=": "PropertyIsGreaterThanOrEqualTo",
|
||||||
"..": "PropertyIsBetween",
|
"..": "PropertyIsBetween",
|
||||||
"~": "PropertyIsLike",
|
"~": "PropertyIsLike",
|
||||||
|
"NULL": "PropertyIsNull",
|
||||||
"BBOX": "BBOX",
|
"BBOX": "BBOX",
|
||||||
"DWITHIN": "DWITHIN",
|
"DWITHIN": "DWITHIN",
|
||||||
"WITHIN": "WITHIN",
|
"WITHIN": "WITHIN",
|
||||||
|
|||||||
@@ -164,6 +164,34 @@
|
|||||||
}),
|
}),
|
||||||
context: {prop: "FOO"},
|
context: {prop: "FOO"},
|
||||||
expect: false
|
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);
|
t.plan(cases.length);
|
||||||
@@ -274,6 +302,34 @@
|
|||||||
}),
|
}),
|
||||||
context: new OpenLayers.Feature.Vector(null, {prop: "FOO"}),
|
context: new OpenLayers.Feature.Vector(null, {prop: "FOO"}),
|
||||||
expect: false
|
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);
|
t.plan(cases.length);
|
||||||
|
|||||||
@@ -51,6 +51,38 @@
|
|||||||
"[1] record correct upper boundary value");
|
"[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) {
|
function test_Intersects(t) {
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user