Dummy asynchronous storage as a preparation for a proper db

bzr revid: fva@openerp.com-20120416161203-3dd0oc9ywe5pvard
This commit is contained in:
Frédéric van der Essen
2012-04-16 18:12:03 +02:00
parent c9a57f0921
commit e81d9fd69e
+111 -40
View File
@@ -1,26 +1,30 @@
(function(){
window.asyncLocalStorageDelay = 0;
window.asyncLocalStorage = {
window.asyncStorageDelay = 0;
window.asyncStorage = {
length: function(){
var d = $.Deferred();
setTimeout(function(){
d.resolve(localStorage.length);
},asyncLocalStorageDelay);
},asyncStorageDelay);
return d.promise();
},
key: function(index){
var d = $.Deferred();
setTimeout(function(){
d.resolve(localStorage.key(index));
},asyncLocalStorageDelay);
},asyncStorageDelay);
return d.promise();
},
getItem: function(key){
var d = $.Deferred();
setTimeout(function(){
d.resolve(localStorage.getItem(key));
},asyncLocalStorageDelay);
var val = localStorage.getItem(key);
if(val){
d.resolve(val);
}else{
d.reject();
}
},asyncStorageDelay);
return d.promise();
},
setItem: function(key,data){
@@ -28,7 +32,7 @@
setTimeout(function(){
localStorage.setItem(key,data);
d.resolve();
},asyncLocalStorageDelay);
},asyncStorageDelay);
return d.promise();
},
removeItem: function(key){
@@ -36,7 +40,7 @@
setTimeout(function(){
localStorage.removeItem(key);
d.resolve();
},asyncLocalStorageDelay);
},asyncStorageDelay);
return d.promise();
},
clear: function(){
@@ -44,9 +48,97 @@
setTimeout(function(){
localStorage.clear();
d.resolve();
},asyncLocalStorageDelay);
},asyncStorageDelay);
return d.promise();
}
},
// A collection holds a list of objects that can be stored and searched on the disc asynchronously.
// collection : the name of the collection.
// searchable_fields : a list of the name of the object's field that can be searched and matched
collection_new: function(collection, searchable_fields){
var col_obj = {
'name': collection,
'searchable_fields': searchable_fields || [],
'data': [],
};
return asyncStorage.setItem('collection_'+collection, JSON.stringify(col_obj));
},
// returns a defered that fetches one element of the collection that has a field of value equal to name
// the defered fails if there is no such element
collection_get: function(collection, field, name){
var d = $.Deferred();
setTimeout(function(){
var col_str = localStorage.getItem('collection_'+collection)
var col_obj = JSON.parse(col_str);
var data = col_obj.data;
for(var i = 0; i < data.length; i++){
var elem = data[i];
if (elem[field] && elem[field] === name){
d.resolve(elem);
return d.promise();
}
}
d.reject();
},asyncStorageDelay);
return d.promise();
},
// asynchronously add an element to the collection
collection_add: function(collection, elem){
var d = $.Deferred();
var col_str = localStorage.getItem('collection_'+collection);
var col_obj = JSON.parse(col_str);
col_obj.data.push(elem);
col_str = JSON.stringify(col_obj);
localStorage.setItem('collection_'+collection, col_str)
setTimeout(function(){
d.resolve();
},asyncStorageDelay);
return d.promise();
},
// returns a deffered that provides a list of element in the collection
// matching the patterns *
// patterns is a dictionary of {'field':'pattern'}.
// an object is said to match the patterns if one of his field has a related field in the
// dictionary with a value that contains the 'pattern'. the list may be empty
collection_find: function(collection, patterns){
var d = $.Deferred();
var col_str = localStorage.getItem('collection_'+collection)
var col_obj = JSON.parse(col_str);
var data = col_obj.data;
var results = [];
var lowerpatterns = {};
for (field in patterns){
lowerpatterns[field] = patterns[field].toLowerCase();
}
for(var i = 0; i < data.length; i++){
var elem = data[i];
for(field in lowerpatterns){
if(elem[field] && (''+elem[field]).toLowerCase().indexOf(lowerpatterns[field]) >= 0){
results.push(elem);
break;
}
}
}
setTimeout(function(){
d.resolve(results);
},asyncStorageDelay);
return d.promise();
},
};
})();
@@ -96,40 +188,19 @@ openerp.point_of_sale = function(session) {
this.data[key] = value;
localStorage['oe_pos_' + key] = JSON.stringify(value);
},
});
var SqlStore = session.web.Class.extend({
init: function(){
this.data = {};
collection_new: function(collection, searchable_fields){
return asyncStorage.collection_new(collection,searchable_fields);
},
get: function(key, _default){
if (this.data[key] === undefined) {
var stored = localStorage['oe_pos_' + key];
if (stored){
this.data[key] = JSON.parse(stored);
}else{
console.log('Store get: ',key, 'default: ',_default);
return _default;
}
}
console.log('Store get: ',key, 'value: ', this.data[key]);
return this.data[key];
},
set: function(key, value){
console.log('Store set: ',key,' value: ',value);
this.data[key] = value;
localStorage['oe_pos_' + key] = JSON.stringify(value);
},
collection_new: function(collection, elem_name_field, elem_name_func){
},
collection_get: function(collection, elem_name_field, elem_name){
collection_get: function(collection, field, name){
return asyncStorage.collection_get(collection,field,name);
},
collection_add: function(collection, elem){
return asyncStorage.collection_add(collection,elem);
},
collection_find: function(collection, elem_name_field, elem_name_pattern){
},
collection_find: function(collection, patterns){
return asyncStorage.collection_find(collection,patterns);
}
});
/*
Gets all the necessary data from the OpenERP web client (session, shop data etc.)