public RelationUpdateItemBuild UpdateRelationBuild() { if (relationBuild != null) { return(relationBuild); } relationBuild = new RelationUpdateItemBuild(memberName); return(relationBuild); }
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); }
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; } }