From 257cc5576b461fd5af355285e092377507b4ae5f Mon Sep 17 00:00:00 2001 From: ahocevar Date: Tue, 24 Aug 2010 11:13:51 +0000 Subject: [PATCH] Give Layer.Vector a getFeatureByFid and a getFeatureBy method. Thanks vog for this very clean patch and the verbose unit tests. r=me (closes #2722) git-svn-id: http://svn.openlayers.org/trunk/openlayers@10691 dc9f47b5-9b13-0410-9fdd-eb0c1a62fdaf --- lib/OpenLayers/Layer/Vector.js | 47 ++++++++++++++++++++++++++++------ tests/Layer/Vector.html | 41 +++++++++++++++++++++++++++++ 2 files changed, 80 insertions(+), 8 deletions(-) diff --git a/lib/OpenLayers/Layer/Vector.js b/lib/OpenLayers/Layer/Vector.js index cf4be62d88..7bcc12975a 100644 --- a/lib/OpenLayers/Layer/Vector.js +++ b/lib/OpenLayers/Layer/Vector.js @@ -823,30 +823,61 @@ OpenLayers.Layer.Vector = OpenLayers.Class(OpenLayers.Layer, { var featureId = this.renderer.getFeatureIdFromEvent(evt); return this.getFeatureById(featureId); }, - + /** - * APIMethod: getFeatureById - * Given a feature id, return the feature if it exists in the features array + * APIMethod: getFeatureBy + * Given a property value, return the feature if it exists in the features array * * Parameters: - * featureId - {String} + * property - {String} + * value - {String} * * Returns: * {} A feature corresponding to the given - * featureId + * property value or null if there is no such feature. */ - getFeatureById: function(featureId) { + getFeatureBy: function(property, value) { //TBD - would it be more efficient to use a hash for this.features? var feature = null; for(var i=0, len=this.features.length; i} A feature corresponding to the given + * featureId or null if there is no such feature. + */ + getFeatureById: function(featureId) { + return this.getFeatureBy('id', featureId); + }, + + /** + * APIMethod: getFeatureByFid + * Given a feature fid, return the feature if it exists in the features array + * + * Parameters: + * featureFid - {String} + * + * Returns: + * {} A feature corresponding to the given + * featureFid or null if there is no such feature. + */ + getFeatureByFid: function(featureFid) { + return this.getFeatureBy('fid', featureFid); + }, + /** * Unselect the selected features * i.e. clears the featureSelection array diff --git a/tests/Layer/Vector.html b/tests/Layer/Vector.html index adab56f929..790201c2bb 100644 --- a/tests/Layer/Vector.html +++ b/tests/Layer/Vector.html @@ -154,6 +154,47 @@ t.eq(extent.toBBOX(), "-111.04,45.68,-111.04,45.68", "extent from getDataExtent is correct"); } + function test_Layer_Vector_getFeature(t) { + t.plan(13); + + var layer = new OpenLayers.Layer.Vector(name); + var feature = new OpenLayers.Feature.Vector(new OpenLayers.Geometry.Point(-111.04, 45.68)); + + t.ok(layer.getFeatureById(feature.id) == null, + "OpenLayers.Layer.Vector.getFeatureById returns null while the layer is empty"); + t.ok(layer.getFeatureByFid('my_fid') == null, + "OpenLayers.Layer.Vector.getFeatureByFid returns null while the layer is empty"); + + layer.addFeatures([feature]); + + t.ok(layer.getFeatureByFid('my_fid') == null, + "OpenLayers.Layer.Vector.getFeatureByFid returns null on unset feature fid"); + + feature.fid = 'my_fid'; + + t.ok(layer.getFeatureById(feature.id) == feature, + "OpenLayers.Layer.Vector.getFeatureById returns the correct feature"); + t.ok(layer.getFeatureByFid(feature.fid) == feature, + "OpenLayers.Layer.Vector.getFeatureByFid returns the correct feature"); + t.ok(layer.getFeatureById('some_id_that_does_not_exist') == null, + "OpenLayers.Layer.Vector.getFeatureById returns null on non-existing feature id"); + t.ok(layer.getFeatureByFid('some_fid_that_does_not_exist') == null, + "OpenLayers.Layer.Vector.getFeatureByFid returns null on non-existing feature fid"); + t.ok(layer.getFeatureById(feature.fid) == null, + "OpenLayers.Layer.Vector.getFeatureById ignores the feature fid"); + t.ok(layer.getFeatureByFid(feature.id) == null, + "OpenLayers.Layer.Vector.getFeatureByFid ignores the feature id"); + + t.ok(layer.getFeatureBy('id', feature.id) == feature, + "OpenLayers.Layer.Vector.getFeatureBy('id', ...) works like getFeatureById on existing feature id"); + t.ok(layer.getFeatureBy('id', 'some_id_that_does_not_exist') == null, + "OpenLayers.Layer.Vector.getFeatureBy('id', ...) works like getFeatureById on non-existing feature id"); + t.ok(layer.getFeatureBy('fid', feature.fid) == feature, + "OpenLayers.Layer.Vector.getFeatureBy('fid', ...) works like getFeatureByFid on existing feature fid"); + t.ok(layer.getFeatureBy('fid', 'some_fid_that_does_not_exist') == null, + "OpenLayers.Layer.Vector.getFeatureBy('fid', ...) works like getFeatureByFid on non-existing feature fid"); + } + function test_Layer_Vector_getDataExtent(t) { t.plan(1); var layer = new OpenLayers.Layer.Vector(name);