Changeset 226


Ignore:
Timestamp:
03/16/09 19:48:51 (9 years ago)
Author:
tcoulter
Message:

Adding Dwin's changes to the ProtocolProxy to support caching and filtering.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • sandbox/opengeo/alachua/lib/GeoExt/data/ProtocolProxy.js

    r42 r226  
    5757
    5858    /**
     59     * Property: ogcFilter
     60     * {<OpenLayers.Protocol.Filter>} The filter to use when querying the server.
     61     */
     62    ogcFilter: null,
     63
     64    /**
     65     * Method: setOGCFilter
     66     * Parameters:
     67     * filter - {OpenLayers.Filter} The filter to use when making requests to the server.
     68     */
     69    setOGCFilter: function(filter){
     70        this.ogcFilter = filter;
     71        delete this.cachedFeatures;
     72    },
     73   
     74    getOGCFilter: function() {
     75        return this.ogcFilter; 
     76    },
     77
     78    cachedFeatures: null,
     79
     80    /**
    5981     * Method: load
    6082     *
     
    7496    load: function(params, reader, callback, scope, arg) {
    7597        if (this.fireEvent("beforeload", this, params) !== false) {
    76             var o = {
    77                 params: params || {},
    78                 request: {
    79                     callback: callback,
    80                     scope: scope,
    81                     arg: arg
    82                 },
    83                 reader: reader
    84             };
    85             var cb = OpenLayers.Function.bind(this.loadResponse, this, o);
    86             if (this.abortPrevious) {
    87                 this.abortRequest();
     98            if (!this.cachedFeatures){
     99                var o = {
     100                    params: params || {},
     101                    request: {
     102                        callback: callback,
     103                        scope: scope,
     104                        arg: arg
     105                    },
     106                    reader: reader
     107                };
     108                var cb = OpenLayers.Function.bind(this.loadResponse, this, o);
     109                if (this.abortPrevious) {
     110                    this.abortRequest();
     111                }
     112                var options = {
     113                    params: params,
     114                    callback: cb,
     115                    scope: this,
     116                    filter: this.ogcFilter
     117                };
     118
     119                Ext.applyIf(options, arg);
     120                this.response = this.protocol.read(options);
     121            } else {
     122                var result = reader.readRecords(this.cachedFeatures);
     123                if (params) this.sortFeatures(params, result.records);
     124                result.records =
     125                    result.records.splice(params.start || 0, params.limit || result.records.length);
     126                this.fireEvent("load", this, o, arg);
     127                callback.call(scope, result, arg, true);
    88128            }
    89             var options = {
    90                 params: params,
    91                 callback: cb,
    92                 scope: this
    93             };
    94             Ext.applyIf(options, arg);
    95             this.response = this.protocol.read(options);
    96129        } else {
    97130           callback.call(scope || this, null, arg, false);
     
    127160    loadResponse: function(o, response) {
    128161        if (response.success()) {
     162            this.cachedFeatures = response.features;
     163            this.sortFeatures(o.params, response);
    129164            var result = o.reader.read(response);
     165            if (o.params) this.sortFeatures(o.params, result.records);
     166            result.records =
     167                result.records.splice(o.params.start || 0, o.params.limit || result.records.length);
    130168            this.fireEvent("load", this, o, o.request.arg);
    131             o.request.callback.call(
    132                o.request.scope, result, o.request.arg, true);
     169            o.request.callback.call(o.request.scope, result, o.request.arg, true);
    133170        } else {
    134171            this.fireEvent("loadexception", this, o, response);
    135             o.request.callback.call(
    136                 o.request.scope, null, o.request.arg, false);
     172            o.request.callback.call(o.request.scope, null, o.request.arg, false);
     173        }
     174    },
     175
     176    sortFeatures: function(params, records) {
     177        if (params['sort'] && records[0]){
     178            var f = params['sort'];
     179            var st = records[0].fields.get(f).sortType;
     180
     181            var comparator = function(a, b){
     182                var at = st(a.data[f]);
     183                var bt = st(b.data[f]);
     184                return at < bt ? -1 : (at > bt ? 1 : 0);
     185            }
     186
     187            records.sort(comparator);
     188            if (params['dir'] == 'DESC') records.reverse();
    137189        }
    138190    }
Note: See TracChangeset for help on using the changeset viewer.