ae8a922712cbf5c36dbdc1a7b57a98b3997247db
[tine20] / tine20 / Tinebase / js / data / MemoryBackend.js
1
2 /**
3  * @namespace   Tine.Tinebase.data
4  * @class       Tine.Tinebase.data.MemoryBackend
5  * @extends     Tine.Tinebase.data.AbstractBackend
6  */
7 Tine.Tinebase.data.MemoryBackend = function(config) {
8     Tine.Tinebase.data.MemoryBackend.superclass.constructor.call(this);
9     Ext.apply(this, config);
10     
11     this.jsonReader = new Ext.data.JsonReader({
12         id: this.idProperty,
13         root: 'results',
14         totalProperty: 'totalcount'
15     }, this.recordClass);
16 };
17
18 Ext.extend(Tine.Tinebase.data.MemoryBackend, Tine.Tinebase.data.AbstractBackend, {
19     list: {},
20
21     /**
22      * loads a single 'full featured' record
23      * 
24      * @param   {Ext.data.Record} record
25      * @param   {Object} options
26      * @return  {Number} Ext.Ajax transaction id
27      * @success {Ext.data.Record}
28      */
29     loadRecord: function(record, options) {
30         options.success.defer(1000, options.scope, record);
31     },
32     
33     /**
34      * searches all (lightweight) records matching filter
35      * 
36      * @param   {Object} filter
37      * @param   {Object} paging
38      * @param   {Object} options
39      * @return  {Number} Ext.Ajax transaction id
40      * @success {Object} root:[recrods], totalcount: number
41      */
42     searchRecords: function(filter, paging, options) {
43         console.log(filter);
44         var records = [];
45         for (var id in this.list) {
46             records.push(this.recordReader({responseText: this.list[id]}));
47         }
48         
49         options.success.defer(500, options.scope, [{records: records, success: 1, totalRecords: records.length}]);
50     },
51     
52     /**
53      * saves a single record
54      * 
55      * @param   {Ext.data.Record} record
56      * @param   {Object} options
57      * @return  {Number} Ext.Ajax transaction id
58      * @success {Ext.data.Record}
59      */
60     saveRecord: function(record, options) {
61         if (! record.data.id) {
62             record.set('id', Ext.id());
63         }
64         
65         this.list[record.data.id] = Ext.util.JSON.encode(record.data);
66         
67         options.success.defer(500, options.scope, [this.recordReader({responseText: this.list[record.data.id]})]);
68     },
69     
70     /**
71      * deletes multiple records identified by their ids
72      * 
73      * @param   {Array} records Array of records or ids
74      * @param   {Object} options
75      * @return  {Number} Ext.Ajax transaction id
76      * @success 
77      */
78     deleteRecords: function(records, options) {
79         options.success.defer(1000, options.scope);
80     },
81     
82     /**
83      * updates multiple records with the same data
84      * 
85      * @param   {Array} filter filter data
86      * @param   {Object} updates
87      * @return  {Number} Ext.Ajax transaction id
88      * @success
89      */
90     updateRecords: function(filter, updates, options) {
91         options.success.defer(1000, options.scope, []);
92     },
93     
94     /**
95      * reads a single 'fully featured' record from json data
96      * 
97      * NOTE: You might want to overwride this method if you have a more complex record
98      * 
99      * @param  XHR response
100      * @return {Ext.data.Record}
101      */
102     recordReader: function(response) {
103         var recordData = Ext.util.JSON.decode('{"results": [' + response.responseText + ']}');
104         var data = this.jsonReader.readRecords(recordData);
105         
106         var record = data.records[0];
107         var recordId = record.get(record.idProperty);
108         
109         record.id = recordId ? recordId : 0;
110         
111         return record;
112     }
113     
114 });