Index: Riskeer/Integration/src/Riskeer.Integration.Service/RiskeerDataSynchronizationService.cs
===================================================================
diff -u -r008f330233a663eff7365bd639b4a0096242b6ca -r096183e77e31be862775750ba697922a6e6d6dd8
--- Riskeer/Integration/src/Riskeer.Integration.Service/RiskeerDataSynchronizationService.cs (.../RiskeerDataSynchronizationService.cs) (revision 008f330233a663eff7365bd639b4a0096242b6ca)
+++ Riskeer/Integration/src/Riskeer.Integration.Service/RiskeerDataSynchronizationService.cs (.../RiskeerDataSynchronizationService.cs) (revision 096183e77e31be862775750ba697922a6e6d6dd8)
@@ -90,7 +90,8 @@
switch (failureMechanism)
{
case PipingFailureMechanism pipingFailureMechanism:
- changedObservables.AddRange(PipingDataSynchronizationService.ClearAllCalculationOutputAndHydraulicBoundaryLocations(pipingFailureMechanism));
+ changedObservables.AddRange(PipingDataSynchronizationService.ClearAllCalculationOutputAndHydraulicBoundaryLocations(
+ pipingFailureMechanism, hydraulicBoundaryLocations));
break;
case GrassCoverErosionInwardsFailureMechanism grassCoverErosionInwardsFailureMechanism:
changedObservables.AddRange(GrassCoverErosionInwardsDataSynchronizationService.ClearAllCalculationOutputAndHydraulicBoundaryLocations(grassCoverErosionInwardsFailureMechanism));
Index: Riskeer/Piping/src/Riskeer.Piping.Service/PipingDataSynchronizationService.cs
===================================================================
diff -u -r9e9976818f1b446948c3bf815cafe2e023f98ac1 -r096183e77e31be862775750ba697922a6e6d6dd8
--- Riskeer/Piping/src/Riskeer.Piping.Service/PipingDataSynchronizationService.cs (.../PipingDataSynchronizationService.cs) (revision 9e9976818f1b446948c3bf815cafe2e023f98ac1)
+++ Riskeer/Piping/src/Riskeer.Piping.Service/PipingDataSynchronizationService.cs (.../PipingDataSynchronizationService.cs) (revision 096183e77e31be862775750ba697922a6e6d6dd8)
@@ -85,27 +85,42 @@
///
/// Clears:
///
- /// - The for all the calculations in the ;
- /// - The output for all the calculations in the ,
+ ///
- The for all the calculations in the
+ /// that uses an from ;
+ /// - The output for all these calculations in the ,
/// except for the where
/// is true.
///
///
/// The which contains the calculations.
+ /// The hydraulic boundary locations to clear for.
/// An of objects which are affected by removing data.
- /// Thrown when is null.
- public static IEnumerable ClearAllCalculationOutputAndHydraulicBoundaryLocations(PipingFailureMechanism failureMechanism)
+ /// Thrown when any parameter is null.
+ public static IEnumerable ClearAllCalculationOutputAndHydraulicBoundaryLocations(PipingFailureMechanism failureMechanism,
+ IEnumerable hydraulicBoundaryLocations)
{
if (failureMechanism == null)
{
throw new ArgumentNullException(nameof(failureMechanism));
}
- var affectedItems = new List();
- affectedItems.AddRange(ClearAllSemiProbabilisticCalculationOutputWithoutManualAssessmentLevel(failureMechanism));
- affectedItems.AddRange(ClearAllProbabilisticCalculationOutput(failureMechanism));
+ if (hydraulicBoundaryLocations == null)
+ {
+ throw new ArgumentNullException(nameof(hydraulicBoundaryLocations));
+ }
- foreach (IPipingCalculationScenario calculation in failureMechanism.Calculations.Cast>())
+ List affectedItems = failureMechanism.Calculations
+ .OfType()
+ .Where(c => !c.InputParameters.UseAssessmentLevelManualInput)
+ .Cast>()
+ .Concat(failureMechanism.Calculations.OfType())
+ .Where(c => hydraulicBoundaryLocations.Contains(c.InputParameters.HydraulicBoundaryLocation))
+ .SelectMany(RiskeerCommonDataSynchronizationService.ClearCalculationOutput)
+ .ToList();
+
+ foreach (IPipingCalculationScenario calculation in failureMechanism.Calculations.Cast>()
+ .Where(c => hydraulicBoundaryLocations.Contains(
+ c.InputParameters.HydraulicBoundaryLocation)))
{
affectedItems.AddRange(RiskeerCommonDataSynchronizationService.ClearHydraulicBoundaryLocation(calculation.InputParameters));
}
Index: Riskeer/Piping/test/Riskeer.Piping.Service.Test/PipingDataSynchronizationServiceTest.cs
===================================================================
diff -u -r9e9976818f1b446948c3bf815cafe2e023f98ac1 -r096183e77e31be862775750ba697922a6e6d6dd8
--- Riskeer/Piping/test/Riskeer.Piping.Service.Test/PipingDataSynchronizationServiceTest.cs (.../PipingDataSynchronizationServiceTest.cs) (revision 9e9976818f1b446948c3bf815cafe2e023f98ac1)
+++ Riskeer/Piping/test/Riskeer.Piping.Service.Test/PipingDataSynchronizationServiceTest.cs (.../PipingDataSynchronizationServiceTest.cs) (revision 096183e77e31be862775750ba697922a6e6d6dd8)
@@ -25,6 +25,9 @@
using Core.Common.Base;
using NUnit.Framework;
using Riskeer.Common.Data.Calculation;
+using Riskeer.Common.Data.Hydraulics;
+using Riskeer.Common.Data.TestUtil;
+using Riskeer.Common.Data.TestUtil.IllustrationPoints;
using Riskeer.Common.Service;
using Riskeer.Piping.Data;
using Riskeer.Piping.Data.Probabilistic;
@@ -151,42 +154,85 @@
public void ClearAllCalculationOutputAndHydraulicBoundaryLocations_FailureMechanismNull_ThrowsArgumentNullException()
{
// Call
- void Call() => PipingDataSynchronizationService.ClearAllCalculationOutputAndHydraulicBoundaryLocations(null);
+ void Call() => PipingDataSynchronizationService.ClearAllCalculationOutputAndHydraulicBoundaryLocations(null, Enumerable.Empty());
// Assert
var exception = Assert.Throws(Call);
Assert.AreEqual("failureMechanism", exception.ParamName);
}
[Test]
+ public void ClearAllCalculationOutputAndHydraulicBoundaryLocations_HydraulicBoundaryLocationsNull_ThrowsArgumentNullException()
+ {
+ // Call
+ void Call() => PipingDataSynchronizationService.ClearAllCalculationOutputAndHydraulicBoundaryLocations(new PipingFailureMechanism(), null);
+
+ // Assert
+ var exception = Assert.Throws(Call);
+ Assert.AreEqual("hydraulicBoundaryLocations", exception.ParamName);
+ }
+
+ [Test]
public void ClearAllCalculationOutputAndHydraulicBoundaryLocations_WithVariousCalculations_ClearsHydraulicBoundaryLocationAndCalculationsAndReturnsAffectedObjects()
{
// Setup
- PipingFailureMechanism failureMechanism = PipingTestDataGenerator.GetPipingFailureMechanismWithAllCalculationConfigurations();
+ var failureMechanism = new PipingFailureMechanism();
+ var hydraulicBoundaryLocation = new TestHydraulicBoundaryLocation();
+ PipingTestDataGenerator.ConfigureFailureMechanismWithAllCalculationConfigurations(failureMechanism, hydraulicBoundaryLocation);
+ failureMechanism.CalculationsGroup.Children.AddRange(new IPipingCalculationScenario[]
+ {
+ new SemiProbabilisticPipingCalculationScenario
+ {
+ InputParameters =
+ {
+ UseAssessmentLevelManualInput = false,
+ HydraulicBoundaryLocation = new TestHydraulicBoundaryLocation()
+ },
+ Output = new SemiProbabilisticPipingOutput(new SemiProbabilisticPipingOutput.ConstructionProperties())
+ },
+ new ProbabilisticPipingCalculationScenario
+ {
+ InputParameters =
+ {
+ HydraulicBoundaryLocation = new TestHydraulicBoundaryLocation()
+ },
+ Output = new ProbabilisticPipingOutput(new TestPartialProbabilisticPipingOutput(0, new TestGeneralResult()),
+ new TestPartialProbabilisticPipingOutput(0, new TestGeneralResult()))
+ },
+ new TestPipingCalculationScenario(new TestPipingInput
+ {
+ HydraulicBoundaryLocation = new TestHydraulicBoundaryLocation()
+ })
+ });
+
IPipingCalculationScenario[] calculations = failureMechanism.Calculations.Cast>()
.ToArray();
- var expectedAffectedItems = new List();
- expectedAffectedItems.AddRange(calculations.OfType()
- .Where(c => !c.InputParameters.UseAssessmentLevelManualInput
- && c.HasOutput));
- expectedAffectedItems.AddRange(calculations.OfType()
- .Where(c => c.HasOutput));
+ var expectedAffectedCalculations = new List>();
+ expectedAffectedCalculations.AddRange(calculations.OfType()
+ .Where(c => !c.InputParameters.UseAssessmentLevelManualInput
+ && c.InputParameters.HydraulicBoundaryLocation == hydraulicBoundaryLocation
+ && c.HasOutput));
+ expectedAffectedCalculations.AddRange(calculations.OfType()
+ .Where(c => c.InputParameters.HydraulicBoundaryLocation == hydraulicBoundaryLocation
+ && c.HasOutput));
+
+ var expectedAffectedItems = new List(expectedAffectedCalculations);
expectedAffectedItems.AddRange(calculations.Select(c => c.InputParameters)
- .Where(i => i.HydraulicBoundaryLocation != null));
+ .Where(i => i.HydraulicBoundaryLocation == hydraulicBoundaryLocation));
// Call
- IEnumerable affectedItems = PipingDataSynchronizationService.ClearAllCalculationOutputAndHydraulicBoundaryLocations(failureMechanism);
+ IEnumerable affectedItems = PipingDataSynchronizationService.ClearAllCalculationOutputAndHydraulicBoundaryLocations(
+ failureMechanism, new[]
+ {
+ hydraulicBoundaryLocation
+ });
// 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(calculations.OfType()
- .Where(c => !c.InputParameters.UseAssessmentLevelManualInput)
- .All(c => !c.HasOutput));
- Assert.IsTrue(calculations.OfType()
- .All(c => !c.HasOutput));
- Assert.IsTrue(calculations.All(c => c.InputParameters.HydraulicBoundaryLocation == null));
+ Assert.IsTrue(expectedAffectedCalculations.All(c => !c.HasOutput));
+ Assert.IsTrue(calculations.All(c => c.InputParameters.HydraulicBoundaryLocation != hydraulicBoundaryLocation));
CollectionAssert.AreEquivalent(expectedAffectedItems, affectedItems);
}