summaryrefslogtreecommitdiff
path: root/frontend/gamma/js/Clipperz/PM/DataModel/Record.Version.js
Unidiff
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.js336
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
3Copyright 2008-2011 Clipperz Srl
4
5This file is part of Clipperz's Javascript Crypto Library.
6Javascript Crypto Library provides web developers with an extensive
7and efficient set of cryptographic functions. The library aims to
8obtain maximum execution speed while preserving modularity and
9reusability.
10For further information about its features and functionalities please
11refer 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
29try { 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
33Clipperz.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
44Clipperz.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