Esempio n. 1
0
        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);
            }
        }
Esempio n. 2
0
        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);
        }
Esempio n. 3
0
        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();
            }
        }
Esempio n. 4
0
        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);
        }