Index: Ringtoets/Integration/src/Ringtoets.Integration.Plugin/Handlers/AssessmentSectionCompositionChangeHandler.cs =================================================================== diff -u -r40ab5f9e9cdd69b66f67b1f2fdd1b503aecc24e8 -r042eb74ce9afcc3ff611a432a1c2edf8ded8d848 --- Ringtoets/Integration/src/Ringtoets.Integration.Plugin/Handlers/AssessmentSectionCompositionChangeHandler.cs (.../AssessmentSectionCompositionChangeHandler.cs) (revision 40ab5f9e9cdd69b66f67b1f2fdd1b503aecc24e8) +++ Ringtoets/Integration/src/Ringtoets.Integration.Plugin/Handlers/AssessmentSectionCompositionChangeHandler.cs (.../AssessmentSectionCompositionChangeHandler.cs) (revision 042eb74ce9afcc3ff611a432a1c2edf8ded8d848) @@ -70,10 +70,10 @@ affectedObjects.Add(assessmentSection); + IFailureMechanism[] failureMechanismsToClearOutputFor = GetFailureMechanismsToUpdate(assessmentSection, oldFailureMechanismContributions).ToArray(); + IObservable[] affectedCalculations = - RingtoetsDataSynchronizationService.ClearFailureMechanismCalculationOutputs( - GetFailureMechanismsToUpdate(assessmentSection, oldFailureMechanismContributions)) - .ToArray(); + RingtoetsDataSynchronizationService.ClearFailureMechanismCalculationOutputs(failureMechanismsToClearOutputFor).ToArray(); if (affectedCalculations.Length > 0) { @@ -82,36 +82,38 @@ affectedObjects.OfType().Count()); } - affectedObjects.AddRange(ClearHydraulicBoundaryLocationOutput(GetFailureMechanismsToUpdate(assessmentSection, oldFailureMechanismContributions))); + affectedObjects.AddRange(ClearHydraulicBoundaryLocationOutput(failureMechanismsToClearOutputFor)); } return affectedObjects; } - private static IFailureMechanism[] GetFailureMechanismsToUpdate(IAssessmentSection assessmentSection, - Dictionary oldFailureMechanismContributions) + private static IEnumerable GetFailureMechanismsToUpdate(IAssessmentSection assessmentSection, + Dictionary oldFailureMechanismContributions) { var failureMechanismsToClearOutputFor = new List(); foreach (IFailureMechanism failureMechanism in assessmentSection.GetFailureMechanisms()) { - foreach (KeyValuePair oldFailureMechanismContribution in oldFailureMechanismContributions) + if (failureMechanism is StabilityStoneCoverFailureMechanism || failureMechanism is WaveImpactAsphaltCoverFailureMechanism) { - if (failureMechanism is StabilityStoneCoverFailureMechanism || failureMechanism is WaveImpactAsphaltCoverFailureMechanism) - { - continue; - } + continue; + } - if (failureMechanism is DuneErosionFailureMechanism - || oldFailureMechanismContribution.Key.Equals(failureMechanism) - && Math.Abs(oldFailureMechanismContribution.Value) > 1e-6 - && Math.Abs(oldFailureMechanismContribution.Value - failureMechanism.Contribution) > 1e-6) + if (failureMechanism is DuneErosionFailureMechanism) + { + failureMechanismsToClearOutputFor.Add(failureMechanism); + } + + if (oldFailureMechanismContributions.ContainsKey(failureMechanism)) + { + double oldContribution = oldFailureMechanismContributions[failureMechanism]; + if (Math.Abs(oldContribution) > 1e-6 && Math.Abs(oldContribution - failureMechanism.Contribution) > 1e-6) { failureMechanismsToClearOutputFor.Add(failureMechanism); - break; } } } - return failureMechanismsToClearOutputFor.ToArray(); + return failureMechanismsToClearOutputFor; } private IEnumerable ClearHydraulicBoundaryLocationOutput(IEnumerable failureMechanismsToClearOutputFor)