Index: Riskeer/Integration/src/Riskeer.Integration.Data/AssessmentSection.cs =================================================================== diff -u -r7fc10264f0bb04fb75b3879b81dcb5ab8e7287f1 -r4832cbf81ea1488c49d06ffa0d1a57764915793b --- Riskeer/Integration/src/Riskeer.Integration.Data/AssessmentSection.cs (.../AssessmentSection.cs) (revision 7fc10264f0bb04fb75b3879b81dcb5ab8e7287f1) +++ Riskeer/Integration/src/Riskeer.Integration.Data/AssessmentSection.cs (.../AssessmentSection.cs) (revision 4832cbf81ea1488c49d06ffa0d1a57764915793b) @@ -22,6 +22,7 @@ using System; using System.Collections.Generic; using System.ComponentModel; +using System.Linq; using Core.Common.Base; using Riskeer.ClosingStructures.Data; using Riskeer.Common.Data; @@ -233,6 +234,32 @@ } } + /// + /// Removes hydraulic boundary location calculations for . + /// + /// The hydraulic boundary locations to remove calculations for. + /// Thrown when is null. + public void RemoveHydraulicBoundaryLocationCalculations(IEnumerable hydraulicBoundaryLocations) + { + if (hydraulicBoundaryLocations == null) + { + throw new ArgumentNullException(nameof(hydraulicBoundaryLocations)); + } + + RemoveHydraulicBoundaryLocationCalculations(waterLevelCalculationsForSignalFloodingProbability, hydraulicBoundaryLocations); + RemoveHydraulicBoundaryLocationCalculations(waterLevelCalculationsForMaximumAllowableFloodingProbability, hydraulicBoundaryLocations); + + foreach (HydraulicBoundaryLocationCalculationsForTargetProbability element in WaterLevelCalculationsForUserDefinedTargetProbabilities) + { + RemoveHydraulicBoundaryLocationCalculations(element.HydraulicBoundaryLocationCalculations, hydraulicBoundaryLocations); + } + + foreach (HydraulicBoundaryLocationCalculationsForTargetProbability element in WaveHeightCalculationsForUserDefinedTargetProbabilities) + { + RemoveHydraulicBoundaryLocationCalculations(element.HydraulicBoundaryLocationCalculations, hydraulicBoundaryLocations); + } + } + public IEnumerable GetFailureMechanisms() { yield return Piping; @@ -268,22 +295,6 @@ SetFailureMechanismsToBeInAssembly(); } - private void ClearHydraulicBoundaryLocationCalculations() - { - waterLevelCalculationsForSignalFloodingProbability.Clear(); - waterLevelCalculationsForMaximumAllowableFloodingProbability.Clear(); - - foreach (HydraulicBoundaryLocationCalculationsForTargetProbability element in WaterLevelCalculationsForUserDefinedTargetProbabilities) - { - element.HydraulicBoundaryLocationCalculations.Clear(); - } - - foreach (HydraulicBoundaryLocationCalculationsForTargetProbability element in WaveHeightCalculationsForUserDefinedTargetProbabilities) - { - element.HydraulicBoundaryLocationCalculations.Clear(); - } - } - private void AddHydraulicBoundaryLocationCalculations(HydraulicBoundaryLocation hydraulicBoundaryLocation) { waterLevelCalculationsForSignalFloodingProbability.Add(new HydraulicBoundaryLocationCalculation(hydraulicBoundaryLocation)); @@ -300,6 +311,12 @@ } } + private static void RemoveHydraulicBoundaryLocationCalculations(List locationCalculations, + IEnumerable locations) + { + locationCalculations.RemoveAll(lc => locations.Contains(lc.HydraulicBoundaryLocation)); + } + private void SetFailureMechanismsToBeInAssembly() { Piping.InAssembly = Composition != AssessmentSectionComposition.Dune; Index: Riskeer/Integration/test/Riskeer.Integration.Data.Test/AssessmentSectionTest.cs =================================================================== diff -u -r7fc10264f0bb04fb75b3879b81dcb5ab8e7287f1 -r4832cbf81ea1488c49d06ffa0d1a57764915793b --- Riskeer/Integration/test/Riskeer.Integration.Data.Test/AssessmentSectionTest.cs (.../AssessmentSectionTest.cs) (revision 7fc10264f0bb04fb75b3879b81dcb5ab8e7287f1) +++ Riskeer/Integration/test/Riskeer.Integration.Data.Test/AssessmentSectionTest.cs (.../AssessmentSectionTest.cs) (revision 4832cbf81ea1488c49d06ffa0d1a57764915793b) @@ -336,6 +336,65 @@ Assert.AreEqual(2, waveHeightCalculationsForTargetProbability.HydraulicBoundaryLocationCalculations.Count); } + [Test] + public void RemoveHydraulicBoundaryLocationCalculations_HydraulicBoundaryLocationsNull_ThrowsArgumentNullException() + { + // Setup + var random = new Random(21); + var assessmentSection = new AssessmentSection(random.NextEnumValue()); + + // Call + void Call() => assessmentSection.RemoveHydraulicBoundaryLocationCalculations(null); + + // Assert + var exception = Assert.Throws(Call); + Assert.AreEqual("hydraulicBoundaryLocations", exception.ParamName); + } + + [Test] + public void RemoveHydraulicBoundaryLocationCalculations_MultipleHydraulicBoundaryLocations_RemovesExpectedCalculations() + { + // Setup + var random = new Random(21); + var assessmentSection = new AssessmentSection(random.NextEnumValue()); + + var waterLevelCalculationsForTargetProbability = new HydraulicBoundaryLocationCalculationsForTargetProbability(0.1); + assessmentSection.WaterLevelCalculationsForUserDefinedTargetProbabilities.Add(waterLevelCalculationsForTargetProbability); + + var waveHeightCalculationsForTargetProbability = new HydraulicBoundaryLocationCalculationsForTargetProbability(0.01); + assessmentSection.WaveHeightCalculationsForUserDefinedTargetProbabilities.Add(waveHeightCalculationsForTargetProbability); + + var location1 = new TestHydraulicBoundaryLocation(); + var location2 = new TestHydraulicBoundaryLocation(); + var location3 = new TestHydraulicBoundaryLocation(); + + assessmentSection.SetHydraulicBoundaryLocationCalculations(new HydraulicBoundaryLocation[] + { + location1, + location2, + location3 + }); + + // Precondition + Assert.AreEqual(3, assessmentSection.WaterLevelCalculationsForSignalFloodingProbability.Count()); + Assert.AreEqual(3, assessmentSection.WaterLevelCalculationsForMaximumAllowableFloodingProbability.Count()); + Assert.AreEqual(3, waterLevelCalculationsForTargetProbability.HydraulicBoundaryLocationCalculations.Count); + Assert.AreEqual(3, waveHeightCalculationsForTargetProbability.HydraulicBoundaryLocationCalculations.Count); + + // Call + assessmentSection.RemoveHydraulicBoundaryLocationCalculations(new[] + { + location2, + location3 + }); + + // Assert + Assert.AreSame(location1, assessmentSection.WaterLevelCalculationsForSignalFloodingProbability.Single().HydraulicBoundaryLocation); + Assert.AreSame(location1, assessmentSection.WaterLevelCalculationsForMaximumAllowableFloodingProbability.Single().HydraulicBoundaryLocation); + Assert.AreSame(location1, waterLevelCalculationsForTargetProbability.HydraulicBoundaryLocationCalculations.Single().HydraulicBoundaryLocation); + Assert.AreSame(location1, waveHeightCalculationsForTargetProbability.HydraulicBoundaryLocationCalculations.Single().HydraulicBoundaryLocation); + } + private static IEnumerable GetFailureMechanismInAssemblyStates() { yield return new TestCaseData(AssessmentSectionComposition.Dike, new[]