Index: Ringtoets/ClosingStructures/src/Ringtoets.ClosingStructures.Service/ClosingStructuresDataSynchronizationService.cs
===================================================================
diff -u -rac8798cf0a66cf04df1294d4fd08e0b1915a5b91 -r916bdbd134da55d8f1373fea9b29aba97db34348
--- Ringtoets/ClosingStructures/src/Ringtoets.ClosingStructures.Service/ClosingStructuresDataSynchronizationService.cs (.../ClosingStructuresDataSynchronizationService.cs) (revision ac8798cf0a66cf04df1294d4fd08e0b1915a5b91)
+++ Ringtoets/ClosingStructures/src/Ringtoets.ClosingStructures.Service/ClosingStructuresDataSynchronizationService.cs (.../ClosingStructuresDataSynchronizationService.cs) (revision 916bdbd134da55d8f1373fea9b29aba97db34348)
@@ -25,6 +25,8 @@
using System.Linq;
using Core.Common.Base;
using Ringtoets.ClosingStructures.Data;
+using Ringtoets.ClosingStructures.Util;
+using Ringtoets.Common.Data;
using Ringtoets.Common.Data.Calculation;
using Ringtoets.Common.Data.Hydraulics;
using Ringtoets.Common.Data.Structures;
@@ -38,6 +40,47 @@
public static class ClosingStructuresDataSynchronizationService
{
///
+ /// Removes the , unassigns it from the calculations in
+ /// and clears all dependent data, either directly or indirectly.
+ ///
+ /// The structure to be removed.
+ /// The
+ /// to clear the data from.
+ /// All objects affected by the removal.
+ /// Thrown when any parameter is null.
+ public static IEnumerable RemoveStructure(ClosingStructure structure,
+ ClosingStructuresFailureMechanism failureMechanism)
+ {
+ if (structure == null)
+ {
+ throw new ArgumentNullException(nameof(structure));
+ }
+
+ if (failureMechanism == null)
+ {
+ throw new ArgumentNullException(nameof(failureMechanism));
+ }
+
+ IEnumerable> calculations =
+ failureMechanism.Calculations.Cast>();
+
+ StructuresCalculation[] calculationWithRemovedStructure = calculations
+ .Where(c => ReferenceEquals(c.InputParameters.Structure, structure))
+ .ToArray();
+
+ List changedObservables = ClearStructureDependentData(
+ failureMechanism.SectionResults2,
+ calculationWithRemovedStructure,
+ calculations);
+
+ StructureCollection structures = failureMechanism.ClosingStructures;
+ structures.Remove(structure);
+ changedObservables.Add(structures);
+
+ return changedObservables;
+ }
+
+ ///
/// Clears the output for all calculations in the .
///
/// The
@@ -133,7 +176,28 @@
input
};
}
+
return Enumerable.Empty();
}
+
+ private static List ClearStructureDependentData(IEnumerable sectionResults,
+ IEnumerable> calculationWithRemovedStructure,
+ IEnumerable> structureCalculations)
+ {
+ var changedObservables = new List();
+ foreach (StructuresCalculation calculation in calculationWithRemovedStructure)
+ {
+ changedObservables.AddRange(RingtoetsCommonDataSynchronizationService.ClearCalculationOutput(calculation));
+
+ calculation.InputParameters.ClearStructure();
+ changedObservables.Add(calculation.InputParameters);
+ }
+
+ IEnumerable affectedSectionResults =
+ ClosingStructuresHelper.UpdateCalculationToSectionResultAssignments(sectionResults, structureCalculations);
+
+ changedObservables.AddRange(affectedSectionResults);
+ return changedObservables;
+ }
}
}
\ No newline at end of file