Diffstat (limited to 'frontend/gamma/js/Clipperz/PM/DataModel/User.Header.RecordIndex.js') (more/less context) (ignore whitespace changes)
-rw-r--r-- | frontend/gamma/js/Clipperz/PM/DataModel/User.Header.RecordIndex.js | 39 |
1 files changed, 11 insertions, 28 deletions
diff --git a/frontend/gamma/js/Clipperz/PM/DataModel/User.Header.RecordIndex.js b/frontend/gamma/js/Clipperz/PM/DataModel/User.Header.RecordIndex.js index f77ea80..5681f70 100644 --- a/frontend/gamma/js/Clipperz/PM/DataModel/User.Header.RecordIndex.js +++ b/frontend/gamma/js/Clipperz/PM/DataModel/User.Header.RecordIndex.js | |||
@@ -1,669 +1,652 @@ | |||
1 | /* | 1 | /* |
2 | 2 | ||
3 | Copyright 2008-2011 Clipperz Srl | 3 | Copyright 2008-2013 Clipperz Srl |
4 | 4 | ||
5 | This file is part of Clipperz Community Edition. | 5 | This file is part of Clipperz, the online password manager. |
6 | Clipperz Community Edition is an online password manager. | ||
7 | For further information about its features and functionalities please | 6 | For further information about its features and functionalities please |
8 | refer to http://www.clipperz.com. | 7 | refer to http://www.clipperz.com. |
9 | 8 | ||
10 | * Clipperz Community Edition is free software: you can redistribute | 9 | * Clipperz is free software: you can redistribute it and/or modify it |
11 | it and/or modify it under the terms of the GNU Affero General Public | 10 | under the terms of the GNU Affero General Public License as published |
12 | License as published by the Free Software Foundation, either version | 11 | by the Free Software Foundation, either version 3 of the License, or |
13 | 3 of the License, or (at your option) any later version. | 12 | (at your option) any later version. |
14 | 13 | ||
15 | * Clipperz Community Edition is distributed in the hope that it will | 14 | * Clipperz is distributed in the hope that it will be useful, but |
16 | be useful, but WITHOUT ANY WARRANTY; without even the implied | 15 | WITHOUT ANY WARRANTY; without even the implied warranty of |
17 | warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. | 16 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. |
18 | See the GNU Affero General Public License for more details. | 17 | See the GNU Affero General Public License for more details. |
19 | 18 | ||
20 | * You should have received a copy of the GNU Affero General Public | 19 | * You should have received a copy of the GNU Affero General Public |
21 | License along with Clipperz Community Edition. If not, see | 20 | License along with Clipperz. If not, see http://www.gnu.org/licenses/. |
22 | <http://www.gnu.org/licenses/>. | ||
23 | 21 | ||
24 | */ | 22 | */ |
25 | 23 | ||
26 | try { if (typeof(Clipperz.PM.DataModel.User) == 'undefined') { throw ""; }} catch (e) { | 24 | try { if (typeof(Clipperz.PM.DataModel.User) == 'undefined') { throw ""; }} catch (e) { |
27 | throw "Clipperz.PM.DataModel.User.Header.RecordIndex depends on Clipperz.PM.DataModel.User!"; | 25 | throw "Clipperz.PM.DataModel.User.Header.RecordIndex depends on Clipperz.PM.DataModel.User!"; |
28 | } | 26 | } |
29 | 27 | ||
30 | if (typeof(Clipperz.PM.DataModel.User.Header) == 'undefined') { Clipperz.PM.DataModel.User.Header = {}; } | 28 | if (typeof(Clipperz.PM.DataModel.User.Header) == 'undefined') { Clipperz.PM.DataModel.User.Header = {}; } |
31 | 29 | ||
32 | Clipperz.PM.DataModel.User.Header.RecordIndex = function(args) { | 30 | Clipperz.PM.DataModel.User.Header.RecordIndex = function(args) { |
33 | Clipperz.PM.DataModel.User.Header.RecordIndex.superclass.constructor.apply(this, arguments); | 31 | Clipperz.PM.DataModel.User.Header.RecordIndex.superclass.constructor.apply(this, arguments); |
34 | 32 | ||
35 | //console.log("NEW Clipperz.PM.DataModel.User.Header.RecordIndex", args); | ||
36 | this._recordsData = new Clipperz.PM.DataModel.EncryptedRemoteObject({ | 33 | this._recordsData = new Clipperz.PM.DataModel.EncryptedRemoteObject({ |
37 | 'name':'recordsData', | 34 | 'name':'recordsData', |
38 | 'retrieveKeyFunction': args.retrieveKeyFunction, | 35 | 'retrieveKeyFunction': args.retrieveKeyFunction, |
39 | 'remoteData': { | 36 | 'remoteData': { |
40 | 'data': args.recordsData['data'], | 37 | 'data': args.recordsData['data'], |
41 | 'version': args.encryptedDataVersion, | 38 | 'version': args.encryptedDataVersion, |
42 | 'recordsStats': args.recordsStats | 39 | 'recordsStats': args.recordsStats |
43 | }//, | 40 | }//, |
44 | // 'encryptedDataKeypath': 'data', | 41 | // 'encryptedDataKeypath': 'data', |
45 | // 'encryptedVersionKeypath': 'version' | 42 | // 'encryptedVersionKeypath': 'version' |
46 | }); | 43 | }); |
47 | 44 | ||
48 | this._directLoginsData = new Clipperz.PM.DataModel.EncryptedRemoteObject({ | 45 | this._directLoginsData = new Clipperz.PM.DataModel.EncryptedRemoteObject({ |
49 | 'name':'directLoginsData', | 46 | 'name':'directLoginsData', |
50 | 'retrieveKeyFunction': args.retrieveKeyFunction, | 47 | 'retrieveKeyFunction': args.retrieveKeyFunction, |
51 | 'remoteData': { | 48 | 'remoteData': { |
52 | 'data': args.directLoginsData['data'], | 49 | 'data': args.directLoginsData['data'], |
53 | 'version': args.encryptedDataVersion | 50 | 'version': args.encryptedDataVersion |
54 | }//, | 51 | }//, |
55 | // 'encryptedDataKeypath': 'data', | 52 | // 'encryptedDataKeypath': 'data', |
56 | // 'encryptedVersionKeypath': 'version' | 53 | // 'encryptedVersionKeypath': 'version' |
57 | }); | 54 | }); |
58 | 55 | ||
59 | this._lock = new MochiKit.Async.DeferredLock(); | 56 | this._lock = new MochiKit.Async.DeferredLock(); |
60 | this._transientState = null; | 57 | this._transientState = null; |
61 | 58 | ||
62 | this._retrieveRecordDetailFunction = args.retrieveRecordDetailFunction|| Clipperz.Base.exception.raise('MandatoryParameter'); | 59 | this._retrieveRecordDetailFunction = args.retrieveRecordDetailFunction|| Clipperz.Base.exception.raise('MandatoryParameter'); |
63 | this._recordsIndex = args.recordsData['index'] || Clipperz.Base.exception.raise('MandatoryParameter'); | 60 | this._recordsIndex = args.recordsData['index'] || Clipperz.Base.exception.raise('MandatoryParameter'); |
64 | this._directLoginsIndex = args.directLoginsData['index']|| Clipperz.Base.exception.raise('MandatoryParameter'); | 61 | this._directLoginsIndex = args.directLoginsData['index']|| Clipperz.Base.exception.raise('MandatoryParameter'); |
65 | 62 | ||
66 | this._records = null; | 63 | this._records = null; |
67 | 64 | ||
68 | return this; | 65 | return this; |
69 | } | 66 | } |
70 | 67 | ||
71 | 68 | ||
72 | Clipperz.Base.extend(Clipperz.PM.DataModel.User.Header.RecordIndex, Object, { | 69 | Clipperz.Base.extend(Clipperz.PM.DataModel.User.Header.RecordIndex, Object, { |
73 | 70 | ||
74 | 'toString': function() { | 71 | 'toString': function() { |
75 | return "Clipperz.PM.DataModel.User.Header.RecordIndex"; | 72 | return "Clipperz.PM.DataModel.User.Header.RecordIndex"; |
76 | }, | 73 | }, |
77 | 74 | ||
78 | //------------------------------------------------------------------------- | 75 | //------------------------------------------------------------------------- |
79 | 76 | ||
80 | 'retrieveRecordDetailFunction': function () { | 77 | 'retrieveRecordDetailFunction': function () { |
81 | return this._retrieveRecordDetailFunction; | 78 | return this._retrieveRecordDetailFunction; |
82 | }, | 79 | }, |
83 | 80 | ||
84 | //------------------------------------------------------------------------- | 81 | //------------------------------------------------------------------------- |
85 | 82 | ||
86 | 'recordsIndex': function () { | 83 | 'recordsIndex': function () { |
87 | return this._recordsIndex; | 84 | return this._recordsIndex; |
88 | }, | 85 | }, |
89 | 86 | ||
90 | 'recordsData': function () { | 87 | 'recordsData': function () { |
91 | return this._recordsData; | 88 | return this._recordsData; |
92 | }, | 89 | }, |
93 | 90 | ||
94 | //------------------------------------------------------------------------- | 91 | //------------------------------------------------------------------------- |
95 | 92 | ||
96 | 'directLoginsIndex': function () { | 93 | 'directLoginsIndex': function () { |
97 | return this._directLoginsIndex; | 94 | return this._directLoginsIndex; |
98 | }, | 95 | }, |
99 | 96 | ||
100 | 'directLoginsData': function () { | 97 | 'directLoginsData': function () { |
101 | return this._directLoginsData; | 98 | return this._directLoginsData; |
102 | }, | 99 | }, |
103 | 100 | ||
104 | //------------------------------------------------------------------------- | 101 | //------------------------------------------------------------------------- |
105 | 102 | ||
106 | 'lock': function () { | 103 | 'lock': function () { |
107 | return this._lock; | 104 | return this._lock; |
108 | }, | 105 | }, |
109 | 106 | ||
110 | //------------------------------------------------------------------------- | 107 | //------------------------------------------------------------------------- |
111 | 108 | ||
112 | 'transientState': function () { | 109 | 'transientState': function () { |
113 | if (this._transientState == null) { | 110 | if (this._transientState == null) { |
114 | this._transientState = new Clipperz.KeyValueObjectStore(/*{'name':'User.Header.RecordIndex.transientState [1]'}*/); | 111 | this._transientState = new Clipperz.KeyValueObjectStore(/*{'name':'User.Header.RecordIndex.transientState [1]'}*/); |
115 | } | 112 | } |
116 | 113 | ||
117 | return this._transientState; | 114 | return this._transientState; |
118 | }, | 115 | }, |
119 | 116 | ||
120 | 'resetTransientState': function (isCommitting) { | 117 | 'resetTransientState': function (isCommitting) { |
121 | //console.log("######## UserHeaderRecordIndex - resetTransientState", Clipperz.Base.deepClone(this._transientState)); | ||
122 | if (this._transientState != null) { | 118 | if (this._transientState != null) { |
123 | this._transientState.removeAllData(); | 119 | this._transientState.removeAllData(); |
124 | } | 120 | } |
125 | 121 | ||
126 | this._transientState = null; | 122 | this._transientState = null; |
127 | }, | 123 | }, |
128 | 124 | ||
129 | //------------------------------------------------------------------------- | 125 | //------------------------------------------------------------------------- |
130 | 126 | ||
131 | 'getRecordKey': function (aRecordReference) { | 127 | 'getRecordKey': function (aRecordReference) { |
132 | return Clipperz.Async.callbacks("User.Header.RecordIndex.getRecordKey", [ | 128 | return Clipperz.Async.callbacks("User.Header.RecordIndex.getRecordKey", [ |
133 | MochiKit.Base.method(this, 'getRecordIndexData', aRecordReference), | 129 | MochiKit.Base.method(this, 'getRecordIndexData', aRecordReference), |
134 | MochiKit.Base.itemgetter('key') | 130 | MochiKit.Base.itemgetter('key') |
135 | ], {trace:false}); | 131 | ], {trace:false}); |
136 | }, | 132 | }, |
137 | 133 | ||
138 | 'setRecordKey': function (aRecordReference, aValue) { | 134 | 'setRecordKey': function (aRecordReference, aValue) { |
139 | return this.updateRecordIndexData(aRecordReference, 'key', aValue); | 135 | return this.updateRecordIndexData(aRecordReference, 'key', aValue); |
140 | }, | 136 | }, |
141 | 137 | ||
142 | //------------------------------------------------------------------------- | 138 | //------------------------------------------------------------------------- |
143 | 139 | ||
144 | 'getRecordIndexData': function (aRecordReference) { | 140 | 'getRecordIndexData': function (aRecordReference) { |
145 | return this.recordsData().getValue(this.recordsIndex()[aRecordReference]); | 141 | return this.recordsData().getValue(this.recordsIndex()[aRecordReference]); |
146 | }, | 142 | }, |
147 | 143 | ||
148 | //......................................................................... | 144 | //......................................................................... |
149 | 145 | ||
150 | 'updateRecordIndexData': function (aRecordReference, aKey, aValue) { | 146 | 'updateRecordIndexData': function (aRecordReference, aKey, aValue) { |
151 | return this.recordsData().setValue(this.recordsIndex()[aRecordReference]+'.'+aKey, aValue); | 147 | return this.recordsData().setValue(this.recordsIndex()[aRecordReference]+'.'+aKey, aValue); |
152 | }, | 148 | }, |
153 | 149 | ||
154 | //------------------------------------------------------------------------- | 150 | //------------------------------------------------------------------------- |
155 | 151 | ||
156 | 'getDirectLoginIndexData': function (aDirectLoginReference) { | 152 | 'getDirectLoginIndexData': function (aDirectLoginReference) { |
157 | return this.directLoginsData().getValue(this.directLoginsIndex()[aDirectLoginReference]); | 153 | return this.directLoginsData().getValue(this.directLoginsIndex()[aDirectLoginReference]); |
158 | }, | 154 | }, |
159 | 155 | ||
160 | 'setDirectLoginIndexData': function (aDirectLoginReference, aKey, aValue) { | 156 | 'setDirectLoginIndexData': function (aDirectLoginReference, aKey, aValue) { |
161 | //console.log("UserHeaderRecordIndex.setDirectLoginIndexData", aDirectLoginReference, this.directLoginsIndex()[aDirectLoginReference], aKey); | ||
162 | //if (MochiKit.Base.isUndefinedOrNull(this.directLoginsIndex()[aDirectLoginReference])) { | 157 | //if (MochiKit.Base.isUndefinedOrNull(this.directLoginsIndex()[aDirectLoginReference])) { |
163 | //throw "PIPPO"; | 158 | //throw "PIPPO"; |
164 | //} | 159 | //} |
165 | return this.directLoginsData().setValue(this.directLoginsIndex()[aDirectLoginReference] + '.' + aKey, aValue); | 160 | return this.directLoginsData().setValue(this.directLoginsIndex()[aDirectLoginReference] + '.' + aKey, aValue); |
166 | }, | 161 | }, |
167 | 162 | ||
168 | 'addDirectLoginIndexData': function (aDirectLoginReference) { | 163 | 'addDirectLoginIndexData': function (aDirectLoginReference) { |
169 | //console.log("UserHeaderRecordIndex.addDirectLoginIndexData", aDirectLoginReference, this.directLoginsIndex()[aDirectLoginReference]); | ||
170 | return this.directLoginsData().setValue(this.directLoginsIndex()[aDirectLoginReference], {}); | 164 | return this.directLoginsData().setValue(this.directLoginsIndex()[aDirectLoginReference], {}); |
171 | }, | 165 | }, |
172 | 166 | ||
173 | 'removeDirectLoginIndexData': function (aDirectLoginReference) { | 167 | 'removeDirectLoginIndexData': function (aDirectLoginReference) { |
174 | return this.directLoginsData().removeValue(this.directLoginsIndex()[aDirectLoginReference]) | 168 | return this.directLoginsData().removeValue(this.directLoginsIndex()[aDirectLoginReference]) |
175 | }, | 169 | }, |
176 | 170 | ||
177 | //------------------------------------------------------------------------- | 171 | //------------------------------------------------------------------------- |
178 | 172 | ||
179 | 'records': function () { | 173 | 'records': function () { |
180 | vardeferredResult; | 174 | vardeferredResult; |
181 | 175 | ||
182 | deferredResult = new Clipperz.Async.Deferred("User.Header.RecordIndex.records", {trace:false}); | 176 | deferredResult = new Clipperz.Async.Deferred("User.Header.RecordIndex.records", {trace:false}); |
183 | deferredResult.acquireLock(this.lock()); | 177 | deferredResult.acquireLock(this.lock()); |
184 | deferredResult.addCallback(MochiKit.Base.bind(function () { | 178 | deferredResult.addCallback(MochiKit.Base.bind(function () { |
185 | var innerDeferredResult; | 179 | var innerDeferredResult; |
186 | 180 | ||
187 | if (this._records == null) { | 181 | if (this._records == null) { |
188 | innerDeferredResult = new Clipperz.Async.Deferred("User.Header.RecordIndex.records <inner deferred>", {trace:false}); | 182 | innerDeferredResult = new Clipperz.Async.Deferred("User.Header.RecordIndex.records <inner deferred>", {trace:false}); |
189 | innerDeferredResult.collectResults({ | 183 | innerDeferredResult.collectResults({ |
190 | 'records': [ | 184 | 'records': [ |
191 | // MochiKit.Base.method(this.recordsData(), 'getObjectDataStore'), | 185 | // MochiKit.Base.method(this.recordsData(), 'getObjectDataStore'), |
192 | // MochiKit.Base.methodcaller('values') | 186 | // MochiKit.Base.methodcaller('values') |
193 | MochiKit.Base.method(this.recordsData(), 'values') | 187 | MochiKit.Base.method(this.recordsData(), 'values') |
194 | ], | 188 | ], |
195 | 'recordsStats': [ | 189 | 'recordsStats': [ |
196 | MochiKit.Base.method(this.recordsData(), 'getRemoteData'), | 190 | MochiKit.Base.method(this.recordsData(), 'getRemoteData'), |
197 | MochiKit.Base.itemgetter('recordsStats') | 191 | MochiKit.Base.itemgetter('recordsStats') |
198 | ], | 192 | ], |
199 | 'directLogins': [ | 193 | 'directLogins': [ |
200 | // MochiKit.Base.method(this.directLoginsData(), 'getObjectDataStore'), | 194 | // MochiKit.Base.method(this.directLoginsData(), 'getObjectDataStore'), |
201 | // MochiKit.Base.methodcaller('values') | 195 | // MochiKit.Base.methodcaller('values') |
202 | MochiKit.Base.method(this.directLoginsData(), 'values') | 196 | MochiKit.Base.method(this.directLoginsData(), 'values') |
203 | ] | 197 | ] |
204 | }) | 198 | }) |
205 | innerDeferredResult.addCallback(MochiKit.Base.bind(function (someData) { | 199 | innerDeferredResult.addCallback(MochiKit.Base.bind(function (someData) { |
206 | var indexReference; | 200 | var indexReference; |
207 | var recordsInvertedIndex; | 201 | var recordsInvertedIndex; |
208 | var directLoginsInvertedIndex; | 202 | var directLoginsInvertedIndex; |
209 | 203 | ||
210 | recordsInvertedIndex = Clipperz.PM.DataModel.User.Header.RecordIndex.invertIndex(this.recordsIndex()); | 204 | recordsInvertedIndex = Clipperz.PM.DataModel.User.Header.RecordIndex.invertIndex(this.recordsIndex()); |
211 | directLoginsInvertedIndex= Clipperz.PM.DataModel.User.Header.RecordIndex.invertIndex(this.directLoginsIndex()); | 205 | directLoginsInvertedIndex= Clipperz.PM.DataModel.User.Header.RecordIndex.invertIndex(this.directLoginsIndex()); |
212 | 206 | ||
213 | this._records = {}; | 207 | this._records = {}; |
214 | 208 | ||
215 | for (indexReference in someData['records']) { | 209 | for (indexReference in someData['records']) { |
216 | varrecord; | 210 | varrecord; |
217 | var reference; | 211 | var reference; |
218 | var updateDate; | 212 | var updateDate; |
219 | 213 | ||
220 | reference = recordsInvertedIndex[indexReference]; | 214 | reference = recordsInvertedIndex[indexReference]; |
221 | 215 | ||
222 | if (typeof(someData['recordsStats'][reference]) != 'undefined') { | 216 | if (typeof(someData['recordsStats'][reference]) != 'undefined') { |
223 | updateDate = someData['recordsStats'][reference]['updateDate']; | 217 | updateDate = someData['recordsStats'][reference]['updateDate']; |
224 | 218 | ||
225 | record = new Clipperz.PM.DataModel.Record({ | 219 | record = new Clipperz.PM.DataModel.Record({ |
226 | 'reference': reference, | 220 | 'reference': reference, |
227 | 'retrieveKeyFunction': MochiKit.Base.method(this, 'getRecordKey'), | 221 | 'retrieveKeyFunction': MochiKit.Base.method(this, 'getRecordKey'), |
228 | 'retrieveRemoteDataFunction':this.retrieveRecordDetailFunction(), | 222 | 'retrieveRemoteDataFunction':this.retrieveRecordDetailFunction(), |
229 | 223 | ||
230 | 'retrieveIndexDataFunction':MochiKit.Base.method(this, 'getRecordIndexData'), | 224 | 'retrieveIndexDataFunction':MochiKit.Base.method(this, 'getRecordIndexData'), |
231 | 'updateIndexDataFunction': MochiKit.Base.method(this, 'updateRecordIndexData'), | 225 | 'updateIndexDataFunction': MochiKit.Base.method(this, 'updateRecordIndexData'), |
232 | 'updateDate': updateDate, | 226 | 'updateDate': updateDate, |
233 | 227 | ||
234 | 'retrieveDirectLoginIndexDataFunction':MochiKit.Base.method(this, 'getDirectLoginIndexData'), | 228 | 'retrieveDirectLoginIndexDataFunction':MochiKit.Base.method(this, 'getDirectLoginIndexData'), |
235 | 'setDirectLoginIndexDataFunction': MochiKit.Base.method(this, 'setDirectLoginIndexData'), | 229 | 'setDirectLoginIndexDataFunction': MochiKit.Base.method(this, 'setDirectLoginIndexData'), |
236 | 'removeDirectLoginIndexDataFunction':MochiKit.Base.method(this, 'removeDirectLoginIndexData'), | 230 | 'removeDirectLoginIndexDataFunction':MochiKit.Base.method(this, 'removeDirectLoginIndexData'), |
237 | 231 | ||
238 | 'createNewDirectLoginFunction': MochiKit.Base.method(this, 'createNewDirectLogin') | 232 | 'createNewDirectLoginFunction': MochiKit.Base.method(this, 'createNewDirectLogin') |
239 | }); | 233 | }); |
240 | 234 | ||
241 | this._records[reference] = record; | 235 | this._records[reference] = record; |
242 | } else { | 236 | } else { |
243 | Clipperz.log("SKIPPING record " + reference + " as there are no stas associated - " + Clipperz.Base.serializeJSON(someData['records'][reference])); | 237 | Clipperz.log("SKIPPING record " + reference + " as there are no stas associated - " + Clipperz.Base.serializeJSON(someData['records'][reference])); |
244 | //# skip the record, as it seems it is not present in the DB | 238 | //# skip the record, as it seems it is not present in the DB |
245 | //updateDate = Clipperz.PM.Date.formatDateWithUTCFormat(new Date()); | 239 | //updateDate = Clipperz.PM.Date.formatDateWithUTCFormat(new Date()); |
246 | } | 240 | } |
247 | } | 241 | } |
248 | 242 | ||
249 | for (indexReference in someData['directLogins']) { | 243 | for (indexReference in someData['directLogins']) { |
250 | // vardirectLogin; | 244 | // vardirectLogin; |
251 | var reference; | 245 | var reference; |
252 | var record; | 246 | var record; |
253 | 247 | ||
254 | reference = directLoginsInvertedIndex[indexReference]; | 248 | reference = directLoginsInvertedIndex[indexReference]; |
255 | record = this._records[recordsInvertedIndex[someData['directLogins'][indexReference]['record']]]; | 249 | record = this._records[recordsInvertedIndex[someData['directLogins'][indexReference]['record']]]; |
256 | 250 | ||
257 | if (record != null) { | 251 | if (record != null) { |
258 | // directLogin = new Clipperz.PM.DataModel.DirectLogin({ | 252 | // directLogin = new Clipperz.PM.DataModel.DirectLogin({ |
259 | new Clipperz.PM.DataModel.DirectLogin({ | 253 | new Clipperz.PM.DataModel.DirectLogin({ |
260 | 'reference': reference, | 254 | 'reference': reference, |
261 | 'record': record | 255 | 'record': record |
262 | }); | 256 | }); |
263 | } else { | 257 | } else { |
264 | Clipperz.log("WARNING: DIRECT LOGIN without a matching RECORD!!"); | 258 | Clipperz.logWarning("WARNING: DIRECT LOGIN without a matching RECORD!!"); |
265 | //console.log("direct login data", someData['directLogins']); | ||
266 | //console.log("current direct login data", someData['directLogins'][indexReference]) | ||
267 | //console.log("reference", reference); | ||
268 | //console.log("record index", this.recordsIndex()); | ||
269 | //console.log("record inverted index", recordsInvertedIndex); | ||
270 | } | 259 | } |
271 | } | 260 | } |
272 | 261 | ||
273 | return this._records; | 262 | return this._records; |
274 | }, this)); | 263 | }, this)); |
275 | innerDeferredResult.callback(); | 264 | innerDeferredResult.callback(); |
276 | } else { | 265 | } else { |
277 | innerDeferredResult = MochiKit.Async.succeed(this._records); | 266 | innerDeferredResult = MochiKit.Async.succeed(this._records); |
278 | } | 267 | } |
279 | 268 | ||
280 | return innerDeferredResult; | 269 | return innerDeferredResult; |
281 | }, this)); | 270 | }, this)); |
282 | deferredResult.releaseLock(this.lock()); | 271 | deferredResult.releaseLock(this.lock()); |
283 | deferredResult.callback(); | 272 | deferredResult.callback(); |
284 | 273 | ||
285 | return deferredResult; | 274 | return deferredResult; |
286 | }, | 275 | }, |
287 | 276 | ||
288 | //------------------------------------------------------------------------- | 277 | //------------------------------------------------------------------------- |
289 | 278 | ||
290 | 'updateRecordIndexForNewRecord': function (aNewRecord) { | 279 | 'updateRecordIndexForNewRecord': function (aNewRecord) { |
291 | var newRecordIndex; | 280 | var newRecordIndex; |
292 | var recordReference; | 281 | var recordReference; |
293 | 282 | ||
294 | recordReference = aNewRecord.reference(); | 283 | recordReference = aNewRecord.reference(); |
295 | newRecordIndex = (MochiKit.Base.listMax(MochiKit.Base.map(MochiKit.Base.partial(MochiKit.Base.operator.mul, 1), MochiKit.Base.values(this.recordsIndex()))) + 1) + ''; | 284 | newRecordIndex = (MochiKit.Base.listMax(MochiKit.Base.map(MochiKit.Base.partial(MochiKit.Base.operator.mul, 1), MochiKit.Base.values(this.recordsIndex()))) + 1) + ''; |
296 | this.recordsIndex()[recordReference] = newRecordIndex; | 285 | this.recordsIndex()[recordReference] = newRecordIndex; |
297 | 286 | ||
298 | this.transientState().setValue('newlyCreatedRecordsIndex' + '.' + recordReference, newRecordIndex); | 287 | this.transientState().setValue('newlyCreatedRecordsIndex' + '.' + recordReference, newRecordIndex); |
299 | this.transientState().setValue('newlyCreatedRecordsReferences'+ '.' + recordReference, aNewRecord); | 288 | this.transientState().setValue('newlyCreatedRecordsReferences'+ '.' + recordReference, aNewRecord); |
300 | }, | 289 | }, |
301 | 290 | ||
302 | //......................................................................... | 291 | //......................................................................... |
303 | 292 | ||
304 | 'createNewRecord': function () { | 293 | 'createNewRecord': function () { |
305 | var deferredResult; | 294 | var deferredResult; |
306 | var newRecord; | 295 | var newRecord; |
307 | 296 | ||
308 | //console.log("#### new Clipperz.PM.DataModel.Record [4]"); | ||
309 | newRecord = new Clipperz.PM.DataModel.Record({ | 297 | newRecord = new Clipperz.PM.DataModel.Record({ |
310 | 'retrieveKeyFunction': MochiKit.Base.method(this, 'getRecordKey'), | 298 | 'retrieveKeyFunction': MochiKit.Base.method(this, 'getRecordKey'), |
311 | 'retrieveRemoteDataFunction':this.retrieveRecordDetailFunction(), | 299 | 'retrieveRemoteDataFunction':this.retrieveRecordDetailFunction(), |
312 | 300 | ||
313 | 'retrieveIndexDataFunction':MochiKit.Base.method(this, 'getRecordIndexData'), | 301 | 'retrieveIndexDataFunction':MochiKit.Base.method(this, 'getRecordIndexData'), |
314 | 'updateIndexDataFunction': MochiKit.Base.method(this, 'updateRecordIndexData'), | 302 | 'updateIndexDataFunction': MochiKit.Base.method(this, 'updateRecordIndexData'), |
315 | 'updateDate': Clipperz.PM.Date.formatDateWithUTCFormat(new Date()), | 303 | 'updateDate': Clipperz.PM.Date.formatDateWithUTCFormat(new Date()), |
316 | 304 | ||
317 | 'retrieveDirectLoginIndexDataFunction':MochiKit.Base.method(this, 'getDirectLoginIndexData'), | 305 | 'retrieveDirectLoginIndexDataFunction':MochiKit.Base.method(this, 'getDirectLoginIndexData'), |
318 | 'setDirectLoginIndexDataFunction': MochiKit.Base.method(this, 'setDirectLoginIndexData'), | 306 | 'setDirectLoginIndexDataFunction': MochiKit.Base.method(this, 'setDirectLoginIndexData'), |
319 | 'removeDirectLoginIndexDataFunction':MochiKit.Base.method(this, 'removeDirectLoginIndexData'), | 307 | 'removeDirectLoginIndexDataFunction':MochiKit.Base.method(this, 'removeDirectLoginIndexData'), |
320 | 308 | ||
321 | 'createNewDirectLoginFunction': MochiKit.Base.method(this, 'createNewDirectLogin') | 309 | 'createNewDirectLoginFunction': MochiKit.Base.method(this, 'createNewDirectLogin') |
322 | }); | 310 | }); |
323 | 311 | ||
324 | this.transientState().setValue('newRecordsReferences' + '.' + newRecord.reference(), newRecord); | 312 | this.transientState().setValue('newRecordsReferences' + '.' + newRecord.reference(), newRecord); |
325 | this.updateRecordIndexForNewRecord(newRecord); | 313 | this.updateRecordIndexForNewRecord(newRecord); |
326 | 314 | ||
327 | deferredResult = Clipperz.Async.callbacks("User.Header.RecordIndex.createNewRecord", [ | 315 | deferredResult = Clipperz.Async.callbacks("User.Header.RecordIndex.createNewRecord", [ |
328 | MochiKit.Base.method(this, 'records'), | 316 | MochiKit.Base.method(this, 'records'), |
329 | MochiKit.Base.partial(Clipperz.Async.setItemOnObject, newRecord.reference(), newRecord), | 317 | MochiKit.Base.partial(Clipperz.Async.setItemOnObject, newRecord.reference(), newRecord), |
330 | MochiKit.Base.method(this, 'setRecordKey', newRecord.reference(), Clipperz.PM.Crypto.randomKey()), | 318 | MochiKit.Base.method(this, 'setRecordKey', newRecord.reference(), Clipperz.PM.Crypto.randomKey()), |
331 | MochiKit.Base.method(newRecord, 'setLabel', ''), | 319 | MochiKit.Base.method(newRecord, 'setLabel', ''), |
332 | MochiKit.Base.partial(MochiKit.Async.succeed, newRecord) | 320 | MochiKit.Base.partial(MochiKit.Async.succeed, newRecord) |
333 | ], {trace:false}); | 321 | ], {trace:false}); |
334 | 322 | ||
335 | 323 | ||
336 | return deferredResult; | 324 | return deferredResult; |
337 | }, | 325 | }, |
338 | 326 | ||
339 | //------------------------------------------------------------------------- | 327 | //------------------------------------------------------------------------- |
340 | 328 | ||
341 | 'deleteRecord': function (aRecord) { | 329 | 'deleteRecord': function (aRecord) { |
342 | var deferredResult; | 330 | var deferredResult; |
343 | var recordReference; | 331 | var recordReference; |
344 | 332 | ||
345 | recordReference = aRecord.reference(); | 333 | recordReference = aRecord.reference(); |
346 | 334 | ||
347 | deferredResult = new Clipperz.Async.Deferred("User.Header.RecordIndex.deleteRecord", {trace:false}); | 335 | deferredResult = new Clipperz.Async.Deferred("User.Header.RecordIndex.deleteRecord", {trace:false}); |
348 | 336 | ||
349 | deferredResult.addMethod(aRecord, 'directLogins'); | 337 | deferredResult.addMethod(aRecord, 'directLogins'); |
350 | deferredResult.addCallback(MochiKit.Base.values); | 338 | deferredResult.addCallback(MochiKit.Base.values); |
351 | deferredResult.addCallback(MochiKit.Base.map, MochiKit.Base.method(this, 'removeDirectLogin')); | 339 | deferredResult.addCallback(MochiKit.Base.map, MochiKit.Base.method(this, 'removeDirectLogin')); |
352 | 340 | ||
353 | deferredResult.addMethod(this.recordsData(), 'removeValue', this.recordsIndex()[recordReference]); | 341 | deferredResult.addMethod(this.recordsData(), 'removeValue', this.recordsIndex()[recordReference]); |
354 | deferredResult.addCallback(MochiKit.Base.bind(function () { | 342 | deferredResult.addCallback(MochiKit.Base.bind(function () { |
355 | this.transientState().setValue('deleteRecordsIndex' + '.' + recordReference, this.recordsIndex()[recordReference]); | 343 | this.transientState().setValue('deleteRecordsIndex' + '.' + recordReference, this.recordsIndex()[recordReference]); |
356 | delete this.recordsIndex()[recordReference]; | 344 | delete this.recordsIndex()[recordReference]; |
357 | }, this)); | 345 | }, this)); |
358 | 346 | ||
359 | deferredResult.addMethod(this, 'records'); | 347 | deferredResult.addMethod(this, 'records'); |
360 | deferredResult.addCallback(MochiKit.Base.itemgetter(recordReference)); | 348 | deferredResult.addCallback(MochiKit.Base.itemgetter(recordReference)); |
361 | deferredResult.addMethod(this.transientState(), 'setValue', 'deleteRecordsReferences' + '.' + recordReference); | 349 | deferredResult.addMethod(this.transientState(), 'setValue', 'deleteRecordsReferences' + '.' + recordReference); |
362 | 350 | ||
363 | deferredResult.addMethod(this, 'records'); | 351 | deferredResult.addMethod(this, 'records'); |
364 | deferredResult.addCallback(MochiKit.Base.bind(function (someRecords) { | 352 | deferredResult.addCallback(MochiKit.Base.bind(function (someRecords) { |
365 | delete someRecords[recordReference]; | 353 | delete someRecords[recordReference]; |
366 | }, this)); | 354 | }, this)); |
367 | deferredResult.callback(); | 355 | deferredResult.callback(); |
368 | 356 | ||
369 | return deferredResult; | 357 | return deferredResult; |
370 | }, | 358 | }, |
371 | 359 | ||
372 | //========================================================================= | 360 | //========================================================================= |
373 | 361 | ||
374 | 'removeDirectLogin': function (aDirectLogin) { | 362 | 'removeDirectLogin': function (aDirectLogin) { |
375 | this.directLoginsData().removeValue(this.directLoginsIndex()[aDirectLogin.reference()]); | 363 | this.directLoginsData().removeValue(this.directLoginsIndex()[aDirectLogin.reference()]); |
376 | }, | 364 | }, |
377 | 365 | ||
378 | //------------------------------------------------------------------------- | 366 | //------------------------------------------------------------------------- |
379 | 367 | ||
380 | 'createNewDirectLogin': function (aRecord) { | 368 | 'createNewDirectLogin': function (aRecord) { |
381 | var newDirectLogin; | 369 | var newDirectLogin; |
382 | varnewDirectLoginIndexValue; | 370 | varnewDirectLoginIndexValue; |
383 | 371 | ||
384 | newDirectLogin = new Clipperz.PM.DataModel.DirectLogin({record:aRecord}); | 372 | newDirectLogin = new Clipperz.PM.DataModel.DirectLogin({record:aRecord}); |
385 | newDirectLoginIndexValue = MochiKit.Base.listMax(MochiKit.Base.map(function (aValue) { return aValue * 1; }, MochiKit.Base.values(this.directLoginsIndex()))) + 1; | 373 | newDirectLoginIndexValue = MochiKit.Base.listMax(MochiKit.Base.map(function (aValue) { return aValue * 1; }, MochiKit.Base.values(this.directLoginsIndex()))) + 1; |
386 | 374 | ||
387 | this.transientState().setValue('newDirectLoginReferences' + '.' + newDirectLogin.reference(), newDirectLogin); | 375 | this.transientState().setValue('newDirectLoginReferences' + '.' + newDirectLogin.reference(), newDirectLogin); |
388 | 376 | ||
389 | //console.log("UserHeaderRecordIndex.createNewDirectLogin [1]", newDirectLogin.reference(), newDirectLoginIndexValue); | ||
390 | this.directLoginsIndex()[newDirectLogin.reference()] = newDirectLoginIndexValue; | 377 | this.directLoginsIndex()[newDirectLogin.reference()] = newDirectLoginIndexValue; |
391 | //console.log("UserHeaderRecordIndex.createNewDirectLogin [2]", newDirectLogin.reference(), this.directLoginsIndex()[newDirectLogin.reference()]); | ||
392 | this.directLoginsData().setValue(this.directLoginsIndex()[newDirectLogin.reference()], {'record': this.recordsIndex()[aRecord.reference()]}); | 378 | this.directLoginsData().setValue(this.directLoginsIndex()[newDirectLogin.reference()], {'record': this.recordsIndex()[aRecord.reference()]}); |
393 | 379 | ||
394 | return newDirectLogin; | 380 | return newDirectLogin; |
395 | }, | 381 | }, |
396 | 382 | ||
397 | //========================================================================= | 383 | //========================================================================= |
398 | 384 | ||
399 | 'deleteAllCleanTextData': function () { | 385 | 'deleteAllCleanTextData': function () { |
400 | return Clipperz.Async.callbacks("User.Header.RecordIndex.deleteAllCleanTextData", [ | 386 | return Clipperz.Async.callbacks("User.Header.RecordIndex.deleteAllCleanTextData", [ |
401 | // MochiKit.Base.method(this, 'records'), | 387 | // MochiKit.Base.method(this, 'records'), |
402 | // MochiKit.Base.values, | 388 | // MochiKit.Base.values, |
403 | // MochiKit.Base.partial(MochiKit.Base.map, MochiKit.Base.methodcaller('deleteAllCleanTextData')), | 389 | // MochiKit.Base.partial(MochiKit.Base.map, MochiKit.Base.methodcaller('deleteAllCleanTextData')), |
404 | 390 | ||
405 | MochiKit.Base.method(this, 'recordsData'), | 391 | MochiKit.Base.method(this, 'recordsData'), |
406 | MochiKit.Base.methodcaller('deleteAllCleanTextData'), | 392 | MochiKit.Base.methodcaller('deleteAllCleanTextData'), |
407 | MochiKit.Base.method(this, 'directLoginsData'), | 393 | MochiKit.Base.method(this, 'directLoginsData'), |
408 | MochiKit.Base.methodcaller('deleteAllCleanTextData') | 394 | MochiKit.Base.methodcaller('deleteAllCleanTextData') |
409 | ], {trace:false}); | 395 | ], {trace:false}); |
410 | }, | 396 | }, |
411 | 397 | ||
412 | //------------------------------------------------------------------------- | 398 | //------------------------------------------------------------------------- |
413 | 399 | ||
414 | 'hasAnyCleanTextData': function () { | 400 | 'hasAnyCleanTextData': function () { |
415 | var deferredResult; | 401 | var deferredResult; |
416 | 402 | ||
417 | deferredResult = new Clipperz.Async.Deferred({trace:false}); | 403 | deferredResult = new Clipperz.Async.Deferred({trace:false}); |
418 | deferredResult.collectResults({ | 404 | deferredResult.collectResults({ |
419 | 'recordsData': [ | 405 | 'recordsData': [ |
420 | MochiKit.Base.method(this, 'recordsData'), | 406 | MochiKit.Base.method(this, 'recordsData'), |
421 | MochiKit.Base.methodcaller('hasAnyCleanTextData') | 407 | MochiKit.Base.methodcaller('hasAnyCleanTextData') |
422 | ], | 408 | ], |
423 | 'directLoginsData':[ | 409 | 'directLoginsData':[ |
424 | MochiKit.Base.method(this, 'directLoginsData'), | 410 | MochiKit.Base.method(this, 'directLoginsData'), |
425 | MochiKit.Base.methodcaller('hasAnyCleanTextData') | 411 | MochiKit.Base.methodcaller('hasAnyCleanTextData') |
426 | ], | 412 | ], |
427 | // 'records': [ | 413 | // 'records': [ |
428 | // MochiKit.Base.method(this, 'records'), | 414 | // MochiKit.Base.method(this, 'records'), |
429 | // MochiKit.Base.values, | 415 | // MochiKit.Base.values, |
430 | // MochiKit.Base.partial(MochiKit.Base.map, MochiKit.Base.methodcaller('hasAnyCleanTextData')), | 416 | // MochiKit.Base.partial(MochiKit.Base.map, MochiKit.Base.methodcaller('hasAnyCleanTextData')), |
431 | // Clipperz.Async.collectAll | 417 | // Clipperz.Async.collectAll |
432 | // ] | 418 | // ] |
433 | }); | 419 | }); |
434 | //deferredResult.addCallback(function (aValue) { console.log("USER.Header.RecordIndex.hasAnyCleanTextData", aValue); return aValue}); | ||
435 | 420 | ||
436 | // deferredResult.addCallback(MochiKit.Base.values); | 421 | // deferredResult.addCallback(MochiKit.Base.values); |
437 | // deferredResult.addCallback(MochiKit.Base.flattenArguments); | 422 | // deferredResult.addCallback(MochiKit.Base.flattenArguments); |
438 | // deferredResult.addCallback(function(someValues) { | 423 | // deferredResult.addCallback(function(someValues) { |
439 | // return MochiKit.Iter.some(someValues, MochiKit.Base.operator.identity); | 424 | // return MochiKit.Iter.some(someValues, MochiKit.Base.operator.identity); |
440 | // }); | 425 | // }); |
441 | deferredResult.addCallback(Clipperz.Async.or); | 426 | deferredResult.addCallback(Clipperz.Async.or); |
442 | 427 | ||
443 | deferredResult.callback(); | 428 | deferredResult.callback(); |
444 | 429 | ||
445 | return deferredResult; | 430 | return deferredResult; |
446 | }, | 431 | }, |
447 | 432 | ||
448 | //------------------------------------------------------------------------- | 433 | //------------------------------------------------------------------------- |
449 | 434 | ||
450 | 'hasPendingChanges': function () { | 435 | 'hasPendingChanges': function () { |
451 | vardeferredResult; | 436 | vardeferredResult; |
452 | 437 | ||
453 | deferredResult = new Clipperz.Async.Deferred("User.Header.RecordIndex.hasPendingChanges", {trace:false}); | 438 | deferredResult = new Clipperz.Async.Deferred("User.Header.RecordIndex.hasPendingChanges", {trace:false}); |
454 | deferredResult.collectResults({ | 439 | deferredResult.collectResults({ |
455 | 'recordsData': [ | 440 | 'recordsData': [ |
456 | MochiKit.Base.method(this, 'recordsData'), | 441 | MochiKit.Base.method(this, 'recordsData'), |
457 | MochiKit.Base.methodcaller('hasPendingChanges') | 442 | MochiKit.Base.methodcaller('hasPendingChanges') |
458 | ], | 443 | ], |
459 | 'directLoginsData': [ | 444 | 'directLoginsData': [ |
460 | MochiKit.Base.method(this, 'directLoginsData'), | 445 | MochiKit.Base.method(this, 'directLoginsData'), |
461 | MochiKit.Base.methodcaller('hasPendingChanges') | 446 | MochiKit.Base.methodcaller('hasPendingChanges') |
462 | ] | 447 | ] |
463 | }); | 448 | }); |
464 | //deferredResult.addCallback(function (aValue) { console.log("UserHeaderIndex.hasPendingResults", aValue); return aValue; }); | ||
465 | deferredResult.addCallback(Clipperz.Async.or); | 449 | deferredResult.addCallback(Clipperz.Async.or); |
466 | // deferredResult.addCallback(MochiKit.Base.values); | 450 | // deferredResult.addCallback(MochiKit.Base.values); |
467 | // deferredResult.addCallback(MochiKit.Base.flattenArguments); | 451 | // deferredResult.addCallback(MochiKit.Base.flattenArguments); |
468 | // deferredResult.addCallback(function(someValues) { | 452 | // deferredResult.addCallback(function(someValues) { |
469 | // return MochiKit.Iter.some(someValues, MochiKit.Base.operator.identity); | 453 | // return MochiKit.Iter.some(someValues, MochiKit.Base.operator.identity); |
470 | // }); | 454 | // }); |
471 | deferredResult.callback(); | 455 | deferredResult.callback(); |
472 | 456 | ||
473 | return deferredResult; | 457 | return deferredResult; |
474 | }, | 458 | }, |
475 | 459 | ||
476 | //------------------------------------------------------------------------- | 460 | //------------------------------------------------------------------------- |
477 | 461 | ||
478 | 'commitTransientState': function () { | 462 | 'commitTransientState': function () { |
479 | var deferredResult; | 463 | var deferredResult; |
480 | 464 | ||
481 | deferredResut = Clipperz.Async.callbacks("User.Header.RecordIndex.commitTransientState", [ | 465 | deferredResut = Clipperz.Async.callbacks("User.Header.RecordIndex.commitTransientState", [ |
482 | MochiKit.Base.method(this, 'recordsData'), | 466 | MochiKit.Base.method(this, 'recordsData'), |
483 | MochiKit.Base.methodcaller('commitTransientState'), | 467 | MochiKit.Base.methodcaller('commitTransientState'), |
484 | 468 | ||
485 | MochiKit.Base.method(this, 'directLoginsData'), | 469 | MochiKit.Base.method(this, 'directLoginsData'), |
486 | MochiKit.Base.methodcaller('commitTransientState'), | 470 | MochiKit.Base.methodcaller('commitTransientState'), |
487 | 471 | ||
488 | MochiKit.Base.method(this, 'resetTransientState', true) | 472 | MochiKit.Base.method(this, 'resetTransientState', true) |
489 | ], {trace:false}); | 473 | ], {trace:false}); |
490 | 474 | ||
491 | return deferredResult; | 475 | return deferredResult; |
492 | }, | 476 | }, |
493 | 477 | ||
494 | //------------------------------------------------------------------------- | 478 | //------------------------------------------------------------------------- |
495 | 479 | ||
496 | 'revertChanges': function () { | 480 | 'revertChanges': function () { |
497 | return Clipperz.Async.callbacks("User.Header.RecordIndex.revertChanges", [ | 481 | return Clipperz.Async.callbacks("User.Header.RecordIndex.revertChanges", [ |
498 | MochiKit.Base.method(this, 'recordsData'), | 482 | MochiKit.Base.method(this, 'recordsData'), |
499 | MochiKit.Base.methodcaller('revertChanges'), | 483 | MochiKit.Base.methodcaller('revertChanges'), |
500 | 484 | ||
501 | // MochiKit.Base.method(this, 'directLoginsData'), | 485 | // MochiKit.Base.method(this, 'directLoginsData'), |
502 | // MochiKit.Base.methodcaller('revertChanges'), | 486 | // MochiKit.Base.methodcaller('revertChanges'), |
503 | 487 | ||
504 | MochiKit.Base.method(this, 'records'), | 488 | MochiKit.Base.method(this, 'records'), |
505 | MochiKit.Base.bind(function (someRecords) { | 489 | MochiKit.Base.bind(function (someRecords) { |
506 | varrecordReference; | 490 | varrecordReference; |
507 | 491 | ||
508 | for (recordReference in this.transientState().getValue('deleteRecordsReferences')) { | 492 | for (recordReference in this.transientState().getValue('deleteRecordsReferences')) { |
509 | this.recordsIndex()[recordReference] = this.transientState().getValue('deleteRecordsIndex' + '.' + recordReference); | 493 | this.recordsIndex()[recordReference] = this.transientState().getValue('deleteRecordsIndex' + '.' + recordReference); |
510 | someRecords[recordReference] = this.transientState().getValue('deleteRecordsReferences' + '.' + recordReference); | 494 | someRecords[recordReference] = this.transientState().getValue('deleteRecordsReferences' + '.' + recordReference); |
511 | } | 495 | } |
512 | 496 | ||
513 | for (recordReference in this.transientState().getValue('newRecordsReferences')) { | 497 | for (recordReference in this.transientState().getValue('newRecordsReferences')) { |
514 | delete this.recordsIndex()[recordReference]; | 498 | delete this.recordsIndex()[recordReference]; |
515 | delete someRecords[recordReference]; | 499 | delete someRecords[recordReference]; |
516 | } | 500 | } |
517 | }, this), | 501 | }, this), |
518 | 502 | ||
519 | // MochiKit.Base.method(this, 'directLogins'), | 503 | // MochiKit.Base.method(this, 'directLogins'), |
520 | MochiKit.Base.bind(function () { | 504 | MochiKit.Base.bind(function () { |
521 | vardirectLoginReference; | 505 | vardirectLoginReference; |
522 | 506 | ||
523 | //this.transientState().setValue('newDirectLoginReferences' + '.' + newDirectLogin.reference(), newDirectLogin); | 507 | //this.transientState().setValue('newDirectLoginReferences' + '.' + newDirectLogin.reference(), newDirectLogin); |
524 | // | 508 | // |
525 | //this.directLoginsIndex()[newDirectLogin.reference()] = newDirectLoginIndexValue; | 509 | //this.directLoginsIndex()[newDirectLogin.reference()] = newDirectLoginIndexValue; |
526 | //this.directLoginsData().setValue(this.directLoginsIndex()[newDirectLogin.reference()], {'record': this.recordsIndex()[aRecord.reference()]}); | 510 | //this.directLoginsData().setValue(this.directLoginsIndex()[newDirectLogin.reference()], {'record': this.recordsIndex()[aRecord.reference()]}); |
527 | 511 | ||
528 | 512 | ||
529 | // for (directLoginReference in this.transientState().getValue('deleteDirectLoginReferences')) { | 513 | // for (directLoginReference in this.transientState().getValue('deleteDirectLoginReferences')) { |
530 | // someDirectLogins[directLoginReference] = this.transientState().getValue('deleteDirectLoginReferences' + '.' + recordReference); | 514 | // someDirectLogins[directLoginReference] = this.transientState().getValue('deleteDirectLoginReferences' + '.' + recordReference); |
531 | // } | 515 | // } |
532 | 516 | ||
533 | for (directLoginReference in this.transientState().getValue('newDirectLoginReferences')) { | 517 | for (directLoginReference in this.transientState().getValue('newDirectLoginReferences')) { |
534 | // this.directLoginsData().removeValue(this.directLoginsIndex()[directLoginReference]); | 518 | // this.directLoginsData().removeValue(this.directLoginsIndex()[directLoginReference]); |
535 | delete this.directLoginsIndex()[directLoginReference]; | 519 | delete this.directLoginsIndex()[directLoginReference]; |
536 | } | 520 | } |
537 | }, this), | 521 | }, this), |
538 | 522 | ||
539 | MochiKit.Base.method(this, 'directLoginsData'), | 523 | MochiKit.Base.method(this, 'directLoginsData'), |
540 | MochiKit.Base.methodcaller('revertChanges'), | 524 | MochiKit.Base.methodcaller('revertChanges'), |
541 | 525 | ||
542 | MochiKit.Base.method(this, 'resetTransientState', false) | 526 | MochiKit.Base.method(this, 'resetTransientState', false) |
543 | ], {trace:false}); | 527 | ], {trace:false}); |
544 | }, | 528 | }, |
545 | 529 | ||
546 | //------------------------------------------------------------------------- | 530 | //------------------------------------------------------------------------- |
547 | 531 | ||
548 | 'prepareRemoteDataWithKey': function (aKey) { | 532 | 'prepareRemoteDataWithKey': function (aKey) { |
549 | // "records": { | 533 | // "records": { |
550 | // "index": { | 534 | // "index": { |
551 | // "eeda70e0392261967bda71c3764da78989c45bbd2bb7be6b941b90f81d9b81b5": "0", | 535 | // "eeda70e0392261967bda71c3764da78989c45bbd2bb7be6b941b90f81d9b81b5": "0", |
552 | // "13a5e52976337ab210903cd04872588e1b21fb72bc183e91aa25c494b8138551": "1", | 536 | // "13a5e52976337ab210903cd04872588e1b21fb72bc183e91aa25c494b8138551": "1", |
553 | // ... | 537 | // ... |
554 | // "465a067a0bd2b470fa834de5397e38494de0c7707938262fae3427932e219744": "18", | 538 | // "465a067a0bd2b470fa834de5397e38494de0c7707938262fae3427932e219744": "18", |
555 | // "4fd1dc2ca860b7fb47cef10a84edb3270da05510b0a30a6b0b083898712d4b9e": "19" | 539 | // "4fd1dc2ca860b7fb47cef10a84edb3270da05510b0a30a6b0b083898712d4b9e": "19" |
556 | // }, | 540 | // }, |
557 | // "data": "n+AzGEEQXaSRSY4d ... BDypotrXgPo94uHfoXvGFzwCn8w=" | 541 | // "data": "n+AzGEEQXaSRSY4d ... BDypotrXgPo94uHfoXvGFzwCn8w=" |
558 | // }, | 542 | // }, |
559 | // "directLogins": { | 543 | // "directLogins": { |
560 | // "index": { | 544 | // "index": { |
561 | // "61e87fdc4f1d9112e3b30c1f6812d095dcdb24f014c83319091eb6c9899ec348":"0", | 545 | // "61e87fdc4f1d9112e3b30c1f6812d095dcdb24f014c83319091eb6c9899ec348":"0", |
562 | // "989593d4c48929f0c8f1581aa96969c622807e99619ed4732026e967530a68ad":"1", | 546 | // "989593d4c48929f0c8f1581aa96969c622807e99619ed4732026e967530a68ad":"1", |
563 | // ... | 547 | // ... |
564 | // "cb9ae0bba1957075ccdbfd3b3481704d62087687a2ac7c411a4f07d444bde0f7":"17", | 548 | // "cb9ae0bba1957075ccdbfd3b3481704d62087687a2ac7c411a4f07d444bde0f7":"17", |
565 | // "7e1d069b7fa57c03bd7bf48807520feb953157834503aaff8c9d493f37dea69d":"18" | 549 | // "7e1d069b7fa57c03bd7bf48807520feb953157834503aaff8c9d493f37dea69d":"18" |
566 | // }, | 550 | // }, |
567 | // "data":"5YG9KKU/OZ5guUgFlms6k1 ... ZG/5Fn0uN+LoAsNfHm+EE62x" | 551 | // "data":"5YG9KKU/OZ5guUgFlms6k1 ... ZG/5Fn0uN+LoAsNfHm+EE62x" |
568 | // }, | 552 | // }, |
569 | 553 | ||
570 | var deferredResult; | 554 | var deferredResult; |
571 | var result; | 555 | var result; |
572 | 556 | ||
573 | //console.log("recordsIndex", this.recordsIndex()); | ||
574 | result = {}; | 557 | result = {}; |
575 | 558 | ||
576 | deferredResult = new Clipperz.Async.Deferred("User.Header.RecordIndex.prepareRemoteDataWithKey", {trace:false}); | 559 | deferredResult = new Clipperz.Async.Deferred("User.Header.RecordIndex.prepareRemoteDataWithKey", {trace:false}); |
577 | deferredResult.collectResults({ | 560 | deferredResult.collectResults({ |
578 | 'index':MochiKit.Base.partial(MochiKit.Async.succeed, this.recordsIndex()), | 561 | 'index':MochiKit.Base.partial(MochiKit.Async.succeed, this.recordsIndex()), |
579 | 'data': [ | 562 | 'data': [ |
580 | MochiKit.Base.method(this.recordsData(), 'prepareRemoteDataWithKey', aKey), | 563 | MochiKit.Base.method(this.recordsData(), 'prepareRemoteDataWithKey', aKey), |
581 | MochiKit.Base.itemgetter('data') | 564 | MochiKit.Base.itemgetter('data') |
582 | ] | 565 | ] |
583 | }); | 566 | }); |
584 | deferredResult.addCallback(Clipperz.Async.setItem, result, 'records'); | 567 | deferredResult.addCallback(Clipperz.Async.setItem, result, 'records'); |
585 | 568 | ||
586 | deferredResult.collectResults({ | 569 | deferredResult.collectResults({ |
587 | 'index':MochiKit.Base.partial(MochiKit.Async.succeed, this.directLoginsIndex()), | 570 | 'index':MochiKit.Base.partial(MochiKit.Async.succeed, this.directLoginsIndex()), |
588 | 'data': [ | 571 | 'data': [ |
589 | MochiKit.Base.method(this.directLoginsData(), 'prepareRemoteDataWithKey', aKey), | 572 | MochiKit.Base.method(this.directLoginsData(), 'prepareRemoteDataWithKey', aKey), |
590 | MochiKit.Base.itemgetter('data') | 573 | MochiKit.Base.itemgetter('data') |
591 | ] | 574 | ] |
592 | }); | 575 | }); |
593 | deferredResult.addCallback(Clipperz.Async.setItem, result, 'directLogins'); | 576 | deferredResult.addCallback(Clipperz.Async.setItem, result, 'directLogins'); |
594 | 577 | ||
595 | deferredResult.addCallback(MochiKit.Async.succeed, result); | 578 | deferredResult.addCallback(MochiKit.Async.succeed, result); |
596 | 579 | ||
597 | deferredResult.callback(); | 580 | deferredResult.callback(); |
598 | 581 | ||
599 | return deferredResult; | 582 | return deferredResult; |
600 | }, | 583 | }, |
601 | 584 | ||
602 | //------------------------------------------------------------------------- | 585 | //------------------------------------------------------------------------- |
603 | 586 | ||
604 | 'updateRecordKeyAndPrepareRemoteData': function (aRecord) { | 587 | 'updateRecordKeyAndPrepareRemoteData': function (aRecord) { |
605 | varnewRecordKey; | 588 | varnewRecordKey; |
606 | var deferredResult; | 589 | var deferredResult; |
607 | 590 | ||
608 | newRecordKey = Clipperz.PM.Crypto.randomKey(); | 591 | newRecordKey = Clipperz.PM.Crypto.randomKey(); |
609 | 592 | ||
610 | deferredResult = new Clipperz.Async.Deferred("User.Header.RecordIndex.updateRecordKeyAndPrepareRemoteData", {trace:false}); | 593 | deferredResult = new Clipperz.Async.Deferred("User.Header.RecordIndex.updateRecordKeyAndPrepareRemoteData", {trace:false}); |
611 | deferredResult.addCallback(MochiKit.Base.method(aRecord, 'prepareRemoteDataWithKey', newRecordKey)); | 594 | deferredResult.addCallback(MochiKit.Base.method(aRecord, 'prepareRemoteDataWithKey', newRecordKey)); |
612 | deferredResult.addCallbackPass(MochiKit.Base.method(this, 'setRecordKey', aRecord.reference(), newRecordKey)); | 595 | deferredResult.addCallbackPass(MochiKit.Base.method(this, 'setRecordKey', aRecord.reference(), newRecordKey)); |
613 | deferredResult.callback(); | 596 | deferredResult.callback(); |
614 | 597 | ||
615 | return deferredResult; | 598 | return deferredResult; |
616 | }, | 599 | }, |
617 | 600 | ||
618 | //......................................................................... | 601 | //......................................................................... |
619 | 602 | ||
620 | 'removeNewRecordWithNoChanges': function (aRecord) { | 603 | 'removeNewRecordWithNoChanges': function (aRecord) { |
621 | var deferredResult; | 604 | var deferredResult; |
622 | var recordReference; | 605 | var recordReference; |
623 | 606 | ||
624 | recordReference = aRecord.reference(); | 607 | recordReference = aRecord.reference(); |
625 | 608 | ||
626 | deferredResult = new Clipperz.Async.Deferred("User.Header.RecordIndex.removeNewRecordWithNoChanges", {trace:false}); | 609 | deferredResult = new Clipperz.Async.Deferred("User.Header.RecordIndex.removeNewRecordWithNoChanges", {trace:false}); |
627 | 610 | ||
628 | deferredResult.addMethod(this.recordsData(), 'removeValue', this.recordsIndex()[recordReference]); | 611 | deferredResult.addMethod(this.recordsData(), 'removeValue', this.recordsIndex()[recordReference]); |
629 | deferredResult.addCallback(MochiKit.Base.bind(function () { | 612 | deferredResult.addCallback(MochiKit.Base.bind(function () { |
630 | delete this.recordsIndex()[recordReference]; | 613 | delete this.recordsIndex()[recordReference]; |
631 | }, this)); | 614 | }, this)); |
632 | 615 | ||
633 | deferredResult.addMethod(this, 'records'); | 616 | deferredResult.addMethod(this, 'records'); |
634 | deferredResult.addCallback(MochiKit.Base.bind(function (someRecords) { | 617 | deferredResult.addCallback(MochiKit.Base.bind(function (someRecords) { |
635 | delete someRecords[recordReference]; | 618 | delete someRecords[recordReference]; |
636 | }, this)); | 619 | }, this)); |
637 | deferredResult.callback(); | 620 | deferredResult.callback(); |
638 | 621 | ||
639 | return deferredResult; | 622 | return deferredResult; |
640 | }, | 623 | }, |
641 | 624 | ||
642 | //......................................................................... | 625 | //......................................................................... |
643 | 626 | ||
644 | 'prepareRemoteDataForChangedRecords': function () { | 627 | 'prepareRemoteDataForChangedRecords': function () { |
645 | vardeferredResult; | 628 | vardeferredResult; |
646 | varresult; | 629 | varresult; |
647 | 630 | ||
648 | result = {}; | 631 | result = {}; |
649 | 632 | ||
650 | deferredResult = new Clipperz.Async.Deferred("User.Header.RecordIndex.prepareRemoteDataForChangedRecords", {trace:false}); | 633 | deferredResult = new Clipperz.Async.Deferred("User.Header.RecordIndex.prepareRemoteDataForChangedRecords", {trace:false}); |
651 | 634 | ||
652 | deferredResult.addMethod(this, 'records'); | 635 | deferredResult.addMethod(this, 'records'); |
653 | deferredResult.addCallback(MochiKit.Base.values); | 636 | deferredResult.addCallback(MochiKit.Base.values); |
654 | deferredResult.addCallback(Clipperz.Async.deferredFilter, MochiKit.Base.methodcaller('isBrandNewWithNoPendingChanges')); | 637 | deferredResult.addCallback(Clipperz.Async.deferredFilter, MochiKit.Base.methodcaller('isBrandNewWithNoPendingChanges')); |
655 | deferredResult.addCallback(MochiKit.Base.map, MochiKit.Base.method(this, 'removeNewRecordWithNoChanges')); | 638 | deferredResult.addCallback(MochiKit.Base.map, MochiKit.Base.method(this, 'removeNewRecordWithNoChanges')); |
656 | 639 | ||
657 | deferredResult.addMethod(this, 'records'); | 640 | deferredResult.addMethod(this, 'records'); |
658 | deferredResult.addCallback(MochiKit.Base.values); | 641 | deferredResult.addCallback(MochiKit.Base.values); |
659 | deferredResult.addCallback(Clipperz.Async.deferredFilter, MochiKit.Base.methodcaller('hasPendingChanges')); | 642 | deferredResult.addCallback(Clipperz.Async.deferredFilter, MochiKit.Base.methodcaller('hasPendingChanges')); |
660 | deferredResult.addCallback(MochiKit.Base.map, MochiKit.Base.method(this, 'updateRecordKeyAndPrepareRemoteData')); | 643 | deferredResult.addCallback(MochiKit.Base.map, MochiKit.Base.method(this, 'updateRecordKeyAndPrepareRemoteData')); |
661 | deferredResult.addCallback(Clipperz.Async.collectAll); | 644 | deferredResult.addCallback(Clipperz.Async.collectAll); |
662 | 645 | ||
663 | deferredResult.addCallback(Clipperz.Async.deferredIf("updated records != null", [ | 646 | deferredResult.addCallback(Clipperz.Async.deferredIf("updated records != null", [ |
664 | MochiKit.Base.operator.identity | 647 | MochiKit.Base.operator.identity |
665 | ], [ | 648 | ], [ |
666 | MochiKit.Base.partial(MochiKit.Async.succeed, []) | 649 | MochiKit.Base.partial(MochiKit.Async.succeed, []) |
667 | ])); | 650 | ])); |
668 | deferredResult.addCallback(Clipperz.Async.setItem, result, 'updated'); | 651 | deferredResult.addCallback(Clipperz.Async.setItem, result, 'updated'); |
669 | 652 | ||