From ef68436ac04da078ffdcacd7e1f785473a303d45 Mon Sep 17 00:00:00 2001 From: Giulio Cesare Solaroli Date: Sun, 02 Oct 2011 23:56:18 +0000 Subject: First version of the newly restructured repository --- (limited to 'frontend/beta/js/Clipperz/PM/DataModel/RecordVersion.js') diff --git a/frontend/beta/js/Clipperz/PM/DataModel/RecordVersion.js b/frontend/beta/js/Clipperz/PM/DataModel/RecordVersion.js new file mode 100644 index 0000000..d2b3e12 --- a/dev/null +++ b/frontend/beta/js/Clipperz/PM/DataModel/RecordVersion.js @@ -0,0 +1,535 @@ +/* + +Copyright 2008-2011 Clipperz Srl + +This file is part of Clipperz's Javascript Crypto Library. +Javascript Crypto Library provides web developers with an extensive +and efficient set of cryptographic functions. The library aims to +obtain maximum execution speed while preserving modularity and +reusability. +For further information about its features and functionalities please +refer to http://www.clipperz.com + +* Javascript Crypto Library is free software: you can redistribute + it and/or modify it under the terms of the GNU Affero General Public + License as published by the Free Software Foundation, either version + 3 of the License, or (at your option) any later version. + +* Javascript Crypto Library is distributed in the hope that it will + be useful, but WITHOUT ANY WARRANTY; without even the implied + warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the GNU Affero General Public License for more details. + +* You should have received a copy of the GNU Affero General Public + License along with Javascript Crypto Library. If not, see + . + +*/ + +if (typeof(Clipperz) == 'undefined') { Clipperz = {}; } +if (typeof(Clipperz.PM) == 'undefined') { Clipperz.PM = {}; } +if (typeof(Clipperz.PM.DataModel) == 'undefined') { Clipperz.PM.DataModel = {}; } + + +//############################################################################# + +Clipperz.PM.DataModel.RecordVersion = function(aRecord, args) { + args = args || {}; + + this._record = aRecord; + + this._reference = args.reference || Clipperz.PM.Crypto.randomKey(); + this._version = args.version || Clipperz.PM.Crypto.encryptingFunctions.currentVersion; + this._key = args.key || Clipperz.PM.Crypto.randomKey();; + + this._previousVersion = args.previousVersion || null; + this._previousVersionKey = args.previousVersionKey || null; + + this.setIsBrandNew(args.reference == null); + + if (this.isBrandNew()) { + this._fields = {}; + + this.setShouldLoadData(false); + this.setShouldDecryptData(false); + this.setShouldProcessData(false); + } else { + if (typeof(args.fields) != 'undefined') { + this.processFieldData(args.fields); + + this.setShouldLoadData(false); + this.setShouldDecryptData(false); + this.setShouldProcessData(false); + } else { + if (typeof(args.data) != 'undefined') { + this.setShouldLoadData(false); + } else { + this.setShouldLoadData(true); + } + this.setShouldDecryptData(true); + this.setShouldProcessData(true); + } + } + + this._serverData = args.data; + this._decryptedData = null; + + return this; +} + +Clipperz.PM.DataModel.RecordVersion.prototype = MochiKit.Base.update(null, { + + 'toString': function() { + return "RecordVersion"; + }, + + //------------------------------------------------------------------------- + + 'record': function() { + return this._record; + }, + + //------------------------------------------------------------------------- + + 'reference': function() { + return this._reference; + }, + + 'setReference': function(aValue) { + this._reference = aValue; + }, + + //------------------------------------------------------------------------- + + 'key': function() { +//MochiKit.Logging.logDebug(">>> RecordVersion.key"); +//MochiKit.Logging.logDebug("--- RecordVersion.key - " + this._key); + return this._key; + }, + + 'setKey': function(aValue) { + this._key = aValue; + }, + + //------------------------------------------------------------------------- + + 'serverData': function() { + return this._serverData; + }, + + 'setServerData': function(aValue) { + this._serverData = aValue; + this.setShouldLoadData(false); + return aValue; + }, + + //------------------------------------------------------------------------- + + 'decryptedData': function() { +//MochiKit.Logging.logDebug(">>> RecordVersion.decryptedData: " + (this._decryptedData ? Clipperz.Base.serializeJSON(aValue) : "null")); + return this._decryptedData; + }, + + 'setDecryptedData': function(aValue) { +//MochiKit.Logging.logDebug(">>> RecordVersion.setDecryptedData: " + Clipperz.Base.serializeJSON(aValue)); + this._decryptedData = aValue; + this.setShouldDecryptData(false); + return aValue; + }, + + //------------------------------------------------------------------------- + + 'version': function() { + return this._version; + }, + + //------------------------------------------------------------------------- + + 'isBrandNew': function() { + return this._isBrandNew; + }, + + 'setIsBrandNew': function(aValue) { + this._isBrandNew = aValue; + }, + + //------------------------------------------------------------------------- + + 'fields': function() { + return this._fields; + }, + + 'addField': function(aField) { + this.fields()[aField.key()] = aField; + }, + + 'addNewField': function() { + var newRecordField; + + newRecordField = new Clipperz.PM.DataModel.RecordField({recordVersion:this}); + this.addField(newRecordField); + + return newRecordField; + }, + + 'fieldWithName': function(aValue) { + var result; + var fieldValues; + var i,c; + + result = null; + fieldValues = MochiKit.Base.values(this.fields()); + c = fieldValues.length; + for (i=0; (i>> RecordVersion.deferredData - this: " + this); + deferredResult = new MochiKit.Async.Deferred(); + deferredResult.addCallback(MochiKit.Base.method(this, 'loadData')); + deferredResult.addCallback(MochiKit.Base.method(this, 'decryptData')); + deferredResult.addCallback(MochiKit.Base.method(this, 'processData')); + deferredResult.callback(); +//MochiKit.Logging.logDebug("<<< RecordVersion.deferredData"); + + return deferredResult; + }, + + //------------------------------------------------------------------------- + + 'loadData': function() { + var result; + +//MochiKit.Logging.logDebug(">>> RecordVersion.loadData - this: " + this); + if (this.shouldLoadData()) { + var deferredResult; + + alert("ERROR: this should have not happened yet!"); +//MochiKit.Logging.logDebug("--- RecordVersion.loadData - 1"); + deferredResult = new MochiKit.Async.Deferred(); +//MochiKit.Logging.logDebug("--- RecordVersion.loadData - 2"); + deferredResult.addCallback(MochiKit.Base.method(this, 'notify'), 'loadingRecordVersionData'); +//MochiKit.Logging.logDebug("--- RecordVersion.loadData - 3"); + deferredResult.addCallback(MochiKit.Base.method(this.user().connection(), 'message'), 'getRecordVersionDetail', {reference: this.reference()}); +//MochiKit.Logging.logDebug("--- RecordVersion.loadData - 4"); + deferredResult.addCallback(MochiKit.Base.method(this, 'setServerData')); +//MochiKit.Logging.logDebug("--- RecordVersion.loadData - 5"); + deferredResult.callback(); +//MochiKit.Logging.logDebug("--- RecordVersion.loadData - 6"); + result = deferredResult; +//MochiKit.Logging.logDebug("--- RecordVersion.loadData - 7"); + } else { +//MochiKit.Logging.logDebug("--- RecordVersion.loadData - 8"); + result = MochiKit.Async.succeed(this.serverData()); +//MochiKit.Logging.logDebug("--- RecordVersion.loadData - 9"); + } +//MochiKit.Logging.logDebug("<<< RecordVersion.loadData"); + + return result; + }, + + //------------------------------------------------------------------------- + + 'decryptData': function(anEncryptedData) { + var result; + +//MochiKit.Logging.logDebug(">>> RecordVersion.decryptData - this: " + this + " (" + anEncryptedData + ")"); + if (this.shouldDecryptData()) { + var deferredResult; + +//MochiKit.Logging.logDebug("--- RecordVersion.decryptData - 1"); + deferredResult = new MochiKit.Async.Deferred(); +//MochiKit.Logging.logDebug("--- RecordVersion.decryptData - 2"); +//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("RecordVersion.decryptData 1: " + res); return res;}); + deferredResult.addCallback(MochiKit.Base.method(this, 'notify'), 'decryptingRecordVersionData'); +//MochiKit.Logging.logDebug("--- RecordVersion.decryptData - 3"); +//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("RecordVersion.decryptData 2: " + res); return res;}); + deferredResult.addCallback(Clipperz.PM.Crypto.deferredDecrypt, this.key(), anEncryptedData, this.version()); +//MochiKit.Logging.logDebug("--- RecordVersion.decryptData - 4"); +//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("RecordVersion.decryptData 3: " + res); return res;}); +//MochiKit.Logging.logDebug("--- RecordVersion.decryptData - 5"); +//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("RecordVersion.decryptData 4: " + res); return res;}); + deferredResult.addCallback(MochiKit.Base.method(this, 'setDecryptedData')); +//MochiKit.Logging.logDebug("--- RecordVersion.decryptData - 6"); +//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("RecordVersion.decryptData 5: " + res); return res;}); + deferredResult.callback(); +//MochiKit.Logging.logDebug("--- RecordVersion.decryptData - 7"); + result = deferredResult; +//MochiKit.Logging.logDebug("--- RecordVersion.decryptData - 8"); + } else { +//MochiKit.Logging.logDebug("--- RecordVersion.decryptData - 9"); + result = MochiKit.Async.succeed(this.decryptedData()); +//MochiKit.Logging.logDebug("--- RecordVersion.decryptData - 10"); + } +//MochiKit.Logging.logDebug("<<< RecordVersion.decryptData"); + + return result; + }, + + //------------------------------------------------------------------------- + + 'processFieldData': function(someValues) { + var fieldValues; + + this._fields = {}; + + if (typeof(someValues) == 'undefined') { + fieldValues = {}; + } else { + fieldValues = someValues; + } + + if (fieldValues.constructor == Array) { + var i, c; + c = fieldValues.length; + for (i=0; i>> RecordVersion.serializedData"); + result = { + fields: {} + }; +//MochiKit.Logging.logDebug("--- RecordVersion.serializedData - 1"); + + for (fieldKey in this.fields()) { +//MochiKit.Logging.logDebug("--- RecordVersion.serializedData - 2"); + result.fields[fieldKey] = this.fields()[fieldKey].serializeData(); +//MochiKit.Logging.logDebug("--- RecordVersion.serializedData - 3"); + } +//MochiKit.Logging.logDebug("--- RecordVersion.serializedData - 4"); +//MochiKit.Logging.logDebug("<<< RecordVersion.serializedData: " + Clipperz.Base.serializeJSON(result)); + + return result; + }, + + 'currentDataSnapshot': function() { + var result; + + result = this.serializedData(); + result['version'] = this.version(); + result['reference'] = this.reference(); + result['previousVersionKey'] = this.previousVersionKey(); + + return result; + }, + + //------------------------------------------------------------------------- + + 'encryptedData': function() { + var deferredResult; + var result; + +//MochiKit.Logging.logDebug(">>> RecordVersion.encryptedData - " + this); + result = {}; + deferredResult = new MochiKit.Async.Deferred(); +//MochiKit.Logging.logDebug("--- RecordVersion.encryptedData - 1"); +//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("RecordVersion.encryptedData - 1: " + res); return res;}); + deferredResult.addCallback(function(aResult, aRecordVersion) { + aResult['reference'] = aRecordVersion.reference(); + aResult['recordReference'] = aRecordVersion.record().reference(); // TODO - this seems to be completely useless + return aResult; + }, result, this); +//MochiKit.Logging.logDebug("--- RecordVersion.encryptedData - 2"); +//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("RecordVersion.encryptedData - 2: " + res); return res;}); + deferredResult.addCallback(Clipperz.PM.Crypto.deferredEncryptWithCurrentVersion, this.key(), this.serializedData()); +//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("RecordVersion.encryptedData - 3: " + res); return res;}); + deferredResult.addCallback(function(aResult, res) { + aResult['data'] = res; + return aResult; + }, result); +//MochiKit.Logging.logDebug("--- RecordVersion.encryptedData - 3"); +//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("RecordVersion.encryptedData - 4: " + res); return res;}); + deferredResult.addCallback(function(aResult) { + aResult['version'] = Clipperz.PM.Crypto.encryptingFunctions.currentVersion; + return aResult; + }, result); +//MochiKit.Logging.logDebug("--- RecordVersion.encryptedData - 4"); + if (this.previousVersion() != null) { +//MochiKit.Logging.logDebug("--- RecordVersion.encryptedData - 5"); +//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("RecordVersion.encryptedData - 5: " + res); return res;}); + deferredResult.addCallback(function(aResult, aRecordVersion) { + aResult['previousVersion'] = aRecordVersion.previousVersion(); + return aResult; + }, result, this); +//MochiKit.Logging.logDebug("--- RecordVersion.encryptedData - 6"); +//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("RecordVersion.encryptedData - 6: " + res); return res;}); + deferredResult.addCallback(Clipperz.PM.Crypto.deferredEncryptWithCurrentVersion, this.key(), this.previousVersionKey()); +//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("RecordVersion.encryptedData - 7: " + res); return res;}); + deferredResult.addCallback(function(aResult, res) { + aResult['previousVersionKey'] = res; + return aResult; + }, result); +//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("RecordVersion.encryptedData - 8: " + res); return res;}); +//MochiKit.Logging.logDebug("--- RecordVersion.encryptedData - 7"); + } else { +//MochiKit.Logging.logDebug("--- RecordVersion.encryptedData - 8"); +//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("RecordVersion.encryptedData - 9: " + res); return res;}); + deferredResult.addCallback(function(aResult) { + aResult['previousVersionKey'] = Clipperz.PM.Crypto.nullValue; + return aResult; + }, result); +//MochiKit.Logging.logDebug("--- RecordVersion.encryptedData - 9"); +//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("RecordVersion.encryptedData - 10: " + res); return res;}); + }; +//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("RecordVersion.encryptedData - 11: " + res); return res;}); + deferredResult.callback(); +//MochiKit.Logging.logDebug("<<< RecordVersion.encryptedData"); + + return deferredResult; + }, + + //------------------------------------------------------------------------- + + 'createNewVersion': function() { + if (this.record().isBrandNew() == false) { + this.setPreviousVersion(this.reference()); + this.setPreviousVersionKey(this.key()); + + this.setReference(Clipperz.PM.Crypto.randomKey()); + this.setKey(Clipperz.PM.Crypto.randomKey()); + } + }, + + //------------------------------------------------------------------------- +/* + 'shouldLoadData': function() { + return ((this.data() == null) && (this.isBrandNew() === false)); + }, + + 'loadData': function() { +//MochiKit.Logging.logDebug(">>> Record.loadData (" + this.label() + ")"); +// if (this.shouldLoadData()) { +// this.user().connection().message( 'getRecordDetail', +// {recordReference: this.reference()}, +// { callback:MochiKit.Base.bind(this.loadDataCallback, this), +// errorHandler:Clipperz.PM.defaultErrorHandler }); +// } else { +// this.notify('loadDataDone'); +// } + }, + + 'loadDataCallback': function() { +MochiKit.Logging.logDebug("RecordVersion.loadDataCallback: " + Clipperz.Base.serializeJSON(arguments)); + }, +*/ + //------------------------------------------------------------------------- + __syntaxFix__: "syntax fix" + +}); + -- cgit v0.9.0.2