Index: Riskeer/Integration/src/Riskeer.Integration.Plugin/Merge/AssessmentSectionMergeHandler.cs =================================================================== diff -u -r066bbc72d2bcb35de2cdd943e35875463deafb9e -re16f73a8ea5c5652ec259895aa7314b85ee3c20d --- Riskeer/Integration/src/Riskeer.Integration.Plugin/Merge/AssessmentSectionMergeHandler.cs (.../AssessmentSectionMergeHandler.cs) (revision 066bbc72d2bcb35de2cdd943e35875463deafb9e) +++ Riskeer/Integration/src/Riskeer.Integration.Plugin/Merge/AssessmentSectionMergeHandler.cs (.../AssessmentSectionMergeHandler.cs) (revision e16f73a8ea5c5652ec259895aa7314b85ee3c20d) @@ -104,45 +104,77 @@ changedObjects.AddRange(MergeHydraulicBoundaryLocationCalculations(targetAssessmentSection.WaveHeightCalculationsForFactorizedLowerLimitNorm, sourceAssessmentSection.WaveHeightCalculationsForFactorizedLowerLimitNorm)); - // Also merge wave heights!!! - ObservableList sourceProbabilities = sourceAssessmentSection.WaterLevelCalculationsForUserDefinedTargetProbabilities; + ObservableList sourceWaterLevelProbabilities = sourceAssessmentSection.WaterLevelCalculationsForUserDefinedTargetProbabilities; - HydraulicBoundaryLocationCalculationsForTargetProbability[] probabilitiesToMerge = DetermineProbabilitiesToMerge(targetAssessmentSection, sourceAssessmentSection, changedObjects); + HydraulicBoundaryLocationCalculationsForTargetProbability[] waterLevelProbabilitiesToMerge = sourceAssessmentSection.WaterLevelCalculationsForUserDefinedTargetProbabilities + .Where(sp => targetAssessmentSection.WaterLevelCalculationsForUserDefinedTargetProbabilities + .Select(c => c.TargetProbability) + .Contains(sp.TargetProbability)).ToArray(); - IEnumerable targetProbabilities = sourceProbabilities.Except(probabilitiesToMerge); + MergeWaterLevelProbabilities(targetAssessmentSection, changedObjects, waterLevelProbabilitiesToMerge); - MergeUniqueProbabilities(targetAssessmentSection, targetProbabilities); + IEnumerable uniqueWaterLevelSourceProbabilities = sourceWaterLevelProbabilities.Except(waterLevelProbabilitiesToMerge); + MergeUniqueWaterLevelProbabilities(targetAssessmentSection, uniqueWaterLevelSourceProbabilities); + + ObservableList sourceWaveHeightProbabilities = sourceAssessmentSection.WaveHeightCalculationsForUserDefinedTargetProbabilities; + + HydraulicBoundaryLocationCalculationsForTargetProbability[] waveHeightProbabilitiesToMerge = sourceAssessmentSection.WaveHeightCalculationsForUserDefinedTargetProbabilities + .Where(sp => targetAssessmentSection.WaveHeightCalculationsForUserDefinedTargetProbabilities + .Select(c => c.TargetProbability) + .Contains(sp.TargetProbability)).ToArray(); + + MergeWaveHeightProbabilities(targetAssessmentSection, changedObjects, waveHeightProbabilitiesToMerge); + + IEnumerable uniqueWaveHeightSourceProbabilities = sourceWaveHeightProbabilities.Except(waveHeightProbabilitiesToMerge); + + MergeUniqueWaveHeightProbabilities(targetAssessmentSection, uniqueWaveHeightSourceProbabilities); + log.Info(changedObjects.Any() ? Resources.AssessmentSectionMergeHandler_MergeHydraulicBoundaryLocations_HydraulicBoundaryLocations_merged : Resources.AssessmentSectionMergeHandler_MergeHydraulicBoundaryLocations_HydraulicBoundaryLocations_not_merged); return changedObjects; } - private static HydraulicBoundaryLocationCalculationsForTargetProbability[] DetermineProbabilitiesToMerge(IAssessmentSection targetAssessmentSection, IAssessmentSection sourceAssessmentSection, List changedObjects) + private static void MergeWaterLevelProbabilities(IAssessmentSection targetAssessmentSection, List changedObjects, HydraulicBoundaryLocationCalculationsForTargetProbability[] probabilitiesToMerge) { - HydraulicBoundaryLocationCalculationsForTargetProbability[] probabilitiesToMerge = sourceAssessmentSection.WaterLevelCalculationsForUserDefinedTargetProbabilities - .Where(sp => targetAssessmentSection.WaterLevelCalculationsForUserDefinedTargetProbabilities - .Select(c => c.TargetProbability) - .Contains(sp.TargetProbability)).ToArray(); + foreach (HydraulicBoundaryLocationCalculationsForTargetProbability sourceProbability in probabilitiesToMerge) + { + HydraulicBoundaryLocationCalculationsForTargetProbability targetProbability = targetAssessmentSection.WaterLevelCalculationsForUserDefinedTargetProbabilities.First(c => c.TargetProbability.Equals(sourceProbability.TargetProbability)); - MergeProbabilities(targetAssessmentSection, changedObjects, probabilitiesToMerge); + changedObjects.AddRange(MergeHydraulicBoundaryLocationCalculations(targetProbability.HydraulicBoundaryLocationCalculations, sourceProbability.HydraulicBoundaryLocationCalculations)); + } + } - return probabilitiesToMerge; + private static void MergeUniqueWaterLevelProbabilities(IAssessmentSection targetAssessmentSection, IEnumerable targetProbabilities) + { + foreach (HydraulicBoundaryLocationCalculationsForTargetProbability targetProbability in targetProbabilities) + { + var newTargetProbability = new HydraulicBoundaryLocationCalculationsForTargetProbability + { + TargetProbability = targetProbability.TargetProbability + }; + + newTargetProbability.HydraulicBoundaryLocationCalculations.AddRange(targetProbability.HydraulicBoundaryLocationCalculations + .Select(calculation => new HydraulicBoundaryLocationCalculation(GetHydraulicBoundaryLocation(calculation.HydraulicBoundaryLocation, targetAssessmentSection.HydraulicBoundaryDatabase.Locations))) + .ToArray()); + + targetAssessmentSection.WaterLevelCalculationsForUserDefinedTargetProbabilities.Add(newTargetProbability); + } } - private static void MergeProbabilities(IAssessmentSection targetAssessmentSection, List changedObjects, HydraulicBoundaryLocationCalculationsForTargetProbability[] probabilitiesToMerge) + private static void MergeWaveHeightProbabilities(IAssessmentSection targetAssessmentSection, List changedObjects, HydraulicBoundaryLocationCalculationsForTargetProbability[] probabilitiesToMerge) { foreach (HydraulicBoundaryLocationCalculationsForTargetProbability sourceProbability in probabilitiesToMerge) { - HydraulicBoundaryLocationCalculationsForTargetProbability targetProbability = targetAssessmentSection.WaterLevelCalculationsForUserDefinedTargetProbabilities.First(c => c.TargetProbability.Equals(sourceProbability.TargetProbability)); + HydraulicBoundaryLocationCalculationsForTargetProbability targetProbability = targetAssessmentSection.WaveHeightCalculationsForUserDefinedTargetProbabilities.First(c => c.TargetProbability.Equals(sourceProbability.TargetProbability)); changedObjects.AddRange(MergeHydraulicBoundaryLocationCalculations(targetProbability.HydraulicBoundaryLocationCalculations, sourceProbability.HydraulicBoundaryLocationCalculations)); } } - private static void MergeUniqueProbabilities(IAssessmentSection targetAssessmentSection, IEnumerable targetProbabilities) + private static void MergeUniqueWaveHeightProbabilities(IAssessmentSection targetAssessmentSection, IEnumerable targetProbabilities) { foreach (HydraulicBoundaryLocationCalculationsForTargetProbability targetProbability in targetProbabilities) { @@ -155,7 +187,7 @@ .Select(calculation => new HydraulicBoundaryLocationCalculation(GetHydraulicBoundaryLocation(calculation.HydraulicBoundaryLocation, targetAssessmentSection.HydraulicBoundaryDatabase.Locations))) .ToArray()); - targetAssessmentSection.WaterLevelCalculationsForUserDefinedTargetProbabilities.Add(newTargetProbability); + targetAssessmentSection.WaveHeightCalculationsForUserDefinedTargetProbabilities.Add(newTargetProbability); } } Index: Riskeer/Integration/test/Riskeer.Integration.Plugin.Test/Merge/AssessmentSectionMergeHandlerTest.cs =================================================================== diff -u -r95ef54e2348b92a2b9c0c7d0737e2508f8fc3ac4 -re16f73a8ea5c5652ec259895aa7314b85ee3c20d --- Riskeer/Integration/test/Riskeer.Integration.Plugin.Test/Merge/AssessmentSectionMergeHandlerTest.cs (.../AssessmentSectionMergeHandlerTest.cs) (revision 95ef54e2348b92a2b9c0c7d0737e2508f8fc3ac4) +++ Riskeer/Integration/test/Riskeer.Integration.Plugin.Test/Merge/AssessmentSectionMergeHandlerTest.cs (.../AssessmentSectionMergeHandlerTest.cs) (revision e16f73a8ea5c5652ec259895aa7314b85ee3c20d) @@ -439,6 +439,13 @@ AssertHydraulicBoundaryCalculations(tp.HydraulicBoundaryLocationCalculations, targetProbability.HydraulicBoundaryLocationCalculations, targetLocations); } + + foreach (HydraulicBoundaryLocationCalculationsForTargetProbability tp in sourceAssessmentSection.WaveHeightCalculationsForUserDefinedTargetProbabilities) + { + HydraulicBoundaryLocationCalculationsForTargetProbability targetProbability = targetAssessmentSection.WaveHeightCalculationsForUserDefinedTargetProbabilities.First(c => c.TargetProbability.Equals(tp.TargetProbability)); + + AssertHydraulicBoundaryCalculations(tp.HydraulicBoundaryLocationCalculations, targetProbability.HydraulicBoundaryLocationCalculations, targetLocations); + } } [Test] @@ -463,6 +470,7 @@ AssessmentSection sourceAssessmentSection = CreateAssessmentSection(sourceLocations); sourceAssessmentSection.WaterLevelCalculationsForUserDefinedTargetProbabilities[0].TargetProbability = 0.01; + sourceAssessmentSection.WaveHeightCalculationsForUserDefinedTargetProbabilities[0].TargetProbability = 0.01; // When handler.PerformMerge(targetAssessmentSection, new AssessmentSectionMergeData( @@ -482,6 +490,7 @@ // Then Assert.AreEqual(targetAssessmentSection.WaterLevelCalculationsForUserDefinedTargetProbabilities.Count(c => c.TargetProbability.Equals(0.01)), 1); + Assert.AreEqual(targetAssessmentSection.WaveHeightCalculationsForUserDefinedTargetProbabilities.Count(c => c.TargetProbability.Equals(0.01)), 1); } private static void AssertHydraulicBoundaryCalculations(IEnumerable sourceCalculations, @@ -517,9 +526,10 @@ { HydraulicBoundaryLocationCalculations = { - new HydraulicBoundaryLocationCalculation(locations[1]) + new HydraulicBoundaryLocationCalculation(locations[0]) } }); + assessmentSection.HydraulicBoundaryDatabase.Locations.AddRange(locations); assessmentSection.SetHydraulicBoundaryLocationCalculations(locations); return assessmentSection;