protected override Object InterceptDeleteIntern(MethodInfo method, Object[] arguments, Attribute annotation, Boolean?isAsyncBegin) { if (arguments == null || (arguments.Length != 1 && arguments.Length != 3)) { throw new Exception("Arguments currently must be only 1 or 3: " + method.ToString()); } ProceedWithMergeHook proceedHook = GetProceedHook(arguments); MergeFinishedCallback finishedCallback = GetFinishedCallback(arguments); RemoveAttribute remove = (RemoveAttribute)annotation; if (remove != null) { String idName = remove.IdName; Type entityType = remove.EntityType; if (idName != null && idName.Length > 0) { if (entityType == null) { throw new Exception("Annotation invalid: " + remove + " on method " + method.ToString()); } DeleteById(method, entityType, idName, arguments[0], proceedHook, finishedCallback); return(null); } } Object argumentToDelete = arguments[0]; MergeProcess.Process(null, argumentToDelete, proceedHook, finishedCallback); if (!typeof(void).Equals(method.ReturnType)) { return(argumentToDelete); } return(null); }
protected void DeleteById(MethodInfo method, Type entityType, String idName, Object ids, ProceedWithMergeHook proceedHook, MergeFinishedCallback finishedCallback) { IEntityMetaData metaData = GetSpecifiedMetaData(method, typeof(RemoveAttribute), entityType); Member idMember = GetSpecifiedMember(method, typeof(RemoveAttribute), metaData, idName); sbyte idIndex = metaData.GetIdIndexByMemberName(idName); Type idType = idMember.RealType; List <IObjRef> objRefs = new List <IObjRef>(); BuildObjRefs(entityType, idIndex, idType, ids, objRefs); MergeProcess.Process(null, objRefs, proceedHook, finishedCallback); }
public void Test_DataChange() { TestEntity newTestEntity = EntityFactory.CreateEntity <TestEntity>(); CountDownLatch latch = new CountDownLatch(1); MergeProcess.Process(newTestEntity, null, null, delegate(bool success) { latch.CountDown(); }); latch.Await(); WaitForUI(); newTestEntity.Relation = EntityFactory.CreateEntity <TestEntity2>(); ICacheWalkerResult cwResult = CacheWalker.WalkEntities(newTestEntity); Log.Info(cwResult.ToString()); ICUDResult mergeResult = MergeController.MergeDeep(newTestEntity, new MergeHandle()); latch = new CountDownLatch(1); RevertChangesHelper.RevertChanges(newTestEntity, delegate(bool success) { latch.CountDown(); }); latch.Await(); WaitForUI(); ((IWritableCache)Cache).Put(newTestEntity); latch = new CountDownLatch(1); ((INotifyPropertyChanged)newTestEntity).PropertyChanged += delegate(Object sender, PropertyChangedEventArgs evnt) { latch.CountDown(); }; MergeService.Merge(mergeResult, null); latch.Await(); WaitForUI(); Assert.AssertNotNull(newTestEntity.Relation); }
protected override Object InterceptMergeIntern(MethodInfo method, Object[] arguments, Attribute annotation, Boolean?isAsyncBegin) { if (arguments == null || (arguments.Length != 1 && arguments.Length != 2 && arguments.Length != 3)) { throw new Exception("Arguments currently must be only 1, 2 or 3: " + method.ToString()); } Object argumentToMerge = arguments[0]; Object argumentToDelete = GetArgumentToDelete(arguments, method.GetParameters()); ProceedWithMergeHook proceedHook = GetProceedHook(arguments); MergeFinishedCallback finishedCallback = GetFinishedCallback(arguments); MergeProcess.Process(argumentToMerge, argumentToDelete, proceedHook, finishedCallback); if (!typeof(void).Equals(method.ReturnType)) { return(argumentToMerge); } return(null); }