[Commits] r1321 - in sandbox/elemoine/playground/geoext: lib/GeoExt/data lib/GeoExt/widgets tests/lib/GeoExt/data

commits at geoext.org commits at geoext.org
Mon Aug 10 06:43:53 CEST 2009


Author: elemoine
Date: 2009-08-10 06:43:53 +0200 (Mon, 10 Aug 2009)
New Revision: 1321

Modified:
   sandbox/elemoine/playground/geoext/lib/GeoExt/data/FeatureReader.js
   sandbox/elemoine/playground/geoext/lib/GeoExt/data/FeatureStore.js
   sandbox/elemoine/playground/geoext/lib/GeoExt/widgets/LegendWMS.js
   sandbox/elemoine/playground/geoext/tests/lib/GeoExt/data/FeatureStore.html
Log:
svn merge -r1308:HEAD http://svn.geoext.org/core/trunk/geoext .


Modified: sandbox/elemoine/playground/geoext/lib/GeoExt/data/FeatureReader.js
===================================================================
--- sandbox/elemoine/playground/geoext/lib/GeoExt/data/FeatureReader.js	2009-08-10 04:42:05 UTC (rev 1320)
+++ sandbox/elemoine/playground/geoext/lib/GeoExt/data/FeatureReader.js	2009-08-10 04:43:53 UTC (rev 1321)
@@ -109,7 +109,9 @@
                 values.state = feature.state;
                 values.fid = feature.fid;
 
-                records[records.length] = new recordType(values, feature.id);
+                // newly inserted features need to be made into phantom records
+                var id = (feature.state === OpenLayers.State.INSERT) ? undefined : feature.id;
+                records[records.length] = new recordType(values, id);
             }
         }
 

Modified: sandbox/elemoine/playground/geoext/lib/GeoExt/data/FeatureStore.js
===================================================================
--- sandbox/elemoine/playground/geoext/lib/GeoExt/data/FeatureStore.js	2009-08-10 04:42:05 UTC (rev 1320)
+++ sandbox/elemoine/playground/geoext/lib/GeoExt/data/FeatureStore.js	2009-08-10 04:43:53 UTC (rev 1321)
@@ -191,6 +191,27 @@
         }
     },
    
+    /** api: method[getRecordFromFeature]
+     *  :arg feature: ``OpenLayers.Vector.Feature``
+     *  :returns: :class:`GeoExt.data.FeatureRecord` The record corresponding
+     *      to the given feature.  Returns null if no record matches.
+     *
+     *  Get the record corresponding to a feature.
+     */
+    getRecordFromFeature: function(feature) {
+        var record = null;
+        if(feature.state !== OpenLayers.State.INSERT) {
+            record = this.getById(feature.id);
+        } else {
+            var index = this.findBy(function(r) {
+                return r.get("feature") === feature;
+            });
+            if(index > -1) {
+                record = this.getAt(index);
+            }
+        }
+        return record;
+    },
    
     /** private: method[onFeaturesAdded]
      *  Handler for layer featuresadded event
@@ -225,7 +246,7 @@
             var features = evt.features, feature, record, i;
             for(i=features.length - 1; i>=0; i--) {
                 feature = features[i];
-                record = this.getById(feature.id);
+                record = this.getRecordFromFeature(feature);
                 if(record !== undefined) {
                     this._removing = true;
                     this.remove(record);
@@ -234,14 +255,14 @@
             }
         }
     },
-
+    
     /** private: method[onFeatureModified]
      *  Handler for layer featuremodified event
      */
     onFeatureModified: function(evt) {
         if(!this._updating) {
             var feature = evt.feature;
-            var record = this.getById(feature.id);
+            var record = this.getRecordFromFeature(feature);
             if(record !== undefined) {
                 record.beginEdit();
                 attributes = feature.attributes;

Modified: sandbox/elemoine/playground/geoext/lib/GeoExt/widgets/LegendWMS.js
===================================================================
--- sandbox/elemoine/playground/geoext/lib/GeoExt/widgets/LegendWMS.js	2009-08-10 04:42:05 UTC (rev 1320)
+++ sandbox/elemoine/playground/geoext/lib/GeoExt/widgets/LegendWMS.js	2009-08-10 04:43:53 UTC (rev 1321)
@@ -107,7 +107,7 @@
         var url, layerName, styleName;
         for (var i = 0, len = layers.length; i < len; i++){
             layerName = layers[i];
-            if(styles) {
+            if(styles && styles.length > 0) {
                 styleName = styleNames && styleNames[i];
                 if(styleName) {
                     Ext.each(styles, function(s) {

Modified: sandbox/elemoine/playground/geoext/tests/lib/GeoExt/data/FeatureStore.html
===================================================================
--- sandbox/elemoine/playground/geoext/tests/lib/GeoExt/data/FeatureStore.html	2009-08-10 04:42:05 UTC (rev 1320)
+++ sandbox/elemoine/playground/geoext/tests/lib/GeoExt/data/FeatureStore.html	2009-08-10 04:43:53 UTC (rev 1321)
@@ -156,6 +156,35 @@
                  'Adding a record with "add" does not add feature to layer if addRecordFilter returns false');
         }
         
+        function test_getRecordFromFeature(t) {
+            t.plan(2);
+
+            var layer = new OpenLayers.Layer.Vector();
+            var store = new GeoExt.data.FeatureStore({
+                layer: layer
+            });
+            var features = [ 
+                new OpenLayers.Feature.Vector(), 
+                new OpenLayers.Feature.Vector() 
+            ];
+            features[0].state = OpenLayers.State.INSERT;
+            layer.addFeatures(features);
+            
+            var record;
+            
+            // confirm that we can get a phantom record
+            record = store.getRecordFromFeature(features[0]);
+            t.ok((record && record.get("feature")) === features[0],
+                 "phantom record retrieved");
+            
+            // confirm that we can get a normal record
+            record = store.getRecordFromFeature(features[1]);
+            t.ok((record && record.get("feature")) === features[1],
+                 "normal record retrieved");
+
+            layer.destroy();
+        }
+        
         function test_addFeatures_removeFeatures(t) {
             
             t.plan(5);
@@ -163,7 +192,11 @@
             var features = [ 
                 new OpenLayers.Feature.Vector(), 
                 new OpenLayers.Feature.Vector() 
-            ]; 
+            ];
+            
+            // set state of one feature to insert to test phantom record removal
+            features[0].state = OpenLayers.State.INSERT;
+            
             var layer = new OpenLayers.Layer.Vector("Foo layer");
             var store = new GeoExt.data.FeatureStore({
                 layer: layer
@@ -198,6 +231,8 @@
                 foo: "foo",
                 bar: "bar"
             });
+            // confirm that we can update phantom records
+            feature.state = OpenLayers.State.INSERT;
 
             id = feature.id;
             
@@ -221,11 +256,12 @@
                 fields: recordType,
                 data: [feature]
             });
+            record = store.getRecordFromFeature(feature);
 
-            t.eq(store.getById(id).get("foo"), "foo",
+            t.eq(record.get("foo"), "foo",
                  "record gets correct initial value for property \"foo\"");
 
-            t.eq(store.getById(id).get("bar"), "bar",
+            t.eq(record.get("bar"), "bar",
                  "record gets correct initial value for property \"bar\"");
 
             /*
@@ -237,21 +273,20 @@
             feature.attributes.bar = "bar2";
             layer.events.triggerEvent("featuremodified", {feature: feature});
 
-            t.eq(store.getById(id).get("foo"), "foo2",
+            t.eq(record.get("foo"), "foo2",
                  "featuremodified event causes update of record property \"foo\"");
 
-            t.eq(store.getById(id).get("bar"), "bar2",
+            t.eq(record.get("bar"), "bar2",
                  "featuremodified event causes update of record property \"bar\"");
 
             // update
-            record = store.getById(id);
             record.set("foo", "foo3");
             record.set("bar", "bar3");
 
-            t.eq(layer.getFeatureById(id).attributes.foo, "foo3",
+            t.eq(feature.attributes.foo, "foo3",
                  "update event causes update of feature property \"foo\"");
 
-            t.eq(layer.getFeatureById(id).attributes.bar, "bar3",
+            t.eq(feature.attributes.bar, "bar3",
                  "update event causes update of feature property \"bar\"");
             
             // make sure calling record.set didn't add any attributes
@@ -266,6 +301,7 @@
             store.getById(feature2.id).set("bar", "bar_f2");
             
             t.eq(feature2.attributes.bar, "bar_f2", "previously undefined attribute set correctly");
+            
 
          }
     </script> 



More information about the Commits mailing list