OpenLayers OpenLayers

Changeset 7235

Show
Ignore:
Timestamp:
05/21/08 04:15:46 (6 months ago)
Author:
fredj
Message:

backport modification from camptocamp sandbox

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • sandbox/vector-behavior/lib/OpenLayers/Protocol/SQL/GoogleGears.js

    r7227 r7235  
    7272 
    7373        return [feature.fid, 
    74                 feature.geometry.toString()
     74                feature.geometry ? feature.geometry.toString() : ''
    7575                this.jsonFormat.write(feature.attributes), 
    7676                feature.state]; 
     
    8888    unfreezeFeature: function(row) { 
    8989        var feature = this.wktFormat.read(row.fieldByName('geometry')); 
     90        if (!feature) { 
     91            // feature's geometry is empty 
     92            feature = new OpenLayers.Feature.Vector(); 
     93        } 
    9094        feature.attributes = this.jsonFormat.read(row.fieldByName('properties')); 
    9195        feature.fid = row.fieldByName('fid'); 
     
    99103     */ 
    100104    read: function(options) { 
    101         OpenLayers.Console.debug("GoogleGears::read(%o)", options); 
     105        var mergedOptions = OpenLayers.Util.extend({}, options); 
     106        OpenLayers.Util.applyDefaults(mergedOptions, this.options); 
     107 
     108        OpenLayers.Console.debug("GoogleGears::read(%o)", mergedOptions); 
    102109        var features = []; 
    103110        var rs = this.db.execute("SELECT * FROM " + this.tableName); 
     
    112119                      features: features 
    113120                   }); 
    114         if (options && options.callback) { 
    115             options.callback.call(options.scope, resp); 
     121        if (mergedOptions && mergedOptions.callback) { 
     122            mergedOptions.callback.call(mergedOptions.scope, resp); 
    116123        } 
    117124        return resp; 
     
    128135     */ 
    129136    create: function(features, options) { 
     137        var mergedOptions = OpenLayers.Util.extend({}, options); 
     138        OpenLayers.Util.applyDefaults(mergedOptions, this.options); 
     139 
    130140        OpenLayers.Console.debug("GoogleGears::create()"); 
    131141        var toCreate = features instanceof Array ? features : [features]; 
     
    146156                      reqFeatures: features 
    147157                   }); 
    148         if (options && options.callback) { 
    149             options.callback.call(options.scope, resp); 
     158        if (mergedOptions && mergedOptions.callback) { 
     159            mergedOptions.callback.call(mergedOptions.scope, resp); 
    150160        } 
    151161        return resp; 
     
    162172     */ 
    163173    update: function(features, options) { 
     174        var mergedOptions = OpenLayers.Util.extend({}, options); 
     175        OpenLayers.Util.applyDefaults(mergedOptions, this.options); 
     176 
    164177        OpenLayers.Console.debug("GoogleGears::update()"); 
    165178        var toUpdate = features instanceof Array ? features : [features]; 
     
    180193                      reqFeatures: features 
    181194                   }); 
    182         if (options && options.callback) { 
    183             options.callback.call(options.scope, resp); 
     195        if (mergedOptions && mergedOptions.callback) { 
     196            mergedOptions.callback.call(mergedOptions.scope, resp); 
    184197        } 
    185198        return resp; 
     
    207220     */ 
    208221    commit: function(features, options) { 
     222        var mergedOptions = OpenLayers.Util.extend({}, options); 
     223        OpenLayers.Util.applyDefaults(mergedOptions, this.options); 
     224 
    209225        OpenLayers.Console.debug("GoogleGears::commit()"); 
    210226        var toCreate = [], toUpdate = []; 
     
    220236                break; 
    221237            case OpenLayers.State.DELETE: 
    222                 this["delete"](feature, options["delete"]); 
     238                this["delete"](feature, mergedOptions["delete"]); 
    223239                break; 
    224240            } 
    225241        } 
    226242        if (toCreate.length > 0) { 
    227             this.create(toCreate, options.create); 
     243            this.create(toCreate, mergedOptions.create); 
    228244        } 
    229245        if (toUpdate.length > 0) { 
    230             this.update(toUpdate, options.update); 
     246            this.update(toUpdate, mergedOptions.update); 
    231247        } 
    232248    }, 
     
    241257     */ 
    242258    "delete": function(feature, options) { 
    243         OpenLayers.Console.debug("GoogleGears::delete()"); 
    244         this.db.execute("DELETE FROM " + this.tableName + 
    245                         " WHERE fid = ?", [feature.fid]); 
    246  
     259        var mergedOptions = OpenLayers.Util.extend({}, options); 
     260        OpenLayers.Util.applyDefaults(mergedOptions, this.options); 
     261 
     262        OpenLayers.Console.debug("GoogleGears::delete(%o, %o)", feature, options); 
     263 
     264        // Don't delete the feature from the database 
     265        if (mergedOptions["delete"] && !!(mergedOptions["delete"].dontDelete)) { 
     266            var toDelete = feature.clone(); 
     267            toDelete.fid = feature.fid; 
     268            toDelete.geometry.destroy(); 
     269            toDelete.geometry = null; 
     270            toDelete.state = feature.state; 
     271             
     272            this.update(toDelete); 
     273        } else { 
     274            this.db.execute("DELETE FROM " + this.tableName + 
     275                            " WHERE fid = ?", [feature.fid]); 
     276        } 
    247277        var resp = new OpenLayers.Protocol.Response({ 
    248278                       code: OpenLayers.Protocol.Response.SUCCESS, 
     
    250280                }); 
    251281 
    252         if (options && options.callback) { 
    253             options.callback.call(options.scope, resp); 
     282        if (mergedOptions && mergedOptions.callback) { 
     283            mergedOptions.callback.call(mergedOptions.scope, resp); 
    254284        } 
    255285        return resp;