public CollectionEndPointSetCollectionCommand(
            ICollectionEndPoint modifiedEndPoint,
            DomainObjectCollection newCollection,
            IDomainObjectCollectionData modifiedCollectionData,
            ICollectionEndPointCollectionManager collectionEndPointCollectionManager,
            IClientTransactionEventSink transactionEventSink)
            : base(
                ArgumentUtility.CheckNotNull("modifiedEndPoint", modifiedEndPoint),
                null,
                null,
                ArgumentUtility.CheckNotNull("transactionEventSink", transactionEventSink))
        {
            ArgumentUtility.CheckNotNull("newCollection", newCollection);
            ArgumentUtility.CheckNotNull("modifiedCollectionData", modifiedCollectionData);
            ArgumentUtility.CheckNotNull("collectionEndPointCollectionManager", collectionEndPointCollectionManager);

            if (modifiedEndPoint.IsNull)
            {
                throw new ArgumentException("Modified end point is null, a NullEndPointModificationCommand is needed.", "modifiedEndPoint");
            }

            _newCollection          = newCollection;
            _modifiedCollectionData = modifiedCollectionData;
            _collectionEndPointCollectionManager = collectionEndPointCollectionManager;

            var oldOppositeObjects = ModifiedCollectionData;

            _removedObjects = oldOppositeObjects.Where(oldObject => !NewCollection.Contains(oldObject.ID)).ToArray();

            var newOppositeObjects = NewCollection.Cast <DomainObject> ();

            _addedObjects = newOppositeObjects.Where(newObject => !ModifiedCollectionData.ContainsObjectID(newObject.ID)).ToArray();
        }
        public override void Perform()
        {
            // After this operation, NewCollection will be associated with the end-point and ModifiedEndPoint.Collection will return NewCollection.
            // The previous ModifiedEndPoint.Collection will be a standalone copy of the end-point data.
            var oldDataStrategyOfNewCollection = CollectionEndPointCollectionManager.AssociateCollectionWithEndPoint(NewCollection);

            // Now, replace end-point's data with the data that was held by NewCollection before it was associated.
            ModifiedCollectionData.ReplaceContents(oldDataStrategyOfNewCollection);

            ModifiedEndPoint.Touch();
        }
示例#3
0
 public override void Perform()
 {
     ModifiedCollectionData.Remove(OldRelatedObject);
     ModifiedEndPoint.Touch();
 }
示例#4
0
 public override void Perform()
 {
     ModifiedCollectionData.Insert(Index, NewRelatedObject);
     ModifiedEndPoint.Touch();
 }