Extending the filter format and the feature ID filter to support writing of logical filters that contain FID filters. r=bartvde (closes #3012)
git-svn-id: http://svn.openlayers.org/trunk/openlayers@11756 dc9f47b5-9b13-0410-9fdd-eb0c1a62fdaf
This commit is contained in:
@@ -25,6 +25,12 @@ OpenLayers.Filter.FeatureId = OpenLayers.Class(OpenLayers.Filter, {
|
||||
*/
|
||||
fids: null,
|
||||
|
||||
/**
|
||||
* Property: type
|
||||
* {String} Type to identify this filter.
|
||||
*/
|
||||
type: "FID",
|
||||
|
||||
/**
|
||||
* Constructor: OpenLayers.Filter.FeatureId
|
||||
* Creates an ogc:FeatureId rule.
|
||||
|
||||
@@ -272,6 +272,19 @@ OpenLayers.Format.Filter.v1 = OpenLayers.Class(OpenLayers.Format.XML, {
|
||||
return this.writers.ogc["Filter"].apply(this, [filter]);
|
||||
},
|
||||
|
||||
/**
|
||||
* Method: writeFeatureIdNodes
|
||||
*
|
||||
* Parameters:
|
||||
* filter - {<OpenLayers.Filter.FeatureId}
|
||||
* node - {DOMElement}
|
||||
*/
|
||||
writeFeatureIdNodes: function(filter, node) {
|
||||
for (var i=0, ii=filter.fids.length; i<ii; ++i) {
|
||||
this.writeNode("FeatureId", filter.fids[i], node);
|
||||
}
|
||||
},
|
||||
|
||||
/**
|
||||
* Property: writers
|
||||
* As a compliment to the readers property, this structure contains public
|
||||
@@ -282,11 +295,8 @@ OpenLayers.Format.Filter.v1 = OpenLayers.Class(OpenLayers.Format.XML, {
|
||||
"ogc": {
|
||||
"Filter": function(filter) {
|
||||
var node = this.createElementNSPlus("ogc:Filter");
|
||||
var sub = filter.CLASS_NAME.split(".").pop();
|
||||
if(sub == "FeatureId") {
|
||||
for(var i=0; i<filter.fids.length; ++i) {
|
||||
this.writeNode("FeatureId", filter.fids[i], node);
|
||||
}
|
||||
if (filter.type === "FID") {
|
||||
this.writeFeatureIdNodes(filter, node);
|
||||
} else {
|
||||
this.writeNode(this.getFilterType(filter), filter, node);
|
||||
}
|
||||
@@ -300,31 +310,43 @@ OpenLayers.Format.Filter.v1 = OpenLayers.Class(OpenLayers.Format.XML, {
|
||||
"And": function(filter) {
|
||||
var node = this.createElementNSPlus("ogc:And");
|
||||
var childFilter;
|
||||
for(var i=0; i<filter.filters.length; ++i) {
|
||||
for (var i=0, ii=filter.filters.length; i<ii; ++i) {
|
||||
childFilter = filter.filters[i];
|
||||
if (childFilter.type === "FID") {
|
||||
this.writeFeatureIdNodes(childFilter, node);
|
||||
} else {
|
||||
this.writeNode(
|
||||
this.getFilterType(childFilter), childFilter, node
|
||||
);
|
||||
}
|
||||
}
|
||||
return node;
|
||||
},
|
||||
"Or": function(filter) {
|
||||
var node = this.createElementNSPlus("ogc:Or");
|
||||
var childFilter;
|
||||
for(var i=0; i<filter.filters.length; ++i) {
|
||||
for (var i=0, ii=filter.filters.length; i<ii; ++i) {
|
||||
childFilter = filter.filters[i];
|
||||
if (childFilter.type === "FID") {
|
||||
this.writeFeatureIdNodes(childFilter, node);
|
||||
} else {
|
||||
this.writeNode(
|
||||
this.getFilterType(childFilter), childFilter, node
|
||||
);
|
||||
}
|
||||
}
|
||||
return node;
|
||||
},
|
||||
"Not": function(filter) {
|
||||
var node = this.createElementNSPlus("ogc:Not");
|
||||
var childFilter = filter.filters[0];
|
||||
if (childFilter.type === "FID") {
|
||||
this.writeFeatureIdNodes(childFilter, node);
|
||||
} else {
|
||||
this.writeNode(
|
||||
this.getFilterType(childFilter), childFilter, node
|
||||
);
|
||||
}
|
||||
return node;
|
||||
},
|
||||
"PropertyIsLessThan": function(filter) {
|
||||
@@ -460,7 +482,8 @@ OpenLayers.Format.Filter.v1 = OpenLayers.Class(OpenLayers.Format.XML, {
|
||||
"DWITHIN": "DWITHIN",
|
||||
"WITHIN": "WITHIN",
|
||||
"CONTAINS": "CONTAINS",
|
||||
"INTERSECTS": "INTERSECTS"
|
||||
"INTERSECTS": "INTERSECTS",
|
||||
"FID": "FeatureId"
|
||||
},
|
||||
|
||||
CLASS_NAME: "OpenLayers.Format.Filter.v1"
|
||||
|
||||
Reference in New Issue
Block a user