Index: Ringtoets/Integration/src/Ringtoets.Integration.Service/RingtoetsDataSynchronizationService.cs =================================================================== diff -u -rd0996c2eb38e607698ffe7f57e6e1847f8550a8f -rce9e1d476f00cfb42ce2a8ab6c762baf5abfd97b --- Ringtoets/Integration/src/Ringtoets.Integration.Service/RingtoetsDataSynchronizationService.cs (.../RingtoetsDataSynchronizationService.cs) (revision d0996c2eb38e607698ffe7f57e6e1847f8550a8f) +++ Ringtoets/Integration/src/Ringtoets.Integration.Service/RingtoetsDataSynchronizationService.cs (.../RingtoetsDataSynchronizationService.cs) (revision ce9e1d476f00cfb42ce2a8ab6c762baf5abfd97b) @@ -213,71 +213,38 @@ /// Clears the reference line and all data that depends on it, either directly or indirectly. /// /// The assessment section. - /// All observable objects affected by this method. + /// The results of the clear action. /// Thrown when /// is null. - public static IEnumerable ClearReferenceLine(IAssessmentSection assessmentSection) + public static ClearResults ClearReferenceLine(IAssessmentSection assessmentSection) { if (assessmentSection == null) { throw new ArgumentNullException("assessmentSection"); } - var list = new List(); + var changedObjects = new List(); + var removedObjects = new List(); foreach (IFailureMechanism failureMechanism in assessmentSection.GetFailureMechanisms()) { - var pipingFailureMechanism = failureMechanism as PipingFailureMechanism; - var grassCoverErosionInwardsFailureMechanism = failureMechanism as GrassCoverErosionInwardsFailureMechanism; - var stabilityStoneCoverFailureMechanism = failureMechanism as StabilityStoneCoverFailureMechanism; - var heightStructuresFailureMechanism = failureMechanism as HeightStructuresFailureMechanism; - var closingStructuresFailureMechanism = failureMechanism as ClosingStructuresFailureMechanism; - var stabilityPointStructuresFailureMechanism = failureMechanism as StabilityPointStructuresFailureMechanism; - var grassCoverErosionOutwardsFailureMechanism = failureMechanism as GrassCoverErosionOutwardsFailureMechanism; - var waveImpactAsphaltCoverFailureMechanism = failureMechanism as WaveImpactAsphaltCoverFailureMechanism; + Func clearAction = GetClearMethodForFailureMechanism(failureMechanism); - if (pipingFailureMechanism != null) - { - list.AddRange(PipingDataSynchronizationService.ClearReferenceLineDependentData(pipingFailureMechanism)); - } - else if (grassCoverErosionInwardsFailureMechanism != null) - { - list.AddRange(GrassCoverErosionInwardsDataSynchronizationService.ClearReferenceLineDependentData(grassCoverErosionInwardsFailureMechanism)); - } - else if (stabilityStoneCoverFailureMechanism != null) - { - list.AddRange(StabilityStoneCoverDataSynchronizationService.ClearReferenceLineDependentData(stabilityStoneCoverFailureMechanism)); - } - else if (waveImpactAsphaltCoverFailureMechanism != null) - { - list.AddRange(WaveImpactAsphaltCoverDataSynchronizationService.ClearReferenceLineDependentData(waveImpactAsphaltCoverFailureMechanism)); - } - else if (grassCoverErosionOutwardsFailureMechanism != null) - { - list.AddRange(GrassCoverErosionOutwardsDataSynchronizationService.ClearReferenceLineDependentData(grassCoverErosionOutwardsFailureMechanism)); - } - else if (heightStructuresFailureMechanism != null) - { - list.AddRange(HeightStructuresDataSynchronizationService.ClearReferenceLineDependentData(heightStructuresFailureMechanism)); - } - else if (closingStructuresFailureMechanism != null) - { - list.AddRange(ClosingStructuresDataSynchronizationService.ClearReferenceLineDependentData(closingStructuresFailureMechanism)); - } - else if (stabilityPointStructuresFailureMechanism != null) - { - list.AddRange(StabilityPointStructuresDataSynchronizationService.ClearReferenceLineDependentData(stabilityPointStructuresFailureMechanism)); - } - else - { - list.AddRange(ClearReferenceLineDependentData(failureMechanism)); - } + ClearResults results = clearAction(); + + changedObjects.AddRange(results.ChangedObjects); + removedObjects.AddRange(results.DeletedObjects); } - assessmentSection.ReferenceLine = null; - list.Add(assessmentSection); + if (assessmentSection.ReferenceLine != null) + { + removedObjects.Add(assessmentSection.ReferenceLine); + assessmentSection.ReferenceLine = null; + } - return list; + changedObjects.Add(assessmentSection); + + return new ClearResults(changedObjects, removedObjects); } /// @@ -521,13 +488,74 @@ return changedObservables; } - private static IEnumerable ClearReferenceLineDependentData(IFailureMechanism failureMechanism) + private static Func GetClearMethodForFailureMechanism(IFailureMechanism failureMechanism) { + var pipingFailureMechanism = failureMechanism as PipingFailureMechanism; + if (pipingFailureMechanism != null) + { + return () => PipingDataSynchronizationService.ClearReferenceLineDependentData(pipingFailureMechanism); + } + + var grassCoverErosionInwardsFailureMechanism = failureMechanism as GrassCoverErosionInwardsFailureMechanism; + if (grassCoverErosionInwardsFailureMechanism != null) + { + return () => GrassCoverErosionInwardsDataSynchronizationService.ClearReferenceLineDependentData(grassCoverErosionInwardsFailureMechanism); + } + + var stabilityStoneCoverFailureMechanism = failureMechanism as StabilityStoneCoverFailureMechanism; + if (stabilityStoneCoverFailureMechanism != null) + { + return () => StabilityStoneCoverDataSynchronizationService.ClearReferenceLineDependentData(stabilityStoneCoverFailureMechanism); + } + + var waveImpactAsphaltCoverFailureMechanism = failureMechanism as WaveImpactAsphaltCoverFailureMechanism; + if (waveImpactAsphaltCoverFailureMechanism != null) + { + return () => WaveImpactAsphaltCoverDataSynchronizationService.ClearReferenceLineDependentData(waveImpactAsphaltCoverFailureMechanism); + } + + var grassCoverErosionOutwardsFailureMechanism = failureMechanism as GrassCoverErosionOutwardsFailureMechanism; + if (grassCoverErosionOutwardsFailureMechanism != null) + { + return () => GrassCoverErosionOutwardsDataSynchronizationService.ClearReferenceLineDependentData(grassCoverErosionOutwardsFailureMechanism); + } + + var heightStructuresFailureMechanism = failureMechanism as HeightStructuresFailureMechanism; + if (heightStructuresFailureMechanism != null) + { + return () => HeightStructuresDataSynchronizationService.ClearReferenceLineDependentData(heightStructuresFailureMechanism); + } + + var closingStructuresFailureMechanism = failureMechanism as ClosingStructuresFailureMechanism; + if (closingStructuresFailureMechanism != null) + { + return () => ClosingStructuresDataSynchronizationService.ClearReferenceLineDependentData(closingStructuresFailureMechanism); + } + + var stabilityPointStructuresFailureMechanism = failureMechanism as StabilityPointStructuresFailureMechanism; + if (stabilityPointStructuresFailureMechanism != null) + { + return () => StabilityPointStructuresDataSynchronizationService.ClearReferenceLineDependentData(stabilityPointStructuresFailureMechanism); + } + return () => ClearReferenceLineDependentData(failureMechanism); + } + + private static ClearResults ClearReferenceLineDependentData(IFailureMechanism failureMechanism) + { + var removedObjects = new List(); + removedObjects.AddRange(failureMechanism.Sections); + var failureMechanismWithSectionResults = failureMechanism as IHasSectionResults; + if (failureMechanismWithSectionResults != null) + { + removedObjects.AddRange(failureMechanismWithSectionResults.SectionResults); + } + failureMechanism.ClearAllSections(); - return new[] + + return new ClearResults(new[] { failureMechanism - }; + }, removedObjects); } private static IEnumerable OnWaveConditionsInputForeshoreProfileRemoved(ForeshoreProfile profile, WaveConditionsInput[] calculationInputs)