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