Index: Ringtoets/Common/src/Ringtoets.Common.Data/UpdateDataStrategies/UpdateDataStrategyBase.cs =================================================================== diff -u -rdd4e75e27880fc06f6823cca424a010ab19adb33 -r85b53922d59e2d43ef299322b89e0de7ea085c63 --- Ringtoets/Common/src/Ringtoets.Common.Data/UpdateDataStrategies/UpdateDataStrategyBase.cs (.../UpdateDataStrategyBase.cs) (revision dd4e75e27880fc06f6823cca424a010ab19adb33) +++ Ringtoets/Common/src/Ringtoets.Common.Data/UpdateDataStrategies/UpdateDataStrategyBase.cs (.../UpdateDataStrategyBase.cs) (revision 85b53922d59e2d43ef299322b89e0de7ea085c63) @@ -67,21 +67,21 @@ } /// - /// Updates the (dependent) objects with new data from the imported data. + /// Updates the object and its dependent data with data from the imported data. /// - /// Objects that need to be updated. - /// The data that was imported. + /// Object that needs to be updated. + /// The object to update from. /// An with affected objects. /// Thrown when duplicate items are found. - protected abstract IEnumerable UpdateData(IEnumerable objectsToUpdate, - IEnumerable importedDataCollection); + protected abstract IEnumerable UpdateObjectAndDependentData(TTargetData objectToUpdate, + TTargetData objectToUpdateFrom); /// /// Removes the objects and their dependent data. /// - /// The objects that are removed. + /// The object that is removed. /// An with affected objects. - protected abstract IEnumerable RemoveData(IEnumerable removedObjects); + protected abstract IEnumerable RemoveObjectAndDependentData(TTargetData removedObject); /// /// Updates the items and their associated data within the target collection with the data contained @@ -141,7 +141,7 @@ TTargetData[] objectsToBeUpdated = GetObjectsToBeUpdated(targetDataCollection, importedObjects).ToArray(); var affectedObjects = new List(); - if (objectsToBeAdded.Any()) + if (objectsToBeAdded.Any() || objectsToBeRemoved.Any()) { affectedObjects.Add(targetDataCollection); } @@ -167,5 +167,42 @@ { return importedDataObjects.Where(source => !existingCollection.Contains(source, equalityComparer)); } + + /// + /// Updates all the objects and their dependent data that needs to be updated with data from the imported data collection. + /// + /// The objects that need to be updated. + /// The data to update from. + /// A of affected items. + private IEnumerable UpdateData(IEnumerable objectsToUpdate, + IEnumerable importedDataCollection) + { + var affectedObjects = new List(); + + foreach (TTargetData objectToUpdate in objectsToUpdate) + { + TTargetData objectToUpdateFrom = importedDataCollection.Single(importedObject => + equalityComparer.Equals(importedObject, objectToUpdate)); + affectedObjects.AddRange(UpdateObjectAndDependentData(objectToUpdate, objectToUpdateFrom)); + } + + return affectedObjects; + } + + /// + /// Removes all the objects and their dependent data. + /// + /// The objects that need to be removed. + /// A of affected items. + private IEnumerable RemoveData(IEnumerable objectsToRemove) + { + var affectedObjects = new List(); + + foreach (TTargetData objectToRemove in objectsToRemove) + { + affectedObjects.AddRange(RemoveObjectAndDependentData(objectToRemove)); + } + return affectedObjects; + } } } \ No newline at end of file