Ejemplo n.º 1
0
 value: function(instance) {
     if (instance !== null) {
         if (typeof instance.context === "undefined") {
             return Promise.resolve(instance);
         }
         if (instance.context !== null) {
             if (instance.context !== this) {
                 throw Exception.initWithMessageTargetAndMethod("This instance is belongs to another context.", this, "revert");
             }
             if (this._inserted.has(instance)) {
                 // This is a newly inserted object, there is no value to revert to, so do nothing.
             } else if (this._modified.has(instance)) {
                 this._modified.delete(instance);
                 instance = this._revertValues(instance);
             }
         } else {
             // Maybe that object was deleted let retrieve it?
             if (this._deleted.has(instance)) {
                 this._deleted.delete(instance);
                 instance.context = this;
                 instance = this._revertValues(instance);
             }
         }
     } else {
         throw Exception.initWithMessageTargetAndMethod("Cannot revert a null object.", this, "revert");
     }
     return  Promise.resolve(instance);
 }
Ejemplo n.º 2
0
 value: function(instance) {
     if (instance !== null) {
         if (typeof instance.context === "undefined") {
             var metadata = Montage.getInfoForObject(instance);
             var blueprint = this.blueprintForPrototype(metadata.objectName, metadata.moduleId);
             if (blueprint !== null) {
                 ObjectProperty.manager.apply(Object.getPrototypeOf(instance), blueprint);
             } else {
                 throw Exception.create().initWithMessageTargetAndMethod("Cannot find blueprint for: " + metadata.objectName + " " + metadata.moduleId, this, "insert");
             }
         }
         if (instance.context === null) {
             instance.context = this;
             this._inserted.add(instance);
             return this.initializeObject(instance, this).then(function(instance) {
                 instance.context._objectMap.set(instance.objectId, instance);
                 return Promise.resolve(instance);
             });
         } else if (instance.context !== this) {
             throw Exception.initWithMessageTargetAndMethod("This instance is already inserted in another context.", this, "insert");
         }
     } else {
         throw Exception.initWithMessageTargetAndMethod("Cannot insert a null object.", this, "insert");
     }
 }
Ejemplo n.º 3
0
 value: function(instance) {
     if (instance !== null) {
         if ((typeof instance.context === "undefined") || (instance.context === null)) {
             return Promise.resolve(instance);
         }
         if (instance.context !== this) {
             throw Exception.initWithMessageTargetAndMethod("This instance is belongs to another context.", this, "delete");
         }
         if (this._inserted.has(instance)) {
             // We are forgetting a newly inserted object
             this._inserted.delete(instance);
             if (typeof instance.context !== "undefined") {
                 instance.context = null;
             }
         } else {
             if (this._modified.has(instance)) {
                 // the object was modified before teh delete forget those.
                 this._modified.delete(instance);
                 instance = this._revertValues(instance);
             }
             this._deleted.add(instance);
         }
         this._objectMap.delete(instance.objectId);
     } else {
         throw Exception.initWithMessageTargetAndMethod("Cannot delete a null object.", this, "delete");
     }
     return Promise.resolve(instance);
 }
Ejemplo n.º 4
0
 set:function (value) {
     if (value !== null) {
         this._objectId = value;
     } else {
         throw Exception.create().initWithMessageTargetAndMethod("Cannot set object Id to null", this, "objectId.set");
     }
 }
Ejemplo n.º 5
0
 value:function (propertyName, value) {
     var propertyBlueprint = this.blueprint.propertyBlueprintForName(propertyName);
     var storageKey = "_" + propertyBlueprint.name;
     if (value == null && propertyBlueprint.denyDelete) {
         throw Exception.create().initWithMessageTargetAndMethod("Deny Delete", this, propertyBlueprint.name);
     } else {
         this[storageKey] = value;
     }
 },
Ejemplo n.º 6
0
var Montage=require("montage").Montage,Blueprint=require("data/blueprint").Blueprint,BlueprintBinder=require("data/blueprint").BlueprintBinder,BinderMapping=require("data/mapping").BinderMapping,BlueprintMapping=require("data/mapping").BlueprintMapping,AttributeMapping=require("data/mapping").AttributeMapping,AssociationMapping=require("data/mapping").AssociationMapping,StoreConnectionInformation=require("data/store-connection-information").StoreConnectionInformation,Query=require("data/query").Query,Pledge=require("data/pledge").Pledge,PledgedSortedSet=require("data/pledge").PledgedSortedSet,Restriction=require("data/restriction").Restriction,TransactionId=require("data/transaction-id").TransactionId,ObjectId=require("data/object-id").ObjectId,TemporaryObjectId=require("data/object-id").TemporaryObjectId,Serializer=require("core/serializer").Serializer,Deserializer=require("core/deserializer").Deserializer,Promise=require("core/promise").Promise,Exception=require("core/exception").Exception,logger=require("core/logger").logger("store"),_defaultStoreManager=null,Store=exports.Store=Montage.create(Montage,{_connectionInfo:{serializable:!0,enumerable:!1,value:null},connectionInfo:{get:function(){return this._connectionInfo},set:function(e){this._connectionInfo=e}},restrictions:{serializable:!0,writable:!1,distinct:!0,value:new Array(10)},_parent:{serializable:!0,enumerable:!1,value:null},parent:{get:function(){return this._parent}},defaultManager:{get:function(){return _defaultStoreManager===null&&(_defaultStoreManager=StoreManager.create().init()),_defaultStoreManager},set:function(e){_defaultStoreManager=e}},init:{serializable:!1,enumerable:!1,value:function(){return this.initWithParentAndRestrictions(null,null)}},initWithParent:{serializable:!1,enumerable:!1,value:function(e){return this.initWithParentAndRestrictions(e,null)}},initWithParentAndRestrictions:{serializable:!1,value:function(e,t){this.parent!==null&&this.parent.remove(this),this._parent=e!=null?e:Store.defaultManager,this.parent.addStore(this);if(t!=null){var n,r;for(r=0;typeof (n=t[r])!="undefined";r++)this.restrictions.push(Object.freeze(n))}return this}},blueprintForPrototype:{value:function(e,t){return this.parent!==null?this.parent.blueprintForPrototype(e,t):null}},createBinderMapping:{get:function(){return BinderMapping.create()}},createBlueprintMapping:{get:function(){return BlueprintMapping.create()}},createAttributeMapping:{get:function(){return AttributeMapping.create()}},createAssociationMapping:{get:function(){return AssociationMapping.create()}},addStore:{value:function(e){return this.parent!==null?this.parent.addStore(e):e}},removeStore:{value:function(e){return this.parent!==null?this.parent.removeStore(e):e}},requireStoreForBlueprint:{value:function(e,t){if(this.parent!==null)return this.parent.requireStoreForBlueprint(e,t)}},canServiceBlueprint:{value:function(e,t){var n=e.mappingForName(t.mappingFolderName);if(!n)return!1;var r=n.parent;if(!r)return!1;var i=Montage.getInfoForObject(this);if(r.storePrototypeName===i.objectName&&r.storeModuleId===i.moduleId){if(this.connectionInfo){var s=r.connectionInformationForName(this.connectionInfo.name);return this.connectionInfo.equals(s)}return!0}return!1}},canServiceQuery:{value:function(e,t){return e!=null?this.canServiceBlueprint(e.blueprint,t):!1}},permanentIdForObjectId:{value:function(e,t,n,r){var i=n,s=!1;try{return i==null&&(s=TransactionId.manager.hasCurrentTransaction(),s?i=TransactionId.manager.currentTransaction():i=TransactionId.manager.startTransaction(r)),this.permanentIdForObjectId$Implementation(e,t,i)}finally{s||TransactionId.manager.closeTransaction(i)}}},permanentIdForObjectId$Implementation:{value:function(e,t,n){return typeof e.objectId!="undefined"?Promise.resolve(e.objectId):Promise.resolve(null)}},pledgeForObjectId:{value:function(e,t,n,r){var i=n,s=!1;try{return i==null&&(s=TransactionId.manager.hasCurrentTransaction(),s?i=TransactionId.manager.currentTransaction():i=TransactionId.manager.startTransaction(r)),this.pledgeForObjectId$Implementation(e,t,i)}finally{s||TransactionId.manager.closeTransaction(i)}}},pledgeForObjectId$Implementation:{value:function(e,t,n){return Promise.resolve(null)}},pledgeForSourceObjectAssociationNamed:{value:function(e,t,n,r,i){var s=r,o=!1;try{return s==null&&(o=TransactionId.manager.hasCurrentTransaction(),o?s=TransactionId.manager.currentTransaction():s=TransactionId.manager.startTransaction(i)),this.pledgeForSourceObjectAssociationNamed$Implementation(e,t,n,s)}finally{o||TransactionId.manager.closeTransaction(s)}}},pledgeForSourceObjectAssociationNamed$Implementation:{value:function(e,t,n,r){return this.parent!==null?this.parent.pledgeForSourceObjectAssociationNamed$Implementation(e,t,n,r):Promise.resolve(null)}},pledgeForSourceObjectAssociation:{value:function(e,t,n,r,i){var s=r,o=!1;try{return s==null&&(o=TransactionId.manager.hasCurrentTransaction(),o?s=TransactionId.manager.currentTransaction():s=TransactionId.manager.startTransaction(i)),this.pledgeForSourceObjectAssociation$Implementation(e,t,n,s)}finally{o||TransactionId.manager.closeTransaction(s)}}},pledgeForSourceObjectAssociation$Implementation:{value:function(e,t,n,r){if(this.parent!==null)return this.parent.pledgeForSourceObjectAssociation$Implementation(e,t,n,r)}},initializeObject:{value:function(e,t,n,r){var i=n,s=!1;try{return i==null&&(s=TransactionId.manager.hasCurrentTransaction(),s?i=TransactionId.manager.currentTransaction():i=TransactionId.manager.startTransaction(r)),this.initializeObject$Implementation(e,t,i)}finally{s||TransactionId.manager.closeTransaction(i)}}},initializeObject$Implementation:{value:function(e,t,n){return typeof e.objectId=="undefined"&&(e.objectId=TemporaryObjectId.create().init()),Promise.resolve(e)}},repledgeObject:{value:function(e,t,n,r){var i=n,s=!1;try{i==null&&(s=TransactionId.manager.hasCurrentTransaction(),s?i=TransactionId.manager.currentTransaction():i=TransactionId.manager.startTransaction(r));if(Array.isArray(e)){var o=new Array(e.length),u,a;for(a=0;typeof (u=e[a])!="undefined";a++)o[a]=this.repledgeObject$Implementation(u,t,i);return o}return this.repledgeObject$Implementation(e,t,i)}finally{s||TransactionId.manager.closeTransaction(i)}}},repledgeObject$Implementation:{value:function(e,t,n){return typeof e.objectId!="undefined"?this.pledgeForObjectId(e.objectId,t,n):Promise.resolve(e)}},saveChangesInContext:{value:function(e,t,n){var r=t,i=!1;try{r==null&&(i=TransactionId.manager.hasCurrentTransaction(),i?r=TransactionId.manager.currentTransaction():r=TransactionId.manager.startTransaction(n)),this.saveChangesInContext$Implementation(e,r)}finally{i||TransactionId.manager.closeTransaction(r)}}},saveChangesInContext$Implementation:{value:function(e,t){if(this.parent!==null)return this.parent.saveChangesInContext$Implementation(e,t)}},prepareToSaveChangesInContext$Implementation:{value:function(e,t){return Promise.resolve(!0)}},cancelSaveChangesInContext$Implementation:{value:function(e,t){return Promise.resolve(!0)}},commitChangesInContext$Implementation:{value:function(e,t){return Promise.resolve(!0)}},queryInContext:{value:function(e,t,n,r){var i=n,s=!1;try{return i==null&&(s=TransactionId.manager.hasCurrentTransaction(),s?i=TransactionId.manager.currentTransaction():i=TransactionId.manager.startTransaction(r)),this.queryInContext$Implementation(e,t,i)}finally{s||TransactionId.manager.closeTransaction(i)}}},queryInContext$Implementation:{value:function(e,t,n){return(new PledgedSortedSet.create).initWithQueryAndContext(e,t)}}}),StoreManager=exports.StoreManager=Montage.create(Store,{stores:{serializable:!0,writable:!1,distinct:!0,value:new Array(10)},parent:{get:function(){return this}},init:{serializable:!1,enumerable:!1,value:function(){return this}},addStore:{value:function(e){if(e!==null&&e!==this){var t=this.stores.indexOf(e);t<0&&this.stores.push(e)}return e}},removeStore:{value:function(e){if(e!==null){var t=this.stores.indexOf(e);t>=0&&(this.stores=this.stores.splice(t,1))}return e}},blueprintForPrototype:{value:function(e,t){return BlueprintBinder.manager.blueprintForPrototype(e,t)}},storeForBlueprint:{value:function(e,t){var n,r;for(r=0;typeof (n=this.stores[r])!="undefined";r++)if(n.canServiceBlueprint(e,t))return n;return null}},findStoreForBlueprint:{value:function(e,t){var n=this._findStoreForBlueprint(e,t);return n==null&&(n=this.requireStoreForBlueprint(e,t)),Promise.resolve(n)}},_findStoreForBlueprint:{value:function(e,t){var n,r;for(r=0;typeof (n=this.stores[r])!="undefined";r++)if(n.canServiceBlueprint(e,t))return n;return null}},requireStoreForBlueprint:{value:function(e,t){return e===null||typeof e=="undefined"?Promise.resolve(null):this._requireStoreForBlueprint(e,t)}},_requireStoreForBlueprint:{value:function(e,t){if(e===null||typeof e=="undefined")return Promise.resolve(null);var n=null,r,i;for(i=0;typeof (r=this.stores[i])!="undefined";i++)r.canServiceBlueprint(e,t)&&(n=r);if(n==null){var s=e.mappingForName(t.mappingFolderName),o=s?s.parent:null;if(o){var u=Promise.defer();require.async(o.storeModuleId,function(e){u.resolve(e)});var a=this;return u.promise.then(function(e){var t=e[o.storePrototypeName],n;return typeof t=="undefined"||t===null?Promise.reject("No Store found "+o.storePrototypeName):(n=t.create().initWithParent(a),n.connectionInfo=o.defaultConnectionInformation,n)})}return Promise.resolve(n)}return Promise.resolve(n)}},storeForObjectId:{value:function(e,t){var n,r;for(r=0;typeof (n=this.stores[r])!="undefined";r++)if(n.canServiceBlueprint(e.blueprint,t))return n;return null}},pledgeForSourceObjectAssociationNamed$Implementation:{value:function(e,t,n,r){var i=null,s=null,o=Montage.getInfoForObject(e),u=this.blueprintForPrototype(o.objectName,o.moduleId);return u!==null&&(s=u.attributeForName(t),s!==null&&s.targetBlueprint!==null?i=this.storeForBlueprint(s.targetBlueprint,r):logger.error("No relationship named "+t+" for "+e)),i!==null?i.pledgeForSourceObjectAssociation(e,s,n,r):Promise.resolve(null)}},pledgeForObjectId$Implementation:{value:function(e,t,n){var r=this.storeForObjectId(e,n);return r!==null?r.pledgeForObjectId$Implementation(e,t,n):Promise.resolve(null)}},pledgeForSourceObjectAssociation$Implementation:{value:function(e,t,n,r){return Promise.resolve(null)}},initializeObject$Implementation:{value:function(e,t,n){return typeof e.objectId=="undefined"&&(e.objectId=TemporaryObjectId.create().init()),Promise.resolve(e)}},repledgeObject$Implementation:{value:function(e,t,n){return typeof e.objectId!="undefined"?this.pledgeForObjectId(e.objectId,t,n):Promise.resolve(e)}},saveChangesInContext$Implementation:{value:function(e,t){var n,r,i=new Array(this.stores.length),s=new Array(this.stores.length);for(r=0;typeof (n=this.stores[r])!="undefined";r++)i[r]=n.prepareToSaveChangesInContext$Implementation(e,t);Promise.when(Promise.all(i),function(){for(r=0;typeof (n=this.stores[r])!="undefined";r++)s[r]=n.commitChangesInContext$Implementation(e,t);return Promise.when(Promise.all(s),function(){return Promise.resolve(!0)},function(){throw Exception.create().initWithMessageTargetAndMethod("Failed to revert prepare for save transaction: "+t,this,"saveChangesInContext")})},function(){for(r=0;typeof (n=this.stores[r])!="undefined";r++)s[r]=n.cancelSaveChangesInContext$Implementation(e,t);return Promise.when(Promise.all(s),function(){return Promise.reject("Could not save the transaction: "+t)},function(){throw Exception.create().initWithMessageTargetAndMethod("Commit failed for transaction: "+t,this,"saveChangesInContext")})})}},prepareToSaveChangesInContext$Implementation:{value:function(e,t){return Promise.resolve(!0)}},cancelSaveChangesInContext$Implementation:{value:function(e,t){return Promise.resolve(!0)}},commitChangesInContext$Implementation:{value:function(e,t){return Promise.resolve(!0)}},queryInContext$Implementation:{value:function(e,t,n){if(e==null||t==null)return Promise.resolve([]);var r=this.storeForBlueprint(e.blueprint,n);return r==null?Promise.resolve([]):r.queryInContext$Implementation(e,t,n)}}})
Ejemplo n.º 7
0
 }, function () {
     throw Exception.create().initWithMessageTargetAndMethod('Commit failed for transaction: ' + transactionId, this, "saveChangesInContext");
 }
Ejemplo n.º 8
0
 }, function () {
     throw Exception.create().initWithMessageTargetAndMethod('Failed to revert prepare for save transaction: ' + transactionId, this, "saveChangesInContext");
 }