Index: Ringtoets/Piping/src/Ringtoets.Piping.Plugin/FileImporter/StochasticSoilModelUpdateData.cs =================================================================== diff -u -r673bf2f4f4de6006444aae3a10183f9442eb0f23 -r89d34600d1408c8b1f4240020e841ba64cc26622 --- Ringtoets/Piping/src/Ringtoets.Piping.Plugin/FileImporter/StochasticSoilModelUpdateData.cs (.../StochasticSoilModelUpdateData.cs) (revision 673bf2f4f4de6006444aae3a10183f9442eb0f23) +++ Ringtoets/Piping/src/Ringtoets.Piping.Plugin/FileImporter/StochasticSoilModelUpdateData.cs (.../StochasticSoilModelUpdateData.cs) (revision 89d34600d1408c8b1f4240020e841ba64cc26622) @@ -25,6 +25,7 @@ using Core.Common.Base; using log4net; using Ringtoets.Piping.Data; +using Ringtoets.Piping.Service; namespace Ringtoets.Piping.Plugin.FileImporter { @@ -34,8 +35,22 @@ public class StochasticSoilModelUpdateData : IStochasticSoilModelUpdateStrategy { private readonly ILog log = LogManager.GetLogger(typeof(StochasticSoilModelUpdateData)); + private readonly PipingFailureMechanism failureMechanism; /// + /// Creates a new instance of . + /// + /// The failure mechanism in which the models are updated. + public StochasticSoilModelUpdateData(PipingFailureMechanism failureMechanism) + { + if (failureMechanism == null) + { + throw new ArgumentNullException(nameof(failureMechanism)); + } + this.failureMechanism = failureMechanism; + } + + /// /// Updates the . /// Updates stochastic soil models in that are part of /// . @@ -69,25 +84,48 @@ throw new ArgumentNullException(nameof(targetCollection)); } - var updatedModels = new List(); + var removedModels = targetCollection.ToList(); + var updatedOrAddedModels = new List(); + var affectedObjects = new List { targetCollection }; foreach (var readModel in readStochasticSoilModels) { var existingModel = targetCollection.SingleOrDefault(existing => existing.Name.Equals(readModel.Name)); if (existingModel != null) { - existingModel.Update(readModel); - updatedModels.Add(existingModel); + StochasticSoilModelProfileDifference difference = existingModel.Update(readModel); + RemoveStochasticSoilProfilesFromInputs(difference, affectedObjects); + + removedModels.Remove(existingModel); + updatedOrAddedModels.Add(existingModel); } else { - updatedModels.Add(readModel); + removedModels.Remove(readModel); + updatedOrAddedModels.Add(readModel); } } + foreach (var model in removedModels) + { + RemoveStochasticSoilModel(model, affectedObjects); + } targetCollection.Clear(); - targetCollection.AddRange(updatedModels, sourceFilePath); + targetCollection.AddRange(updatedOrAddedModels, sourceFilePath); - return new IObservable[] { targetCollection }.Union(updatedModels); + return affectedObjects; } + + private void RemoveStochasticSoilModel(StochasticSoilModel removedModel, List affectedObjects) + { + affectedObjects.AddRange(PipingDataSynchronizationService.RemoveStochasticSoilModel(failureMechanism, removedModel)); + } + + private void RemoveStochasticSoilProfilesFromInputs(StochasticSoilModelProfileDifference difference, List affectedObjects) + { + foreach (StochasticSoilProfile removedProfile in difference.RemovedProfiles) + { + affectedObjects.AddRange(PipingDataSynchronizationService.RemoveStochasticSoilProfileFromInput(failureMechanism, removedProfile)); + } + } } } \ No newline at end of file