Index: Ringtoets/Piping/src/Ringtoets.Piping.Service/PipingDataSynchronizationService.cs =================================================================== diff -u -r89d34600d1408c8b1f4240020e841ba64cc26622 -r4454d09ddf61ff3eeef0432bdb6bbe7cdea12824 --- Ringtoets/Piping/src/Ringtoets.Piping.Service/PipingDataSynchronizationService.cs (.../PipingDataSynchronizationService.cs) (revision 89d34600d1408c8b1f4240020e841ba64cc26622) +++ Ringtoets/Piping/src/Ringtoets.Piping.Service/PipingDataSynchronizationService.cs (.../PipingDataSynchronizationService.cs) (revision 4454d09ddf61ff3eeef0432bdb6bbe7cdea12824) @@ -243,12 +243,7 @@ var changedObservables = new List(); - IEnumerable pipingCalculationScenarios = - failureMechanism.Calculations - .Cast() - .Where(pcs => ReferenceEquals(pcs.InputParameters.StochasticSoilProfile, soilProfile)); - - foreach (PipingCalculation pipingCalculationScenario in pipingCalculationScenarios) + foreach (PipingCalculation pipingCalculationScenario in GetCalculationsWithSoilProfileAssigned(failureMechanism, soilProfile)) { changedObservables.AddRange(RingtoetsCommonDataSynchronizationService.ClearCalculationOutput(pipingCalculationScenario)); changedObservables.AddRange(ClearStochasticSoilProfile(pipingCalculationScenario.InputParameters)); @@ -257,6 +252,47 @@ return changedObservables; } + /// + /// Clears data dependent on a given , either directly or indirectly, + /// from calculations in the . + /// + /// The failure mechanism containing . + /// The soil profile residing in + /// that should be removed. + /// All observable objects affected by this method. + /// Thrown when + /// or is null. + public static IEnumerable UpdateStochasticSoilProfileForInput(PipingFailureMechanism failureMechanism, StochasticSoilProfile soilProfile) + { + if (failureMechanism == null) + { + throw new ArgumentNullException(nameof(failureMechanism)); + } + if (soilProfile == null) + { + throw new ArgumentNullException(nameof(soilProfile)); + } + + var changedObservables = new List(); + + foreach (PipingCalculation calculation in GetCalculationsWithSoilProfileAssigned(failureMechanism, soilProfile)) + { + changedObservables.AddRange(RingtoetsCommonDataSynchronizationService.ClearCalculationOutput(calculation)); + changedObservables.Add(calculation.InputParameters); + } + + return changedObservables; + } + + private static IEnumerable GetCalculationsWithSoilProfileAssigned(PipingFailureMechanism failureMechanism, StochasticSoilProfile soilProfile) + { + IEnumerable pipingCalculationScenarios = + failureMechanism.Calculations + .Cast() + .Where(pcs => ReferenceEquals(pcs.InputParameters.StochasticSoilProfile, soilProfile)); + return pipingCalculationScenarios; + } + private static IEnumerable ClearSurfaceLine(PipingInput input) { input.SurfaceLine = null;