Index: Ringtoets/Integration/src/Ringtoets.Integration.Plugin/Merge/AssessmentSectionMergeHandler.cs =================================================================== diff -u -r7b95be6337f556bb904b20d02536b34d77cd0bc2 -rbbc8a9be41850f8de8086c8bdda711f52a6767e9 --- Ringtoets/Integration/src/Ringtoets.Integration.Plugin/Merge/AssessmentSectionMergeHandler.cs (.../AssessmentSectionMergeHandler.cs) (revision 7b95be6337f556bb904b20d02536b34d77cd0bc2) +++ Ringtoets/Integration/src/Ringtoets.Integration.Plugin/Merge/AssessmentSectionMergeHandler.cs (.../AssessmentSectionMergeHandler.cs) (revision bbc8a9be41850f8de8086c8bdda711f52a6767e9) @@ -22,18 +22,23 @@ using System; using System.Collections.Generic; using System.Linq; +using Core.Common.Base; using Core.Common.Gui.Commands; using log4net; using Ringtoets.ClosingStructures.Data; +using Ringtoets.Common.Data.Calculation; using Ringtoets.Common.Data.FailureMechanism; using Ringtoets.Common.Data.Hydraulics; +using Ringtoets.Common.Data.Structures; using Ringtoets.GrassCoverErosionInwards.Data; using Ringtoets.HeightStructures.Data; +using Ringtoets.HydraRing.Calculation.Data.Input.WaveConditions; using Ringtoets.Integration.Data; using Ringtoets.Integration.Data.StandAlone; using Ringtoets.Integration.Plugin.Properties; using Ringtoets.MacroStabilityInwards.Data; using Ringtoets.Piping.Data; +using Ringtoets.Revetment.Data; using Ringtoets.StabilityPointStructures.Data; using Ringtoets.StabilityStoneCover.Data; using Ringtoets.WaveImpactAsphaltCover.Data; @@ -160,28 +165,35 @@ #region FailureMechanisms - private void MergeFailureMechanisms(AssessmentSection targetAssessmentSection, IEnumerable failureMechanismsToMerge) + private static void MergeFailureMechanisms(AssessmentSection targetAssessmentSection, IEnumerable failureMechanismsToMerge) { + ObservableList hydraulicBoundaryLocations = targetAssessmentSection.HydraulicBoundaryDatabase.Locations; foreach (IFailureMechanism failureMechanism in failureMechanismsToMerge) { if (TryMergeFailureMechanism( targetAssessmentSection, failureMechanism, (section, mechanism) => section.Piping = mechanism)) { + UpdateHydraulicBoundaryLocationReferences( + targetAssessmentSection.Piping, hydraulicBoundaryLocations); continue; } if (TryMergeFailureMechanism( targetAssessmentSection, failureMechanism, (section, mechanism) => section.GrassCoverErosionInwards = mechanism)) { + UpdateHydraulicBoundaryLocationReferences( + targetAssessmentSection.GrassCoverErosionInwards, hydraulicBoundaryLocations); continue; } if (TryMergeFailureMechanism( targetAssessmentSection, failureMechanism, (section, mechanism) => section.MacroStabilityInwards = mechanism)) { + UpdateHydraulicBoundaryLocationReferences( + targetAssessmentSection.MacroStabilityInwards, hydraulicBoundaryLocations); continue; } @@ -203,13 +215,17 @@ targetAssessmentSection, failureMechanism, (section, mechanism) => section.StabilityStoneCover = mechanism)) { + UpdateHydraulicBoundaryLocationReferences( + targetAssessmentSection.StabilityStoneCover, hydraulicBoundaryLocations); continue; } if (TryMergeFailureMechanism( targetAssessmentSection, failureMechanism, (section, mechanism) => section.WaveImpactAsphaltCover = mechanism)) { + UpdateHydraulicBoundaryLocationReferences( + targetAssessmentSection.WaveImpactAsphaltCover, hydraulicBoundaryLocations); continue; } @@ -238,13 +254,17 @@ targetAssessmentSection, failureMechanism, (section, mechanism) => section.HeightStructures = mechanism)) { + UpdateHydraulicBoundaryLocationReferences, HeightStructuresInput>( + targetAssessmentSection.HeightStructures, hydraulicBoundaryLocations); continue; } if (TryMergeFailureMechanism( targetAssessmentSection, failureMechanism, (section, mechanism) => section.ClosingStructures = mechanism)) { + UpdateHydraulicBoundaryLocationReferences, ClosingStructuresInput>( + targetAssessmentSection.ClosingStructures, hydraulicBoundaryLocations); continue; } @@ -259,6 +279,8 @@ targetAssessmentSection, failureMechanism, (section, mechanism) => section.StabilityPointStructures = mechanism)) { + UpdateHydraulicBoundaryLocationReferences, StabilityPointStructuresInput>( + targetAssessmentSection.StabilityPointStructures, hydraulicBoundaryLocations); continue; } @@ -290,6 +312,27 @@ return false; } + private static void UpdateHydraulicBoundaryLocationReferences( + TFailureMechanism failureMechanism, IEnumerable locations) + where TFailureMechanism : IFailureMechanism + where TCalculation : ICalculation + where TCalculationInput : class, ICalculationInputWithLocation + { + foreach (TCalculation calculation in failureMechanism.Calculations.Cast()) + { + if (calculation.InputParameters.HydraulicBoundaryLocation != null) + { + calculation.InputParameters.HydraulicBoundaryLocation = GetHydraulicBoundaryLocation(calculation.InputParameters.HydraulicBoundaryLocation, + locations); + } + } + } + + private static HydraulicBoundaryLocation GetHydraulicBoundaryLocation(HydraulicBoundaryLocation location, IEnumerable locations) + { + return locations.Single(l => l.Name == location.Name && l.Id == location.Id && l.Location.Equals(location.Location)); + } + #endregion } } \ No newline at end of file