1 | define(['dojo/_base/lang','dojo/_base/array','dojo/_base/Deferred','dojo/store/JsonRest'], |
---|
2 | function(lang,array,Deferred,JsonRest){ |
---|
3 | |
---|
4 | var OBJ_TYPE = '__objectType'; |
---|
5 | var OBJ_UID = '__objectUid'; |
---|
6 | var REF_TYPE = '__referenceType'; |
---|
7 | var REF_UID = '__referenceUid'; |
---|
8 | |
---|
9 | var RftObject = function(values) { |
---|
10 | var self = this; |
---|
11 | lang.mixin(this,values); |
---|
12 | self.getUid = function() { |
---|
13 | return self[OBJ_UID]; |
---|
14 | } |
---|
15 | }; |
---|
16 | |
---|
17 | var rftStoreCtor = function(objectType) { |
---|
18 | var jsonStore = new JsonRest({ |
---|
19 | target:"../server/api.php/data/"+objectType+"/", |
---|
20 | idProperty: OBJ_UID |
---|
21 | }); |
---|
22 | return lang.delegate(jsonStore,{ |
---|
23 | query: function(query, directives){ |
---|
24 | return Deferred.when( jsonStore.query(query,directives), function(results){ |
---|
25 | return array.map(results,function(result){ |
---|
26 | return new RftObject(typeof result == "object" ? result : object); |
---|
27 | }); |
---|
28 | }); |
---|
29 | }, |
---|
30 | get: function(id, directives){ |
---|
31 | return Deferred.when( jsonStore.get(id,directives), function(result){ |
---|
32 | return new RftObject(typeof result == "object" ? result : object); |
---|
33 | }); |
---|
34 | }, |
---|
35 | add: function(object, directives){ |
---|
36 | return Deferred.when( jsonStore.add(object,directives), function(result){ |
---|
37 | return new RftObject(typeof result == "object" ? result : object); |
---|
38 | }); |
---|
39 | }, |
---|
40 | put: function(object, directives){ |
---|
41 | return Deferred.when( jsonStore.put(object,directives), function(result) { |
---|
42 | return new RftObject(typeof result == "object" ? result : object); |
---|
43 | }); |
---|
44 | }, |
---|
45 | remove: function(id, directives){ |
---|
46 | return jsonStore.remove(id,directives); |
---|
47 | } |
---|
48 | }); |
---|
49 | }; |
---|
50 | |
---|
51 | var storeCache = {}; |
---|
52 | |
---|
53 | return { |
---|
54 | getStore: function(objectType) { |
---|
55 | if ( !storeCache[objectType] ) { |
---|
56 | storeCache[objectType] = new rftStoreCtor(objectType); |
---|
57 | } |
---|
58 | return storeCache[objectType]; |
---|
59 | }, |
---|
60 | dereference: function(object) { |
---|
61 | if ( object[REF_TYPE] ) { |
---|
62 | return this.getStore(object[REF_TYPE]).get(object[REF_UID]); |
---|
63 | } |
---|
64 | return object; |
---|
65 | } |
---|
66 | }; |
---|
67 | |
---|
68 | }); |
---|