Added support for PropertyIsNull filter.
Added a simple comparison and read/write for PropertyIsNull encoded as XML including tests for each.
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,10 @@ 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:
|
||||||
|
var got = context[this.property];
|
||||||
|
result = (got === null || got === undefined);
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
return result;
|
return result;
|
||||||
},
|
},
|
||||||
@@ -260,3 +265,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: {prop: undefined},
|
||||||
|
expect: true
|
||||||
|
}, {
|
||||||
|
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);
|
||||||
|
|||||||
@@ -51,6 +51,44 @@
|
|||||||
"[1] record correct upper boundary value");
|
"[1] record correct upper boundary value");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function test_PropertyIsNull(t) {
|
||||||
|
|
||||||
|
t.plan(6);
|
||||||
|
|
||||||
|
var test_xml, format, xml;
|
||||||
|
|
||||||
|
format = new OpenLayers.Format.Filter.v1();
|
||||||
|
xml = new OpenLayers.Format.XML();
|
||||||
|
|
||||||
|
test_xml =
|
||||||
|
'<ogc:Filter xmlns:ogc="http://www.opengis.net/ogc">' +
|
||||||
|
'<ogc:PropertyIsNull>' +
|
||||||
|
'<ogc:PropertyName>prop</ogc:PropertyName>' +
|
||||||
|
'</ogc:PropertyIsNull>' +
|
||||||
|
'</ogc:Filter>';
|
||||||
|
|
||||||
|
var filter = format.read(xml.read(test_xml).documentElement);
|
||||||
|
t.eq(filter.type, OpenLayers.Filter.Comparison.IS_NULL,
|
||||||
|
"[0] read correct type");
|
||||||
|
console.log(filter);
|
||||||
|
t.eq(filter.property, 'prop',
|
||||||
|
"[0] record correct property name");
|
||||||
|
|
||||||
|
var filter = new OpenLayers.Filter.Comparison({
|
||||||
|
type: OpenLayers.Filter.Comparison.IS_NULL,
|
||||||
|
property: "prop"
|
||||||
|
});
|
||||||
|
element = format.write(filter);
|
||||||
|
t.eq(element.firstChild.nodeName, 'ogc:PropertyIsNull',
|
||||||
|
"[1] write correct filter node name");
|
||||||
|
t.eq(element.firstChild.childNodes.length, 1,
|
||||||
|
"[1] write correct number of filter arguments");
|
||||||
|
t.eq(element.firstChild.firstChild.nodeName, 'ogc:PropertyName',
|
||||||
|
"[1] write correct filter argument name");
|
||||||
|
t.eq(element.firstChild.firstChild.textContent, 'prop',
|
||||||
|
"[1] write correct filter argument value");
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
function test_Intersects(t) {
|
function test_Intersects(t) {
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user