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