Index: Riskeer/Common/src/Riskeer.Common.Service/RiskeerCommonDataSynchronizationService.cs =================================================================== diff -u -rae6913dc9e65387cd005077a2f056b5cd2fd159f -r74be61490932801465aed774fde44995db15dffc --- Riskeer/Common/src/Riskeer.Common.Service/RiskeerCommonDataSynchronizationService.cs (.../RiskeerCommonDataSynchronizationService.cs) (revision ae6913dc9e65387cd005077a2f056b5cd2fd159f) +++ Riskeer/Common/src/Riskeer.Common.Service/RiskeerCommonDataSynchronizationService.cs (.../RiskeerCommonDataSynchronizationService.cs) (revision 74be61490932801465aed774fde44995db15dffc) @@ -58,6 +58,39 @@ } /// + /// Clears the illustration points of the provided hydraulic boundary location calculations. + /// + /// The calculations for which the illustration points need to be cleared. + /// All objects changed during the clear. + /// Thrown when is null. + public static IEnumerable ClearHydraulicBoundaryLocationCalculationIllustrationPoints(IEnumerable calculations) + { + if (calculations == null) + { + throw new ArgumentNullException(nameof(calculations)); + } + + var affectedCalculations = new List(); + foreach (HydraulicBoundaryLocationCalculation calculation in calculations) + { + if (calculation.HasOutput && calculation.Output.HasGeneralResult) + { + HydraulicBoundaryLocationCalculationOutput originalOutput = calculation.Output; + calculation.Output = new HydraulicBoundaryLocationCalculationOutput(originalOutput.Result, + originalOutput.TargetProbability, + originalOutput.TargetReliability, + originalOutput.CalculatedProbability, + originalOutput.CalculatedReliability, + originalOutput.CalculationConvergence, + null); + affectedCalculations.Add(calculation); + } + } + + return affectedCalculations; + } + + /// /// Clears the output of the given . /// /// The to clear the output for. Index: Riskeer/Common/test/Riskeer.Common.Service.Test/RiskeerCommonDataSynchronizationServiceTest.cs =================================================================== diff -u -rae6913dc9e65387cd005077a2f056b5cd2fd159f -r74be61490932801465aed774fde44995db15dffc --- Riskeer/Common/test/Riskeer.Common.Service.Test/RiskeerCommonDataSynchronizationServiceTest.cs (.../RiskeerCommonDataSynchronizationServiceTest.cs) (revision ae6913dc9e65387cd005077a2f056b5cd2fd159f) +++ Riskeer/Common/test/Riskeer.Common.Service.Test/RiskeerCommonDataSynchronizationServiceTest.cs (.../RiskeerCommonDataSynchronizationServiceTest.cs) (revision 74be61490932801465aed774fde44995db15dffc) @@ -30,6 +30,7 @@ using Riskeer.Common.Data.Hydraulics; using Riskeer.Common.Data.Structures; using Riskeer.Common.Data.TestUtil; +using Riskeer.Common.Data.TestUtil.IllustrationPoints; namespace Riskeer.Common.Service.Test { @@ -63,7 +64,7 @@ Output = new TestHydraulicBoundaryLocationCalculationOutput(random.NextDouble()) }; - var calculations = new ObservableList + HydraulicBoundaryLocationCalculation[] calculations = { new HydraulicBoundaryLocationCalculation(new TestHydraulicBoundaryLocation()), calculationWithOutput1, @@ -85,6 +86,87 @@ } [Test] + public void ClearHydraulicBoundaryLocationCalculationIllustrationPoints_CalculationsNull_ThrowsArgumentNullException() + { + // Call + TestDelegate call = () => RiskeerCommonDataSynchronizationService.ClearHydraulicBoundaryLocationCalculationIllustrationPoints(null); + + // Assert + var exception = Assert.Throws(call); + Assert.AreEqual("calculations", exception.ParamName); + } + + [Test] + public void ClearHydraulicBoundaryLocationCalculationIllustrationPoints_CalculationsWithAndWithoutIllustrationPoints_ClearsIllustrationPointAndReturnsAffectedCalculations() + { + // Setup + var random = new Random(21); + + var originalOutputWithIllustrationPoints1 = new TestHydraulicBoundaryLocationCalculationOutput(random.NextDouble(), + new TestGeneralResultSubMechanismIllustrationPoint()); + var calculationWithIllustrationPoints1 = new HydraulicBoundaryLocationCalculation(new TestHydraulicBoundaryLocation()) + { + Output = originalOutputWithIllustrationPoints1 + }; + + var originalOutputWithIllustrationPoints2 = new TestHydraulicBoundaryLocationCalculationOutput(random.NextDouble(), + new TestGeneralResultSubMechanismIllustrationPoint()); + var calculationWithIllustrationPoints2 = new HydraulicBoundaryLocationCalculation(new TestHydraulicBoundaryLocation()) + { + Output = originalOutputWithIllustrationPoints2 + }; + + var originalOutput1 = new TestHydraulicBoundaryLocationCalculationOutput(random.NextDouble()); + var calculationWithOutput1 = new HydraulicBoundaryLocationCalculation(new TestHydraulicBoundaryLocation()) + { + Output = originalOutput1 + }; + + var originalOutput2 = new TestHydraulicBoundaryLocationCalculationOutput(random.NextDouble()); + var calculationWithOutput2 = new HydraulicBoundaryLocationCalculation(new TestHydraulicBoundaryLocation()) + { + Output = originalOutput2 + }; + + HydraulicBoundaryLocationCalculation[] calculations = + { + new HydraulicBoundaryLocationCalculation(new TestHydraulicBoundaryLocation()), + calculationWithOutput1, + calculationWithIllustrationPoints1, + new HydraulicBoundaryLocationCalculation(new TestHydraulicBoundaryLocation()), + calculationWithOutput2, + calculationWithIllustrationPoints2, + new HydraulicBoundaryLocationCalculation(new TestHydraulicBoundaryLocation()) + }; + + // Call + IEnumerable affectedCalculations = RiskeerCommonDataSynchronizationService.ClearHydraulicBoundaryLocationCalculationIllustrationPoints(calculations); + + // Assert + CollectionAssert.AreEquivalent(new[] + { + calculationWithIllustrationPoints1, + calculationWithIllustrationPoints2 + }, affectedCalculations); + + HydraulicBoundaryLocationCalculation[] calculationWithOutputs = + { + calculationWithOutput1, + calculationWithIllustrationPoints1, + calculationWithOutput2, + calculationWithIllustrationPoints2 + }; + Assert.IsTrue(calculationWithOutputs.All(calc => calc.HasOutput)); + Assert.IsTrue(calculationWithOutputs.All(calc => !calc.Output.HasGeneralResult)); + + AssertHydraulicBoundaryLocationOutput(originalOutput1, calculationWithOutput1.Output); + AssertHydraulicBoundaryLocationOutput(originalOutput2, calculationWithOutput2.Output); + + AssertHydraulicBoundaryLocationOutput(originalOutputWithIllustrationPoints1, calculationWithIllustrationPoints1.Output); + AssertHydraulicBoundaryLocationOutput(originalOutputWithIllustrationPoints2, calculationWithIllustrationPoints2.Output); + } + + [Test] public void ClearCalculationOutput_CalculationNull_ThrowsArgumentNullException() { // Call @@ -191,6 +273,17 @@ }, affectedObjects); } + private static void AssertHydraulicBoundaryLocationOutput(HydraulicBoundaryLocationCalculationOutput expectedOutput, + HydraulicBoundaryLocationCalculationOutput actualOutput) + { + Assert.AreEqual(expectedOutput.Result, actualOutput.Result); + Assert.AreEqual(expectedOutput.CalculatedProbability, actualOutput.CalculatedProbability); + Assert.AreEqual(expectedOutput.CalculatedReliability, actualOutput.CalculatedReliability); + Assert.AreEqual(expectedOutput.TargetProbability, actualOutput.TargetProbability); + Assert.AreEqual(expectedOutput.TargetReliability, actualOutput.TargetReliability); + Assert.AreEqual(expectedOutput.CalculationConvergence, actualOutput.CalculationConvergence); + } + private class TestStructureInput : StructuresInputBase { public override bool IsStructureInputSynchronized