Index: Riskeer/Integration/src/Riskeer.Integration.Plugin/RiskeerPlugin.cs =================================================================== diff -u -rdc66d2df32013dc5dac0f0bfd07d6b474ec4a9d8 -r14e0d9ad8a8996b447a17f09f34faf2f70a62a3d --- Riskeer/Integration/src/Riskeer.Integration.Plugin/RiskeerPlugin.cs (.../RiskeerPlugin.cs) (revision dc66d2df32013dc5dac0f0bfd07d6b474ec4a9d8) +++ Riskeer/Integration/src/Riskeer.Integration.Plugin/RiskeerPlugin.cs (.../RiskeerPlugin.cs) (revision 14e0d9ad8a8996b447a17f09f34faf2f70a62a3d) @@ -987,7 +987,7 @@ Image = context => RiskeerCommonFormsResources.GenericInputOutputIcon, EnsureVisibleOnCreate = (context, o) => true, CanRemove = (context, o) => true, - OnNodeRemoved = HydraulicBoundaryCalculationsForUserDefinedTargetProbabilityOnNodeRemoved, + OnNodeRemoved = WaterLevelHydraulicBoundaryCalculationsForUserDefinedTargetProbabilityOnNodeRemoved, ContextMenuStrip = WaterLevelCalculationsForUserDefinedTargetProbabilityContextMenuStrip, CanDrag = (context, o) => true }; @@ -2469,10 +2469,19 @@ .Build(); } - private static void HydraulicBoundaryCalculationsForUserDefinedTargetProbabilityOnNodeRemoved(HydraulicBoundaryLocationCalculationsForUserDefinedTargetProbabilityContext context, object nodeData) + private static void WaterLevelHydraulicBoundaryCalculationsForUserDefinedTargetProbabilityOnNodeRemoved(HydraulicBoundaryLocationCalculationsForUserDefinedTargetProbabilityContext context, object parentNodeData) { - ObservableList parent = ((HydraulicBoundaryLocationCalculationsForUserDefinedTargetProbabilitiesGroupContext) nodeData).WrappedData; + IEnumerable affectedCalculations = RiskeerDataSynchronizationService.ClearWaveConditionsCalculationOutputAndRemoveTargetProbability( + context.AssessmentSection, context.WrappedData); + affectedCalculations.ForEachElementDo(c => c.NotifyObservers()); + HydraulicBoundaryCalculationsForUserDefinedTargetProbabilityOnNodeRemoved(context, parentNodeData); + } + + private static void HydraulicBoundaryCalculationsForUserDefinedTargetProbabilityOnNodeRemoved(HydraulicBoundaryLocationCalculationsForUserDefinedTargetProbabilityContext context, object parentNodeData) + { + ObservableList parent = ((HydraulicBoundaryLocationCalculationsForUserDefinedTargetProbabilitiesGroupContext) parentNodeData).WrappedData; + parent.Remove(context.WrappedData); parent.NotifyObservers(); } Index: Riskeer/Integration/test/Riskeer.Integration.Plugin.Test/TreeNodeInfos/WaterLevelCalculationsForUserDefinedTargetProbabilityContextTreeNodeInfoTest.cs =================================================================== diff -u -r5be9a0a80e227564f3c625f434437b4dd99fcfb7 -r14e0d9ad8a8996b447a17f09f34faf2f70a62a3d --- Riskeer/Integration/test/Riskeer.Integration.Plugin.Test/TreeNodeInfos/WaterLevelCalculationsForUserDefinedTargetProbabilityContextTreeNodeInfoTest.cs (.../WaterLevelCalculationsForUserDefinedTargetProbabilityContextTreeNodeInfoTest.cs) (revision 5be9a0a80e227564f3c625f434437b4dd99fcfb7) +++ Riskeer/Integration/test/Riskeer.Integration.Plugin.Test/TreeNodeInfos/WaterLevelCalculationsForUserDefinedTargetProbabilityContextTreeNodeInfoTest.cs (.../WaterLevelCalculationsForUserDefinedTargetProbabilityContextTreeNodeInfoTest.cs) (revision 14e0d9ad8a8996b447a17f09f34faf2f70a62a3d) @@ -20,6 +20,7 @@ // All rights reserved. using System; +using System.Collections.Generic; using System.Drawing; using System.IO; using System.Linq; @@ -30,6 +31,7 @@ using Core.Common.Controls.TreeView; using Core.Common.TestUtil; using Core.Common.Util; +using Core.Common.Util.Extensions; using Core.Gui; using Core.Gui.ContextMenu; using Core.Gui.Forms.Main; @@ -39,17 +41,23 @@ using NUnit.Framework; using Rhino.Mocks; using Riskeer.Common.Data.AssessmentSection; +using Riskeer.Common.Data.Calculation; using Riskeer.Common.Data.Hydraulics; using Riskeer.Common.Data.TestUtil; using Riskeer.Common.Data.TestUtil.IllustrationPoints; using Riskeer.Common.Forms.PresentationObjects; using Riskeer.Common.Plugin.TestUtil; using Riskeer.Common.Service.TestUtil; +using Riskeer.GrassCoverErosionOutwards.Data; using Riskeer.HydraRing.Calculation.Calculator.Factory; using Riskeer.HydraRing.Calculation.Data.Input; using Riskeer.HydraRing.Calculation.Data.Input.Hydraulics; using Riskeer.HydraRing.Calculation.TestUtil.Calculator; using Riskeer.Integration.Data; +using Riskeer.Integration.TestUtil; +using Riskeer.Revetment.Data; +using Riskeer.StabilityStoneCover.Data; +using Riskeer.WaveImpactAsphaltCover.Data; using RiskeerCommonFormsResources = Riskeer.Common.Forms.Properties.Resources; namespace Riskeer.Integration.Plugin.Test.TreeNodeInfos @@ -171,24 +179,38 @@ public void OnNodeRemoved_WithContexts_RemovesItemAndNotifiesObservers() { // Setup - IAssessmentSection assessmentSection = AssessmentSectionTestHelper.CreateAssessmentSectionStub(mockRepository); + AssessmentSection assessmentSection = TestDataGenerator.GetAssessmentSectionWithAllCalculationConfigurations(); - var calculationObserver = mockRepository.StrictMock(); - calculationObserver.Expect(o => o.UpdateObserver()); - - mockRepository.ReplayAll(); - var calculationForFirstTargetProbability = new HydraulicBoundaryLocationCalculationsForTargetProbability(0.1); var calculationForSecondTargetProbability = new HydraulicBoundaryLocationCalculationsForTargetProbability(0.01); - var calculations = new ObservableList + var calculationsForTargetProbabilities = new ObservableList { calculationForFirstTargetProbability, calculationForSecondTargetProbability }; - calculations.Attach(calculationObserver); + var waveConditionsCalculations = new List>(); + waveConditionsCalculations.AddRange(assessmentSection.GrassCoverErosionOutwards.Calculations + .Cast()); + waveConditionsCalculations.AddRange(assessmentSection.StabilityStoneCover.Calculations + .Cast()); + waveConditionsCalculations.AddRange(assessmentSection.WaveImpactAsphaltCover.Calculations + .Cast()); - var parentContext = new WaterLevelCalculationsForUserDefinedTargetProbabilitiesGroupContext(calculations, + var observer = mockRepository.StrictMock(); + observer.Expect(o => o.UpdateObserver()).Repeat.Times(waveConditionsCalculations.Count + 1); + mockRepository.ReplayAll(); + + waveConditionsCalculations.ForEachElementDo(c => + { + c.InputParameters.WaterLevelType = WaveConditionsInputWaterLevelType.UserDefinedTargetProbability; + c.InputParameters.CalculationsTargetProbability = calculationForFirstTargetProbability; + c.Attach(observer); + }); + + calculationsForTargetProbabilities.Attach(observer); + + var parentContext = new WaterLevelCalculationsForUserDefinedTargetProbabilitiesGroupContext(calculationsForTargetProbabilities, assessmentSection); var context = new WaterLevelCalculationsForUserDefinedTargetProbabilityContext(calculationForFirstTargetProbability, @@ -202,8 +224,14 @@ info.OnNodeRemoved(context, parentContext); // Assert - Assert.AreEqual(1, calculations.Count); - CollectionAssert.DoesNotContain(calculations, calculationForFirstTargetProbability); + Assert.AreEqual(1, calculationsForTargetProbabilities.Count); + CollectionAssert.DoesNotContain(calculationsForTargetProbabilities, calculationForFirstTargetProbability); + Assert.IsTrue(assessmentSection.GrassCoverErosionOutwards.Calculations.Cast() + .All(c => !c.HasOutput && c.InputParameters.CalculationsTargetProbability == null)); + Assert.IsTrue(assessmentSection.StabilityStoneCover.Calculations.Cast() + .All(c => !c.HasOutput && c.InputParameters.CalculationsTargetProbability == null)); + Assert.IsTrue(assessmentSection.WaveImpactAsphaltCover.Calculations.Cast() + .All(c => !c.HasOutput && c.InputParameters.CalculationsTargetProbability == null)); } mockRepository.VerifyAll();