Пример #1
0
 public RelationUpdateItemBuild UpdateRelationBuild()
 {
     if (relationBuild != null)
     {
         return(relationBuild);
     }
     relationBuild = new RelationUpdateItemBuild(memberName);
     return(relationBuild);
 }
Пример #2
0
        public RelationUpdateItemBuild CreateRUIBuild(String memberName, IList <IObjRef> oldOriList, IList <IObjRef> newOriList)
        {
            if (oldOriList.Count == 0 && newOriList.Count == 0)
            {
                return(null);
            }
            IISet <IObjRef> oldSet = oldOriList.Count > 0 ? new CHashSet <IObjRef>(oldOriList) : EmptySet.Empty <IObjRef>();
            IISet <IObjRef> newSet = newOriList.Count > 0 ? new CHashSet <IObjRef>(newOriList) : EmptySet.Empty <IObjRef>();

            IISet <IObjRef> smallerSet = ((ICollection)oldSet).Count > ((ICollection)newSet).Count ? newSet : oldSet;
            IISet <IObjRef> greaterSet = ((ICollection)oldSet).Count > ((ICollection)newSet).Count ? oldSet : newSet;

            // Check unchanged ORIs
            Iterator <IObjRef> smallerIter = smallerSet.Iterator();

            while (smallerIter.MoveNext())
            {
                // Old ORIs, which exist as new ORIs, too, are unchanged
                IObjRef objRef = smallerIter.Current;
                if (greaterSet.Remove(objRef))
                {
                    smallerIter.Remove();
                }
            }
            if (((ICollection)oldSet).Count == 0 && ((ICollection)newSet).Count == 0)
            {
                return(null);
            }
            // Old ORIs are now handled as REMOVE, New ORIs as ADD
            RelationUpdateItemBuild rui = new RelationUpdateItemBuild(memberName);

            if (((ICollection)oldSet).Count > 0)
            {
                rui.RemoveObjRefs(oldSet);
            }
            if (((ICollection)newSet).Count > 0)
            {
                rui.AddObjRefs(newSet);
            }
            return(rui);
        }
Пример #3
0
        protected bool EqualsRUI(CUDResultDiff cudResultDiff, IRelationUpdateItem left, IRelationUpdateItem right)
        {
            // we do NOT have to check each relational ObjRef because IF an objRef is in the scope it must not be removed afterwards
            // so we know by design that the arrays can only grow

            try
            {
                IObjRef[] leftORIs  = left.AddedORIs;
                IObjRef[] rightORIs = right.AddedORIs;

                if (leftORIs == null)
                {
                    if (rightORIs != null)
                    {
                        if (!cudResultDiff.doFullDiff)
                        {
                            return(false);
                        }
                        RelationUpdateItemBuild relationBuild = cudResultDiff.UpdateRelationBuild();
                        relationBuild.AddObjRefs(rightORIs);
                    }
                }
                else if (rightORIs == null)
                {
                    throw new Exception("Must never happen");
                }
                else if (leftORIs.Length != rightORIs.Length)
                {
                    if (!cudResultDiff.doFullDiff)
                    {
                        return(false);
                    }
                    throw new Exception("Not yet implemented");
                }
                leftORIs  = left.RemovedORIs;
                rightORIs = right.RemovedORIs;
                if (leftORIs == null)
                {
                    if (rightORIs != null)
                    {
                        if (!cudResultDiff.doFullDiff)
                        {
                            return(false);
                        }
                        RelationUpdateItemBuild relationBuild = cudResultDiff.UpdateRelationBuild();
                        relationBuild.RemoveObjRefs(rightORIs);
                    }
                }
                else if (rightORIs == null)
                {
                    throw new Exception("Must never happen");
                }
                else if (leftORIs.Length != rightORIs.Length)
                {
                    if (!cudResultDiff.doFullDiff)
                    {
                        return(false);
                    }
                    throw new Exception("Not yet implemented");
                }
                return(true);
            }
            finally
            {
                cudResultDiff.relationBuild = null;
            }
        }