Merge pull request #717 from walkermatt/master

Support for PropertyIsNull Filter
This commit is contained in:
Bart van den Eijnden
2012-10-16 00:24:23 -07:00
4 changed files with 107 additions and 1 deletions

View File

@@ -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";

View File

@@ -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",

View File

@@ -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);

View File

@@ -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) {