Index: Riskeer/Piping/src/Riskeer.Piping.Service/PipingDataSynchronizationService.cs
===================================================================
diff -u -rc37eebd9171a53987f5929013edbe3d82e618ed0 -rf3889f7c9d59a70d2da5be02cdb3858435dad29f
--- Riskeer/Piping/src/Riskeer.Piping.Service/PipingDataSynchronizationService.cs (.../PipingDataSynchronizationService.cs) (revision c37eebd9171a53987f5929013edbe3d82e618ed0)
+++ Riskeer/Piping/src/Riskeer.Piping.Service/PipingDataSynchronizationService.cs (.../PipingDataSynchronizationService.cs) (revision f3889f7c9d59a70d2da5be02cdb3858435dad29f)
@@ -31,6 +31,7 @@
using Riskeer.Common.Service;
using Riskeer.Piping.Data;
using Riskeer.Piping.Data.Probabilistic;
+using Riskeer.Piping.Data.SemiProbabilistic;
using Riskeer.Piping.Data.SoilProfile;
using Riskeer.Piping.Primitives;
@@ -86,6 +87,30 @@
}
///
+ /// Clears the output for all calculations in the ,
+ /// except for the where
+ /// is true.
+ ///
+ /// The which contains the calculations.
+ /// An of calculations which are affected by clearing the output.
+ /// Thrown when is null.
+ public static IEnumerable ClearAllCalculationOutputWithoutManualAssessmentLevel(PipingFailureMechanism failureMechanism)
+ {
+ if (failureMechanism == null)
+ {
+ throw new ArgumentNullException(nameof(failureMechanism));
+ }
+
+ return failureMechanism.Calculations
+ .OfType>()
+ .Except(failureMechanism.Calculations
+ .OfType()
+ .Where(c => c.InputParameters.UseAssessmentLevelManualInput))
+ .SelectMany(ClearCalculationOutput)
+ .ToArray();
+ }
+
+ ///
/// Clears the output for all in the .
///
/// The which contains the calculations.
Index: Riskeer/Piping/test/Riskeer.Piping.Service.Test/PipingDataSynchronizationServiceTest.cs
===================================================================
diff -u -rc37eebd9171a53987f5929013edbe3d82e618ed0 -rf3889f7c9d59a70d2da5be02cdb3858435dad29f
--- Riskeer/Piping/test/Riskeer.Piping.Service.Test/PipingDataSynchronizationServiceTest.cs (.../PipingDataSynchronizationServiceTest.cs) (revision c37eebd9171a53987f5929013edbe3d82e618ed0)
+++ Riskeer/Piping/test/Riskeer.Piping.Service.Test/PipingDataSynchronizationServiceTest.cs (.../PipingDataSynchronizationServiceTest.cs) (revision f3889f7c9d59a70d2da5be02cdb3858435dad29f)
@@ -28,6 +28,7 @@
using Riskeer.Common.Service;
using Riskeer.Piping.Data;
using Riskeer.Piping.Data.Probabilistic;
+using Riskeer.Piping.Data.SemiProbabilistic;
using Riskeer.Piping.Data.SoilProfile;
using Riskeer.Piping.Data.TestUtil;
using Riskeer.Piping.Primitives;
@@ -114,6 +115,73 @@
}
[Test]
+ public void ClearAllCalculationOutputWithoutManualAssessmentLevel_FailureMechanismNull_ThrowsArgumentNullException()
+ {
+ // Call
+ void Call() => PipingDataSynchronizationService.ClearAllCalculationOutputWithoutManualAssessmentLevel(null);
+
+ // Assert
+ var exception = Assert.Throws(Call);
+ Assert.AreEqual("failureMechanism", exception.ParamName);
+ }
+
+ [Test]
+ public void ClearAllCalculationOutputWithoutManualAssessmentLevel_WithVariousCalculations_ClearsCalculationsOutputAndReturnsAffectedCalculations()
+ {
+ // Setup
+ PipingFailureMechanism failureMechanism = PipingTestDataGenerator.GetPipingFailureMechanismWithAllCalculationConfigurations();
+ failureMechanism.CalculationsGroup.Children.AddRange(new IPipingCalculationScenario[]
+ {
+ new SemiProbabilisticPipingCalculationScenario
+ {
+ Output = PipingTestDataGenerator.GetRandomSemiProbabilisticPipingOutput()
+ },
+ new SemiProbabilisticPipingCalculationScenario
+ {
+ InputParameters =
+ {
+ UseAssessmentLevelManualInput = true
+ },
+ Output = PipingTestDataGenerator.GetRandomSemiProbabilisticPipingOutput()
+ },
+ new SemiProbabilisticPipingCalculationScenario(),
+ new ProbabilisticPipingCalculationScenario(),
+ new ProbabilisticPipingCalculationScenario
+ {
+ Output = PipingTestDataGenerator.GetRandomProbabilisticPipingOutputWithIllustrationPoints()
+ },
+ new ProbabilisticPipingCalculationScenario
+ {
+ Output = PipingTestDataGenerator.GetRandomProbabilisticPipingOutputWithoutIllustrationPoints()
+ }
+ });
+
+ SemiProbabilisticPipingCalculationScenario[] exceptCalculations = failureMechanism.Calculations
+ .OfType()
+ .Where(c => c.InputParameters.UseAssessmentLevelManualInput)
+ .ToArray();
+
+ IPipingCalculationScenario[] expectedAffectedCalculations = failureMechanism.Calculations
+ .OfType>()
+ .Except(exceptCalculations)
+ .Where(c => c.HasOutput)
+ .ToArray();
+
+ // Call
+ IEnumerable affectedItems = PipingDataSynchronizationService.ClearAllCalculationOutputWithoutManualAssessmentLevel(failureMechanism);
+
+ // Assert
+ // Note: To make sure the clear is performed regardless of what is done with
+ // the return result, no ToArray() should be called before these assertions:
+ Assert.IsTrue(failureMechanism.Calculations
+ .OfType>()
+ .Except(exceptCalculations)
+ .All(c => !c.HasOutput));
+
+ CollectionAssert.AreEquivalent(expectedAffectedCalculations, affectedItems);
+ }
+
+ [Test]
public void ClearAllProbabilisticCalculationOutput_FailureMechanismNull_ThrowsArgumentNullException()
{
// Call