Index: Ringtoets/Integration/src/Ringtoets.Integration.Plugin/Merge/AssessmentSectionMergeHandler.cs =================================================================== diff -u -r0a684e8c46a9d375b887d84e777e5e80829308a7 -r9b5d6d80dc634b79b2f24cd3ed1ce9de366f9fac --- Ringtoets/Integration/src/Ringtoets.Integration.Plugin/Merge/AssessmentSectionMergeHandler.cs (.../AssessmentSectionMergeHandler.cs) (revision 0a684e8c46a9d375b887d84e777e5e80829308a7) +++ Ringtoets/Integration/src/Ringtoets.Integration.Plugin/Merge/AssessmentSectionMergeHandler.cs (.../AssessmentSectionMergeHandler.cs) (revision 9b5d6d80dc634b79b2f24cd3ed1ce9de366f9fac) @@ -176,7 +176,7 @@ targetAssessmentSection, failureMechanism, (section, mechanism) => section.Piping = mechanism)) { - UpdateHydraulicBoundaryLocationReferences( + UpdateCalculationHydraulicBoundaryLocationReferences( targetAssessmentSection.Piping, hydraulicBoundaryLocations); continue; } @@ -185,7 +185,7 @@ targetAssessmentSection, failureMechanism, (section, mechanism) => section.GrassCoverErosionInwards = mechanism)) { - UpdateHydraulicBoundaryLocationReferences( + UpdateCalculationHydraulicBoundaryLocationReferences( targetAssessmentSection.GrassCoverErosionInwards, hydraulicBoundaryLocations); continue; } @@ -194,7 +194,7 @@ targetAssessmentSection, failureMechanism, (section, mechanism) => section.MacroStabilityInwards = mechanism)) { - UpdateHydraulicBoundaryLocationReferences( + UpdateCalculationHydraulicBoundaryLocationReferences( targetAssessmentSection.MacroStabilityInwards, hydraulicBoundaryLocations); continue; } @@ -217,7 +217,7 @@ targetAssessmentSection, failureMechanism, (section, mechanism) => section.StabilityStoneCover = mechanism)) { - UpdateHydraulicBoundaryLocationReferences( + UpdateCalculationHydraulicBoundaryLocationReferences( targetAssessmentSection.StabilityStoneCover, hydraulicBoundaryLocations); continue; } @@ -226,7 +226,7 @@ targetAssessmentSection, failureMechanism, (section, mechanism) => section.WaveImpactAsphaltCover = mechanism)) { - UpdateHydraulicBoundaryLocationReferences( + UpdateCalculationHydraulicBoundaryLocationReferences( targetAssessmentSection.WaveImpactAsphaltCover, hydraulicBoundaryLocations); continue; } @@ -242,7 +242,8 @@ targetAssessmentSection, failureMechanism, (section, mechanism) => section.GrassCoverErosionOutwards = mechanism)) { - UpdateHydraulicBoundaryLocationReferences( + UpdateLocationCalculationHydraulicBoundaryLocationReferences(targetAssessmentSection.GrassCoverErosionOutwards, hydraulicBoundaryLocations); + UpdateCalculationHydraulicBoundaryLocationReferences( targetAssessmentSection.GrassCoverErosionOutwards, hydraulicBoundaryLocations); continue; } @@ -265,7 +266,7 @@ targetAssessmentSection, failureMechanism, (section, mechanism) => section.HeightStructures = mechanism)) { - UpdateHydraulicBoundaryLocationReferences, HeightStructuresInput>( + UpdateCalculationHydraulicBoundaryLocationReferences, HeightStructuresInput>( targetAssessmentSection.HeightStructures, hydraulicBoundaryLocations); continue; } @@ -274,7 +275,7 @@ targetAssessmentSection, failureMechanism, (section, mechanism) => section.ClosingStructures = mechanism)) { - UpdateHydraulicBoundaryLocationReferences, ClosingStructuresInput>( + UpdateCalculationHydraulicBoundaryLocationReferences, ClosingStructuresInput>( targetAssessmentSection.ClosingStructures, hydraulicBoundaryLocations); continue; } @@ -290,7 +291,7 @@ targetAssessmentSection, failureMechanism, (section, mechanism) => section.StabilityPointStructures = mechanism)) { - UpdateHydraulicBoundaryLocationReferences, StabilityPointStructuresInput>( + UpdateCalculationHydraulicBoundaryLocationReferences, StabilityPointStructuresInput>( targetAssessmentSection.StabilityPointStructures, hydraulicBoundaryLocations); continue; } @@ -323,7 +324,7 @@ return false; } - private static void UpdateHydraulicBoundaryLocationReferences( + private static void UpdateCalculationHydraulicBoundaryLocationReferences( TFailureMechanism failureMechanism, IEnumerable locations) where TFailureMechanism : IFailureMechanism where TCalculation : ICalculation @@ -344,6 +345,38 @@ return locations.Single(l => l.Name == location.Name && l.Id == location.Id && l.Location.Equals(location.Location)); } + private static void UpdateLocationCalculationHydraulicBoundaryLocationReferences(GrassCoverErosionOutwardsFailureMechanism targetFailureMechanism, + IEnumerable locations) + { + HydraulicBoundaryLocationCalculation[] oldWaterLevelForMechanismSpecificFactorizedSignalingNorm = targetFailureMechanism.WaterLevelCalculationsForMechanismSpecificFactorizedSignalingNorm.ToArray(); + HydraulicBoundaryLocationCalculation[] oldWaterLevelForMechanismSpecificSignalingNorm = targetFailureMechanism.WaterLevelCalculationsForMechanismSpecificSignalingNorm.ToArray(); + HydraulicBoundaryLocationCalculation[] oldWaterLevelForMechanismSpecificLowerLimitNorm = targetFailureMechanism.WaterLevelCalculationsForMechanismSpecificLowerLimitNorm.ToArray(); + HydraulicBoundaryLocationCalculation[] oldWaveHeightForMechanismSpecificFactorizedSignalingNorm = targetFailureMechanism.WaveHeightCalculationsForMechanismSpecificFactorizedSignalingNorm.ToArray(); + HydraulicBoundaryLocationCalculation[] oldWaveHeightForMechanismSpecificSignalingNorm = targetFailureMechanism.WaveHeightCalculationsForMechanismSpecificSignalingNorm.ToArray(); + HydraulicBoundaryLocationCalculation[] oldWaveHeightForMechanismSpecificLowerLimitNorm = targetFailureMechanism.WaveHeightCalculationsForMechanismSpecificLowerLimitNorm.ToArray(); + targetFailureMechanism.SetHydraulicBoundaryLocationCalculations(locations); + + ReplaceCalculationData(oldWaterLevelForMechanismSpecificFactorizedSignalingNorm, targetFailureMechanism.WaterLevelCalculationsForMechanismSpecificFactorizedSignalingNorm); + ReplaceCalculationData(oldWaterLevelForMechanismSpecificSignalingNorm, targetFailureMechanism.WaterLevelCalculationsForMechanismSpecificSignalingNorm); + ReplaceCalculationData(oldWaterLevelForMechanismSpecificLowerLimitNorm, targetFailureMechanism.WaterLevelCalculationsForMechanismSpecificLowerLimitNorm); + + ReplaceCalculationData(oldWaveHeightForMechanismSpecificFactorizedSignalingNorm, targetFailureMechanism.WaveHeightCalculationsForMechanismSpecificFactorizedSignalingNorm); + ReplaceCalculationData(oldWaveHeightForMechanismSpecificSignalingNorm, targetFailureMechanism.WaveHeightCalculationsForMechanismSpecificSignalingNorm); + ReplaceCalculationData(oldWaveHeightForMechanismSpecificLowerLimitNorm, targetFailureMechanism.WaveHeightCalculationsForMechanismSpecificLowerLimitNorm); + } + + private static void ReplaceCalculationData(IEnumerable oldCalculations, IEnumerable newCalculations) + { + for (var i = 0; i < newCalculations.Count(); i++) + { + HydraulicBoundaryLocationCalculation newCalculation = newCalculations.ElementAt(i); + HydraulicBoundaryLocationCalculation oldCalculation = oldCalculations.ElementAt(i); + + newCalculation.InputParameters.ShouldIllustrationPointsBeCalculated = oldCalculation.InputParameters.ShouldIllustrationPointsBeCalculated; + newCalculation.Output = oldCalculation.Output; + } + } + #endregion } } \ No newline at end of file Index: Ringtoets/Integration/test/Ringtoets.Integration.Plugin.Test/Merge/AssessmentSectionMergeHandlerTest.cs =================================================================== diff -u -r0a684e8c46a9d375b887d84e777e5e80829308a7 -r9b5d6d80dc634b79b2f24cd3ed1ce9de366f9fac --- Ringtoets/Integration/test/Ringtoets.Integration.Plugin.Test/Merge/AssessmentSectionMergeHandlerTest.cs (.../AssessmentSectionMergeHandlerTest.cs) (revision 0a684e8c46a9d375b887d84e777e5e80829308a7) +++ Ringtoets/Integration/test/Ringtoets.Integration.Plugin.Test/Merge/AssessmentSectionMergeHandlerTest.cs (.../AssessmentSectionMergeHandlerTest.cs) (revision 9b5d6d80dc634b79b2f24cd3ed1ce9de366f9fac) @@ -37,6 +37,7 @@ using Ringtoets.Common.Data.TestUtil.IllustrationPoints; using Ringtoets.GrassCoverErosionInwards.Data; using Ringtoets.GrassCoverErosionOutwards.Data; +using Ringtoets.GrassCoverErosionOutwards.Data.TestUtil; using Ringtoets.HeightStructures.Data; using Ringtoets.Integration.Data; using Ringtoets.Integration.Plugin.Merge; @@ -373,6 +374,7 @@ HydraulicBoundaryLocation = sourceLocations[1] } }); + GrassCoverErosionOutwardsHydraulicBoundaryLocationsTestHelper.SetHydraulicBoundaryLocations(sourceAssessmentSection.GrassCoverErosionOutwards, sourceLocations, true); sourceAssessmentSection.GrassCoverErosionOutwards.WaveConditionsCalculationGroup.Children.Add(new GrassCoverErosionOutwardsWaveConditionsCalculation { InputParameters = @@ -381,6 +383,13 @@ } }); + HydraulicBoundaryLocationCalculation[] oldWaterLevelForMechanismSpecificFactorizedSignalingNorm = sourceAssessmentSection.GrassCoverErosionOutwards.WaterLevelCalculationsForMechanismSpecificFactorizedSignalingNorm.ToArray(); + HydraulicBoundaryLocationCalculation[] oldWaterLevelForMechanismSpecificSignalingNorm = sourceAssessmentSection.GrassCoverErosionOutwards.WaterLevelCalculationsForMechanismSpecificSignalingNorm.ToArray(); + HydraulicBoundaryLocationCalculation[] oldWaterLevelForMechanismSpecificLowerLimitNorm = sourceAssessmentSection.GrassCoverErosionOutwards.WaterLevelCalculationsForMechanismSpecificLowerLimitNorm.ToArray(); + HydraulicBoundaryLocationCalculation[] oldWaveHeightForMechanismSpecificFactorizedSignalingNorm = sourceAssessmentSection.GrassCoverErosionOutwards.WaveHeightCalculationsForMechanismSpecificFactorizedSignalingNorm.ToArray(); + HydraulicBoundaryLocationCalculation[] oldWaveHeightForMechanismSpecificSignalingNorm = sourceAssessmentSection.GrassCoverErosionOutwards.WaveHeightCalculationsForMechanismSpecificSignalingNorm.ToArray(); + HydraulicBoundaryLocationCalculation[] oldWaveHeightForMechanismSpecificLowerLimitNorm = sourceAssessmentSection.GrassCoverErosionOutwards.WaveHeightCalculationsForMechanismSpecificLowerLimitNorm.ToArray(); + // When handler.PerformMerge(targetAssessmentSection, sourceAssessmentSection, new IFailureMechanism[] { @@ -422,8 +431,46 @@ var grassOutwardsCalculation = (GrassCoverErosionOutwardsWaveConditionsCalculation) targetAssessmentSection.GrassCoverErosionOutwards.Calculations.Single(); Assert.AreSame(targetLocations[0], grassOutwardsCalculation.InputParameters.HydraulicBoundaryLocation); + + AssertHydraulicBoundaryCalculations(oldWaterLevelForMechanismSpecificFactorizedSignalingNorm, + targetAssessmentSection.GrassCoverErosionOutwards.WaterLevelCalculationsForMechanismSpecificFactorizedSignalingNorm, + targetLocations); + AssertHydraulicBoundaryCalculations(oldWaterLevelForMechanismSpecificSignalingNorm, + targetAssessmentSection.GrassCoverErosionOutwards.WaterLevelCalculationsForMechanismSpecificSignalingNorm, + targetLocations); + AssertHydraulicBoundaryCalculations(oldWaterLevelForMechanismSpecificLowerLimitNorm, + targetAssessmentSection.GrassCoverErosionOutwards.WaterLevelCalculationsForMechanismSpecificLowerLimitNorm, + targetLocations); + + AssertHydraulicBoundaryCalculations(oldWaveHeightForMechanismSpecificFactorizedSignalingNorm, + targetAssessmentSection.GrassCoverErosionOutwards.WaveHeightCalculationsForMechanismSpecificFactorizedSignalingNorm, + targetLocations); + AssertHydraulicBoundaryCalculations(oldWaveHeightForMechanismSpecificSignalingNorm, + targetAssessmentSection.GrassCoverErosionOutwards.WaveHeightCalculationsForMechanismSpecificSignalingNorm, + targetLocations); + AssertHydraulicBoundaryCalculations(oldWaveHeightForMechanismSpecificLowerLimitNorm, + targetAssessmentSection.GrassCoverErosionOutwards.WaveHeightCalculationsForMechanismSpecificLowerLimitNorm, + targetLocations); } + private void AssertHydraulicBoundaryCalculations(HydraulicBoundaryLocationCalculation[] sourceCalculations, + IEnumerable targetCalculations, + HydraulicBoundaryLocation[] targetLocations) + { + Assert.AreEqual(sourceCalculations.Length, targetLocations.Length); + Assert.AreEqual(targetCalculations.Count(), sourceCalculations.Length); + + for (var i = 0; i < sourceCalculations.Length; i++) + { + HydraulicBoundaryLocationCalculation sourceCalculation = sourceCalculations[i]; + HydraulicBoundaryLocationCalculation targetCalculation = targetCalculations.ElementAt(i); + Assert.AreEqual(sourceCalculation.InputParameters.ShouldIllustrationPointsBeCalculated, + targetCalculation.InputParameters.ShouldIllustrationPointsBeCalculated); + Assert.AreSame(sourceCalculation.Output, targetCalculation.Output); + Assert.AreSame(targetLocations[i], targetCalculation.HydraulicBoundaryLocation); + } + } + private static AssessmentSection CreateAssessmentSection(HydraulicBoundaryLocation[] locations) { var assessmentSection = new AssessmentSection(AssessmentSectionComposition.Dike);