protected void MergePhase2(Object objectToMerge, Object objectToDelete, MergeHandle mergeHandle, ICUDResult cudResult, ProceedWithMergeHook proceedHook, MergeFinishedCallback mergeFinishedCallback, bool addNewEntitiesToCache) { List <Object> unpersistedObjectsToDelete = new List <Object>(); RemoveUnpersistedDeletedObjectsFromCudResult(cudResult.AllChanges, cudResult.GetOriginalRefs(), unpersistedObjectsToDelete); if (objectToDelete != null) { IList <IObjRef> oriList = OriHelper.ExtractObjRefList(objectToDelete, mergeHandle); AppendDeleteContainers(objectToDelete, oriList, cudResult.AllChanges, cudResult.GetOriginalRefs(), unpersistedObjectsToDelete); } // Store the MergeFinishedCallback from this thread on the stack and set the property null (for following calls): if (GuiThreadHelper.IsInGuiThread()) { GuiThreadHelper.InvokeOutOfGui(delegate() { MergePhase3(objectToMerge, unpersistedObjectsToDelete, cudResult, proceedHook, mergeFinishedCallback, addNewEntitiesToCache); }); } else { MergePhase3(objectToMerge, unpersistedObjectsToDelete, cudResult, proceedHook, mergeFinishedCallback, addNewEntitiesToCache); } }
public IServiceResult GetORIsForServiceRequest(IServiceDescription serviceDescription) { Object service = ServiceByNameProvider.GetService(serviceDescription.ServiceName); if (service == null) { throw new Exception("Service with name '" + serviceDescription.ServiceName + "' not found"); } Object result = serviceDescription.GetMethod(service.GetType()).Invoke(service, serviceDescription.Arguments); IList <IObjRef> objRefs = OriHelper.ExtractObjRefList(result, null); ServiceResult serviceResult = new ServiceResult(); serviceResult.ObjRefs = objRefs; return(serviceResult); }
protected virtual void AddOriModification(Object obj, String memberName, Object value, Object cloneValue, MergeHandle handle) { if (value is IList) { IList list = (IList)value; for (int a = 0, size = list.Count; a < size; a++) { Object objItem = list[a]; MergeOrPersist(objItem, handle); } } else if (value is IEnumerable) { IEnumerator objEnumerator = ((IEnumerable)value).GetEnumerator(); while (objEnumerator.MoveNext()) { Object objItem = objEnumerator.Current; MergeOrPersist(objItem, handle); } } else { MergeOrPersist(value, handle); } try { IList <IObjRef> oldOriList = OriHelper.ExtractObjRefList(cloneValue, handle, handle.oldOriList); IList <IObjRef> newOriList = OriHelper.ExtractObjRefList(value, handle, handle.newOriList); IRelationUpdateItem oriModItem = CreateRUI(memberName, oldOriList, newOriList); if (oriModItem == null) { return; } IList <IUpdateItem> modItemList = AddModification(obj, handle); modItemList.Add(oriModItem); } finally { handle.oldOriList.Clear(); handle.newOriList.Clear(); } }
public void test_ValueHolderContainer() { MaterialType obj = EntityFactory.CreateEntity <MaterialType>(); obj.Id = 2; obj.Name = "name2"; obj.Version = 1; MaterialType obj2 = EntityFactory.CreateEntity <MaterialType>(); obj2.Id = 3; obj2.Name = "name3"; obj2.Version = 1; IEntityMetaData metaData = EntityMetaDataProvider.GetMetaData(typeof(Material)); int relationIndex = metaData.GetIndexByRelationName("Types"); Material parentEntity = EntityFactory.CreateEntity <Material>(); Assert.IsInstanceOfType(parentEntity, typeof(IValueHolderContainer)); Assert.AssertEquals(ValueHolderState.LAZY, ((IObjRefContainer)parentEntity).Get__State(relationIndex)); Assert.AssertEquals(0, ((IObjRefContainer)parentEntity).Get__ObjRefs(relationIndex).Length); parentEntity.Id = 1; parentEntity.Name = "name1"; parentEntity.Version = 1; parentEntity.Types.Add(obj); parentEntity.Types.Add(obj2); IObjRef typeObjRef = OriHelper.EntityToObjRef(obj); IDisposableCache cache = CacheFactory.Create(CacheFactoryDirective.NoDCE, "test"); ((ICacheIntern)cache).AssignEntityToCache(parentEntity); ((IObjRefContainer)parentEntity).Set__ObjRefs(relationIndex, new IObjRef[] { typeObjRef }); Assert.AssertEquals(ValueHolderState.INIT, ((IObjRefContainer)parentEntity).Get__State(relationIndex)); Assert.AssertEquals(1, ((IObjRefContainer)parentEntity).Get__ObjRefs(relationIndex).Length); Object value = ValueHolderContainerMixin.GetValue((IValueHolderContainer)parentEntity, relationIndex); }