author | Giulio Cesare Solaroli <giulio.cesare@solaroli.it> | 2011-10-03 16:04:12 (UTC) |
---|---|---|
committer | Giulio Cesare Solaroli <giulio.cesare@solaroli.it> | 2011-10-03 16:04:12 (UTC) |
commit | 541bb378ddece2eab135a8066a16994e94436dea (patch) (unidiff) | |
tree | ff160ea3e26f7fe07fcfd401387c5a0232ca715e /frontend/gamma/js/Clipperz/PM/DataModel/Record.Version.js | |
parent | 1bf431fd3d45cbdf4afa3e12afefe5d24f4d3bc7 (diff) | |
parent | ecad5e895831337216544e81f1a467e0c68c4a6a (diff) | |
download | clipperz-541bb378ddece2eab135a8066a16994e94436dea.zip clipperz-541bb378ddece2eab135a8066a16994e94436dea.tar.gz clipperz-541bb378ddece2eab135a8066a16994e94436dea.tar.bz2 |
Merge pull request #1 from gcsolaroli/master
First version of the restructured repository
Diffstat (limited to 'frontend/gamma/js/Clipperz/PM/DataModel/Record.Version.js') (more/less context) (ignore whitespace changes)
-rw-r--r-- | frontend/gamma/js/Clipperz/PM/DataModel/Record.Version.js | 336 |
1 files changed, 336 insertions, 0 deletions
diff --git a/frontend/gamma/js/Clipperz/PM/DataModel/Record.Version.js b/frontend/gamma/js/Clipperz/PM/DataModel/Record.Version.js new file mode 100644 index 0000000..6e50f8e --- a/dev/null +++ b/frontend/gamma/js/Clipperz/PM/DataModel/Record.Version.js | |||
@@ -0,0 +1,336 @@ | |||
1 | /* | ||
2 | |||
3 | Copyright 2008-2011 Clipperz Srl | ||
4 | |||
5 | This file is part of Clipperz's Javascript Crypto Library. | ||
6 | Javascript Crypto Library provides web developers with an extensive | ||
7 | and efficient set of cryptographic functions. The library aims to | ||
8 | obtain maximum execution speed while preserving modularity and | ||
9 | reusability. | ||
10 | For further information about its features and functionalities please | ||
11 | refer to http://www.clipperz.com | ||
12 | |||
13 | * Javascript Crypto Library is free software: you can redistribute | ||
14 | it and/or modify it under the terms of the GNU Affero General Public | ||
15 | License as published by the Free Software Foundation, either version | ||
16 | 3 of the License, or (at your option) any later version. | ||
17 | |||
18 | * Javascript Crypto Library is distributed in the hope that it will | ||
19 | be useful, but WITHOUT ANY WARRANTY; without even the implied | ||
20 | warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. | ||
21 | See the GNU Affero General Public License for more details. | ||
22 | |||
23 | * You should have received a copy of the GNU Affero General Public | ||
24 | License along with Javascript Crypto Library. If not, see | ||
25 | <http://www.gnu.org/licenses/>. | ||
26 | |||
27 | */ | ||
28 | |||
29 | try { if (typeof(Clipperz.PM.DataModel.Record) == 'undefined') { throw ""; }} catch (e) { | ||
30 | throw "Clipperz.PM.DataModel.Record.Version depends on Clipperz.PM.DataModel.Record!"; | ||
31 | } | ||
32 | |||
33 | Clipperz.PM.DataModel.Record.Version = function(args) { | ||
34 | //console.log(">>> Record.new"); | ||
35 | Clipperz.PM.DataModel.Record.Version.superclass.constructor.apply(this, arguments); | ||
36 | |||
37 | this._getVersionFunction = args.getVersion|| Clipperz.Base.exception.raise('MandatoryParameter'); | ||
38 | this._fields = null; | ||
39 | |||
40 | return this; | ||
41 | } | ||
42 | |||
43 | |||
44 | Clipperz.Base.extend(Clipperz.PM.DataModel.Record.Version, Clipperz.PM.DataModel.EncryptedRemoteObject, { | ||
45 | |||
46 | 'toString': function() { | ||
47 | return "Record.Version (" + this.reference() + ")"; | ||
48 | }, | ||
49 | |||
50 | //------------------------------------------------------------------------- | ||
51 | |||
52 | 'reference': function () { | ||
53 | return this._reference; | ||
54 | }, | ||
55 | |||
56 | //------------------------------------------------------------------------- | ||
57 | /* | ||
58 | 'hasPendingChanges': function () { | ||
59 | var deferredResult; | ||
60 | |||
61 | deferredResult = new Clipperz.Async.Deferred("Clipperz.PM.DataModel.Record.Version.hasPendingChanges", {trace:false}); | ||
62 | deferredResult.addCallback(MochiKit.Base.bind(Clipperz.PM.DataModel.Record.Version.superclass.hasPendingChanges, this)); | ||
63 | deferredResult.callback(); | ||
64 | |||
65 | return deferredResult; | ||
66 | }, | ||
67 | */ | ||
68 | //------------------------------------------------------------------------- | ||
69 | |||
70 | |||
71 | 'hasPendingChangesWhenBrandNew': function () { | ||
72 | var deferredResult; | ||
73 | |||
74 | deferredResult = new Clipperz.Async.Deferred("Clipperz.PM.DataModel.Record.Version.hasPendingChangesWhenBrandNew", {trace:false}); | ||
75 | deferredResult.addMethod(this, 'fields'); | ||
76 | deferredResult.addCallback(MochiKit.Base.values); | ||
77 | deferredResult.addCallback(MochiKit.Base.map, MochiKit.Base.methodcaller('isEmpty')) | ||
78 | deferredResult.addCallback(Clipperz.Async.collectAll); | ||
79 | deferredResult.addCallback(function(someValues) { | ||
80 | return MochiKit.Iter.every(someValues, MochiKit.Base.operator.identity); | ||
81 | }); | ||
82 | deferredResult.addCallback(MochiKit.Base.operator.lognot) | ||
83 | deferredResult.callback(); | ||
84 | |||
85 | return deferredResult; | ||
86 | }, | ||
87 | |||
88 | //========================================================================= | ||
89 | |||
90 | 'commitTransientState': function () { | ||
91 | var deferredResult; | ||
92 | |||
93 | deferredResult = new Clipperz.Async.Deferred("Clipperz.PM.DataModel.Record.Version.commitTransientState", {trace:false}); | ||
94 | deferredResult.addCallback(MochiKit.Base.bind(Clipperz.PM.DataModel.Record.Version.superclass.commitTransientState, this)); | ||
95 | deferredResult.callback(); | ||
96 | |||
97 | return deferredResult; | ||
98 | }, | ||
99 | |||
100 | //========================================================================= | ||
101 | |||
102 | 'unpackData': function (someData) { //++ | ||
103 | varresult; | ||
104 | |||
105 | //console.log("Record.Version - UNPACK DATA", this, someData); | ||
106 | result = someData; | ||
107 | if ((someData['fields'] != null) && (someData['fields'] instanceof Array)) { | ||
108 | varfields; | ||
109 | var i,c; | ||
110 | |||
111 | fields = someData['fields']; | ||
112 | delete someData['fields']; | ||
113 | |||
114 | someData['fields'] = {}; | ||
115 | c = fields.length; | ||
116 | for (i=0; i<c; i++) { | ||
117 | someData['fields'][i] = fields[i]; | ||
118 | } | ||
119 | } | ||
120 | |||
121 | |||
122 | |||
123 | return result; | ||
124 | }, | ||
125 | |||
126 | //========================================================================= | ||
127 | |||
128 | 'fields': function () { | ||
129 | vardeferredResult; | ||
130 | var deferredLock; | ||
131 | |||
132 | deferredLock = this.getDeferredLockForKey('fields'); | ||
133 | |||
134 | deferredResult = new Clipperz.Async.Deferred("Record.Version.fields", {trace:false}); | ||
135 | deferredResult.acquireLock(deferredLock); | ||
136 | deferredResult.addCallback(MochiKit.Base.bind(function () { | ||
137 | var innerDeferredResult; | ||
138 | |||
139 | if (this._fields == null) { | ||
140 | innerDeferredResult = new Clipperz.Async.Deferred("Record.Version.fields <inner deferred>", {trace:false}); | ||
141 | innerDeferredResult.addMethod(this, 'getValue', 'fields'); | ||
142 | innerDeferredResult.addCallback(MochiKit.Base.bind(function (someObjectData) { | ||
143 | var reference; | ||
144 | |||
145 | this._fields = {}; | ||
146 | |||
147 | for (reference in someObjectData) { | ||
148 | varrecordVersionField; | ||
149 | |||
150 | recordVersionField = new Clipperz.PM.DataModel.Record.Version.Field({ | ||
151 | 'recordVersion':this, | ||
152 | 'reference': reference | ||
153 | }); | ||
154 | |||
155 | this._fields[reference] = recordVersionField; | ||
156 | } | ||
157 | |||
158 | return this._fields; | ||
159 | }, this)); | ||
160 | innerDeferredResult.callback(); | ||
161 | } else { | ||
162 | innerDeferredResult = MochiKit.Async.succeed(this._fields); | ||
163 | } | ||
164 | |||
165 | return innerDeferredResult; | ||
166 | }, this)); | ||
167 | deferredResult.releaseLock(deferredLock); | ||
168 | deferredResult.callback(); | ||
169 | |||
170 | return deferredResult; | ||
171 | }, | ||
172 | |||
173 | //------------------------------------------------------------------------- | ||
174 | |||
175 | 'getFieldsValues': function () { | ||
176 | return this.getValue('fields'); | ||
177 | }, | ||
178 | |||
179 | //------------------------------------------------------------------------- | ||
180 | |||
181 | 'addField': function (someParameters) { | ||
182 | varnewField; | ||
183 | |||
184 | newField = new Clipperz.PM.DataModel.Record.Version.Field({recordVersion:this}); | ||
185 | |||
186 | return Clipperz.Async.callbacks("Record.Version.addField", [ | ||
187 | MochiKit.Base.method(this, 'fields'), | ||
188 | |||
189 | MochiKit.Base.method(this, '_getObjectDataStore'), | ||
190 | MochiKit.Base.methodcaller('values'), | ||
191 | Clipperz.Base.serializeJSON, | ||
192 | |||
193 | MochiKit.Base.bind(function () { this._fields[newField.reference()] = newField; }, this), | ||
194 | MochiKit.Base.method(newField, 'setLabel', someParameters['label']), | ||
195 | MochiKit.Base.method(newField, 'setValue', someParameters['value']), | ||
196 | MochiKit.Base.method(newField, 'setIsHidden',someParameters['isHidden']), | ||
197 | |||
198 | MochiKit.Base.method(this, '_getObjectDataStore'), | ||
199 | MochiKit.Base.methodcaller('values'), | ||
200 | Clipperz.Base.serializeJSON, | ||
201 | |||
202 | MochiKit.Base.partial(MochiKit.Async.succeed, newField) | ||
203 | ], {trace:false}); | ||
204 | }, | ||
205 | |||
206 | //------------------------------------------------------------------------- | ||
207 | |||
208 | 'removeField': function (aField) { | ||
209 | return Clipperz.Async.callbacks("Record.Version.removeField", [ | ||
210 | MochiKit.Base.method(this, 'fields'), | ||
211 | MochiKit.Base.bind(function () { delete this._fields[aField.reference()]; }, this), | ||
212 | MochiKit.Base.method(this, 'removeValue', 'fields' + '.' + aField.reference()) | ||
213 | ], {trace:false}); | ||
214 | }, | ||
215 | |||
216 | //------------------------------------------------------------------------- | ||
217 | /* | ||
218 | 'sortFieldReference': function (someSortedFieldReferences) { | ||
219 | |||
220 | |||
221 | |||
222 | }, | ||
223 | */ | ||
224 | //========================================================================= | ||
225 | /* | ||
226 | 'directLogins': function () { | ||
227 | return MochiKit.Base.values(this._directLogins); | ||
228 | }, | ||
229 | |||
230 | 'addDirectLogin': function (aDirectLogin) { | ||
231 | this._directLogins[aDirectLogin.reference()] = aDirectLogin; | ||
232 | }, | ||
233 | */ | ||
234 | |||
235 | //========================================================================= | ||
236 | /* | ||
237 | 'updateValues': function (anotherVersion) { | ||
238 | return Clipperz.Async.callbacks("Record.Version.updateValue", [ | ||
239 | MochiKit.Base.partial(MochiKit.Async.succeed, this) | ||
240 | ], {trace:false}); | ||
241 | }, | ||
242 | */ | ||
243 | //========================================================================= | ||
244 | |||
245 | 'setRemoteData': function (aValue) { | ||
246 | this._remoteData = aValue; | ||
247 | |||
248 | return aValue; | ||
249 | }, | ||
250 | |||
251 | //========================================================================= | ||
252 | |||
253 | 'getVersionFunction': function () { | ||
254 | return this._getVersionFunction; | ||
255 | }, | ||
256 | |||
257 | 'previousVersion': function () { | ||
258 | return Clipperz.Async.callbacks("Record.Versions.previousVersion", [ | ||
259 | MochiKit.Base.method(this, 'previousVersionReference'), | ||
260 | this.getVersionFunction() | ||
261 | ], {trace:false}); | ||
262 | }, | ||
263 | |||
264 | 'previousVersionReference': function () { | ||
265 | return this.getValue('previousVersionReference'); | ||
266 | }, | ||
267 | |||
268 | 'previousVersionKey': function () { | ||
269 | //TODO: this value i encrypted on its own. So it can not be saved in the main objectStore!!! | ||
270 | return this.getValue('previousVersionKey'); | ||
271 | }, | ||
272 | |||
273 | //------------------------------------------------------------------------- | ||
274 | |||
275 | 'setPreviousVersionReferenceAndKey': function (aVersionObjectAndKey) { | ||
276 | // this._previousVersion = anotherVersion; | ||
277 | return Clipperz.Async.callbacks("Record.Version.setPreviousVersion", [ | ||
278 | MochiKit.Base.method(this, 'setValue', 'previousVersionReference',aVersionObjectAndKey['reference']), | ||
279 | MochiKit.Base.method(this, 'setValue', 'previousVersionKey', aVersionObjectAndKey['key']) | ||
280 | ], {trace:false}); | ||
281 | }, | ||
282 | |||
283 | //========================================================================= | ||
284 | |||
285 | 'revertChanges': function () { | ||
286 | this.setReference(this.transientState()['originalReference']); | ||
287 | Clipperz.PM.DataModel.Record.Version.superclass.revertChanges.apply(this, arguments); | ||
288 | }, | ||
289 | |||
290 | //------------------------------------------------------------------------- | ||
291 | |||
292 | 'prepareRemoteDataWithKey': function (aKey) { | ||
293 | var deferredResult; | ||
294 | var result; | ||
295 | |||
296 | result = {}; | ||
297 | |||
298 | //console.log("prepareRemoteDataWithKey", aKey); | ||
299 | deferredResult = new Clipperz.Async.Deferred("Record.Version.prepareRemoteDataWithKey", {trace:false}); | ||
300 | if (this.isBrandNew() == false) { | ||
301 | this.transientState()['originalReference'] = this.reference(); | ||
302 | |||
303 | deferredResult.collectResults({ | ||
304 | 'key':MochiKit.Base.partial(MochiKit.Async.succeed, aKey), | ||
305 | 'value': MochiKit.Base.method(this, 'getKey'), | ||
306 | 'version': MochiKit.Base.partial(MochiKit.Async.succeed, Clipperz.PM.Crypto.encryptingFunctions.currentVersion) | ||
307 | }); | ||
308 | deferredResult.addCallback(Clipperz.PM.Crypto.deferredEncrypt); | ||
309 | deferredResult.addCallback(Clipperz.Async.setItem, result, 'previousVersionKey'); | ||
310 | } else { | ||
311 | deferredResult.addCallback(Clipperz.Async.setItem, result, 'previousVersionKey', Clipperz.PM.Crypto.nullValue); | ||
312 | } | ||
313 | deferredResult.addCallback(MochiKit.Base.bind(Clipperz.PM.DataModel.Record.superclass.prepareRemoteDataWithKey, this, aKey)); | ||
314 | deferredResult.addCallback(MochiKit.Base.update, result); | ||
315 | deferredResult.addMethod(this, 'setRemoteData'); | ||
316 | |||
317 | deferredResult.callback(); | ||
318 | |||
319 | return deferredResult; | ||
320 | }, | ||
321 | |||
322 | //========================================================================= | ||
323 | /* | ||
324 | 'deleteAllCleanTextData': function () { | ||
325 | return Clipperz.PM.DataModel.Record.Version.superclass.deleteAllCleanTextData.apply(this, arguments); | ||
326 | }, | ||
327 | |||
328 | 'hasAnyCleanTextData': function () { | ||
329 | return Clipperz.PM.DataModel.Record.Version.superclass.hasAnyCleanTextData.apply(this, arguments); | ||
330 | }, | ||
331 | */ | ||
332 | //========================================================================= | ||
333 | __syntaxFix__: "syntax fix" | ||
334 | }); | ||
335 | |||
336 | |||