Index: Riskeer/Revetment/src/Riskeer.Revetment.Service/WaveConditionsDataSynchronizationService.cs
===================================================================
diff -u -r4da2af82acf0b1d6ce385c124f871e34d9373021 -rfa82eea9c005e9a95f257da305ed0ca293e8002e
--- Riskeer/Revetment/src/Riskeer.Revetment.Service/WaveConditionsDataSynchronizationService.cs (.../WaveConditionsDataSynchronizationService.cs) (revision 4da2af82acf0b1d6ce385c124f871e34d9373021)
+++ Riskeer/Revetment/src/Riskeer.Revetment.Service/WaveConditionsDataSynchronizationService.cs (.../WaveConditionsDataSynchronizationService.cs) (revision fa82eea9c005e9a95f257da305ed0ca293e8002e)
@@ -112,6 +112,47 @@
}
///
+ /// Clears the output for calculations that corresponds with the and removes this
+ /// from the input in the given .
+ ///
+ /// The failure mechanism which contains the calculations.
+ /// The
+ /// to clear for.
+ /// The type of the failure mechanism.
+ /// The type of the calculation.
+ /// An of calculations which are affected by clearing the output.
+ /// Thrown when any parameter is null.
+ public static IEnumerable ClearWaveConditionsCalculationOutputAndRemoveTargetProbability(
+ TFailureMechanism failureMechanism, HydraulicBoundaryLocationCalculationsForTargetProbability calculationsForTargetProbability)
+ where TFailureMechanism : IFailureMechanism
+ where TCalculation : ICalculation
+ {
+ if (failureMechanism == null)
+ {
+ throw new ArgumentNullException(nameof(failureMechanism));
+ }
+
+ if (calculationsForTargetProbability == null)
+ {
+ throw new ArgumentNullException(nameof(calculationsForTargetProbability));
+ }
+
+ var affectedItems = new List();
+ foreach (TCalculation calculation in failureMechanism.Calculations.Cast()
+ .Where(c => c.InputParameters.CalculationsTargetProbability == calculationsForTargetProbability))
+ {
+ calculation.InputParameters.CalculationsTargetProbability = null;
+ if (calculation.InputParameters.WaterLevelType == WaveConditionsInputWaterLevelType.UserDefinedTargetProbability)
+ {
+ RiskeerCommonDataSynchronizationService.ClearCalculationOutput(calculation);
+ }
+ affectedItems.Add(calculation);
+ }
+
+ return affectedItems;
+ }
+
+ ///
/// Gets the based on the given .
///
/// The to get the from.
Index: Riskeer/Revetment/test/Riskeer.Revetment.Service.Test/WaveConditionsDataSynchronizationServiceTest.cs
===================================================================
diff -u -r4da2af82acf0b1d6ce385c124f871e34d9373021 -rfa82eea9c005e9a95f257da305ed0ca293e8002e
--- Riskeer/Revetment/test/Riskeer.Revetment.Service.Test/WaveConditionsDataSynchronizationServiceTest.cs (.../WaveConditionsDataSynchronizationServiceTest.cs) (revision 4da2af82acf0b1d6ce385c124f871e34d9373021)
+++ Riskeer/Revetment/test/Riskeer.Revetment.Service.Test/WaveConditionsDataSynchronizationServiceTest.cs (.../WaveConditionsDataSynchronizationServiceTest.cs) (revision fa82eea9c005e9a95f257da305ed0ca293e8002e)
@@ -204,5 +204,161 @@
Assert.IsTrue(failureMechanism.Calculations.Except(expectedAffectedCalculations).All(c => c.HasOutput));
mocks.ReplayAll();
}
+
+ [Test]
+ public void ClearWaveConditionsCalculationOutputAndRemoveTargetProbability_FailureMechanismNull_ThrowsArgumentNullException()
+ {
+ // Call
+ void Call() => WaveConditionsDataSynchronizationService.ClearWaveConditionsCalculationOutputAndRemoveTargetProbability>(
+ null, new HydraulicBoundaryLocationCalculationsForTargetProbability(0.1));
+
+ // Assert
+ var exception = Assert.Throws(Call);
+ Assert.AreEqual("failureMechanism", exception.ParamName);
+ }
+
+ [Test]
+ public void ClearWaveConditionsCalculationOutputAndRemoveTargetProbability_CalculationsForTargetProbabilityNull_ThrowsArgumentNullException()
+ {
+ // Call
+ void Call() => WaveConditionsDataSynchronizationService.ClearWaveConditionsCalculationOutputAndRemoveTargetProbability>(
+ new TestFailureMechanism(), null);
+
+ // Assert
+ var exception = Assert.Throws(Call);
+ Assert.AreEqual("calculationsForTargetProbability", exception.ParamName);
+ }
+
+ [Test]
+ public void ClearWaveConditionsCalculationOutputAndRemoveTargetProbability_WithAllData_ClearsOutputAndReturnsAffectedObjects()
+ {
+ // Setup
+ var calculationsForTargetProbabilityToClear = new HydraulicBoundaryLocationCalculationsForTargetProbability(0.1);
+ var otherCalculationsForTargetProbability = new HydraulicBoundaryLocationCalculationsForTargetProbability(0.01);
+
+ var calculation1 = new TestWaveConditionsCalculation(new TestWaveConditionsInput
+ {
+ WaterLevelType = WaveConditionsInputWaterLevelType.Signaling,
+ CalculationsTargetProbability = calculationsForTargetProbabilityToClear
+ }, true);
+ var calculation2 = new TestWaveConditionsCalculation(new TestWaveConditionsInput
+ {
+ WaterLevelType = WaveConditionsInputWaterLevelType.LowerLimit,
+ CalculationsTargetProbability = calculationsForTargetProbabilityToClear
+ }, true);
+ var calculation3 = new TestWaveConditionsCalculation(new TestWaveConditionsInput
+ {
+ WaterLevelType = WaveConditionsInputWaterLevelType.None,
+ CalculationsTargetProbability = calculationsForTargetProbabilityToClear
+ }, true);
+ var calculation4 = new TestWaveConditionsCalculation(new TestWaveConditionsInput
+ {
+ WaterLevelType = WaveConditionsInputWaterLevelType.UserDefinedTargetProbability,
+ CalculationsTargetProbability = calculationsForTargetProbabilityToClear
+ }, true);
+ var calculation5 = new TestWaveConditionsCalculation(new TestWaveConditionsInput
+ {
+ WaterLevelType = WaveConditionsInputWaterLevelType.UserDefinedTargetProbability,
+ CalculationsTargetProbability = otherCalculationsForTargetProbability
+ }, true);
+
+ var mocks = new MockRepository();
+ var failureMechanism = mocks.Stub();
+ failureMechanism.Stub(fm => fm.Calculations).Return(new[]
+ {
+ calculation1,
+ calculation2,
+ calculation3,
+ calculation4,
+ calculation5
+ });
+ mocks.ReplayAll();
+
+ TestWaveConditionsCalculation[] expectedAffectedCalculationsOutputCleared =
+ {
+ calculation4
+ };
+
+ TestWaveConditionsCalculation[] expectedAffectedCalculations =
+ {
+ calculation1,
+ calculation2,
+ calculation3,
+ calculation4
+ };
+
+ // Call
+ IEnumerable affectedCalculations = WaveConditionsDataSynchronizationService.ClearWaveConditionsCalculationOutputAndRemoveTargetProbability>(
+ failureMechanism, calculationsForTargetProbabilityToClear);
+
+ // Assert
+ CollectionAssert.AreEqual(expectedAffectedCalculations, affectedCalculations);
+ Assert.IsTrue(expectedAffectedCalculationsOutputCleared.All(c => !c.HasOutput));
+ Assert.IsTrue(failureMechanism.Calculations.Except(expectedAffectedCalculationsOutputCleared).All(c => c.HasOutput));
+ mocks.ReplayAll();
+ }
+
+ [Test]
+ public void ClearWaveConditionsCalculationOutputAndRemoveTargetProbability_WithAllData_RemovesTargetProbabilityAndReturnsAffectedObjects()
+ {
+ // Setup
+ var calculationsForTargetProbabilityToClear = new HydraulicBoundaryLocationCalculationsForTargetProbability(0.1);
+ var otherCalculationsForTargetProbability = new HydraulicBoundaryLocationCalculationsForTargetProbability(0.01);
+
+ var calculation1 = new TestWaveConditionsCalculation(new TestWaveConditionsInput
+ {
+ WaterLevelType = WaveConditionsInputWaterLevelType.Signaling,
+ CalculationsTargetProbability = calculationsForTargetProbabilityToClear
+ }, true);
+ var calculation2 = new TestWaveConditionsCalculation(new TestWaveConditionsInput
+ {
+ WaterLevelType = WaveConditionsInputWaterLevelType.LowerLimit,
+ CalculationsTargetProbability = calculationsForTargetProbabilityToClear
+ }, true);
+ var calculation3 = new TestWaveConditionsCalculation(new TestWaveConditionsInput
+ {
+ WaterLevelType = WaveConditionsInputWaterLevelType.None,
+ CalculationsTargetProbability = calculationsForTargetProbabilityToClear
+ }, true);
+ var calculation4 = new TestWaveConditionsCalculation(new TestWaveConditionsInput
+ {
+ WaterLevelType = WaveConditionsInputWaterLevelType.UserDefinedTargetProbability,
+ CalculationsTargetProbability = calculationsForTargetProbabilityToClear
+ }, true);
+ var calculation5 = new TestWaveConditionsCalculation(new TestWaveConditionsInput
+ {
+ WaterLevelType = WaveConditionsInputWaterLevelType.UserDefinedTargetProbability,
+ CalculationsTargetProbability = otherCalculationsForTargetProbability
+ }, true);
+
+ var mocks = new MockRepository();
+ var failureMechanism = mocks.Stub();
+ failureMechanism.Stub(fm => fm.Calculations).Return(new[]
+ {
+ calculation1,
+ calculation2,
+ calculation3,
+ calculation4,
+ calculation5
+ });
+ mocks.ReplayAll();
+
+ TestWaveConditionsCalculation[] expectedAffectedCalculations =
+ {
+ calculation1,
+ calculation2,
+ calculation3,
+ calculation4
+ };
+
+ // Call
+ IEnumerable affectedCalculations = WaveConditionsDataSynchronizationService.ClearWaveConditionsCalculationOutputAndRemoveTargetProbability>(
+ failureMechanism, calculationsForTargetProbabilityToClear);
+
+ // Assert
+ CollectionAssert.AreEqual(expectedAffectedCalculations, affectedCalculations);
+ Assert.IsTrue(expectedAffectedCalculations.All(c => c.InputParameters.CalculationsTargetProbability == null));
+ mocks.ReplayAll();
+ }
}
}
\ No newline at end of file