Index: Ringtoets/Common/src/Ringtoets.Common.Forms/Views/FailureMechanismResultView.cs =================================================================== diff -u -rc02a37ac174a9c5a023b743d506969b8d593f0c7 -r2d36ffab7227ac916cbf278644023a95fa21d1e7 --- Ringtoets/Common/src/Ringtoets.Common.Forms/Views/FailureMechanismResultView.cs (.../FailureMechanismResultView.cs) (revision c02a37ac174a9c5a023b743d506969b8d593f0c7) +++ Ringtoets/Common/src/Ringtoets.Common.Forms/Views/FailureMechanismResultView.cs (.../FailureMechanismResultView.cs) (revision 2d36ffab7227ac916cbf278644023a95fa21d1e7) @@ -41,6 +41,7 @@ { private readonly Observer failureMechanismObserver; private readonly RecursiveObserver failureMechanismSectionResultObserver; + private readonly RecursiveObserver calculationScenarioObserver; private IEnumerable failureMechanismSectionResult; private IFailureMechanism failureMechanism; @@ -59,6 +60,7 @@ failureMechanismObserver = new Observer(UpdataDataGridViewDataSource); failureMechanismSectionResultObserver = new RecursiveObserver(RefreshDataGridView, mechanism => mechanism.SectionResults); + calculationScenarioObserver = new RecursiveObserver(RefreshDataGridView, mechanism => mechanism.SectionResults.Select(sr => sr.CalculationScenarios)); Load += OnLoad; } @@ -94,10 +96,12 @@ if (failureMechanismSectionResult != null) { UpdataDataGridViewDataSource(); + calculationScenarioObserver.Observable = failureMechanism; } else { dataGridView.DataSource = null; + calculationScenarioObserver.Observable = null; } } } Index: Ringtoets/Piping/src/Ringtoets.Piping.Data/PipingCalculationGroupExtensions.cs =================================================================== diff -u -rc02a37ac174a9c5a023b743d506969b8d593f0c7 -r2d36ffab7227ac916cbf278644023a95fa21d1e7 --- Ringtoets/Piping/src/Ringtoets.Piping.Data/PipingCalculationGroupExtensions.cs (.../PipingCalculationGroupExtensions.cs) (revision c02a37ac174a9c5a023b743d506969b8d593f0c7) +++ Ringtoets/Piping/src/Ringtoets.Piping.Data/PipingCalculationGroupExtensions.cs (.../PipingCalculationGroupExtensions.cs) (revision 2d36ffab7227ac916cbf278644023a95fa21d1e7) @@ -50,6 +50,8 @@ failureMechanismSectionResult.CalculationScenarios.AddRange(calculationScenarios); } } + + pipingFailureMechanism.NotifyObservers(); } } } \ No newline at end of file Index: Ringtoets/Piping/src/Ringtoets.Piping.Forms/Views/PipingCalculationsView.cs =================================================================== diff -u -r0b081b2391e73b7e3ff04ef31fafd2df1b1571e3 -r2d36ffab7227ac916cbf278644023a95fa21d1e7 --- Ringtoets/Piping/src/Ringtoets.Piping.Forms/Views/PipingCalculationsView.cs (.../PipingCalculationsView.cs) (revision 0b081b2391e73b7e3ff04ef31fafd2df1b1571e3) +++ Ringtoets/Piping/src/Ringtoets.Piping.Forms/Views/PipingCalculationsView.cs (.../PipingCalculationsView.cs) (revision 2d36ffab7227ac916cbf278644023a95fa21d1e7) @@ -49,7 +49,7 @@ { private readonly Observer assessmentSectionObserver; private readonly RecursiveObserver pipingCalculationGroupObserver; - private readonly RecursiveObserver pipingCalculationObserver; + private readonly RecursiveObserver pipingCalculationObserver; private readonly Observer pipingFailureMechanismObserver; private readonly RecursiveObserver pipingInputObserver; private readonly Observer pipingStochasticSoilModelsObserver; @@ -73,8 +73,8 @@ pipingStochasticSoilModelsObserver = new Observer(OnStochasticSoilModelsUpdate); pipingFailureMechanismObserver = new Observer(OnPipingFailureMechanismUpdate); assessmentSectionObserver = new Observer(UpdateHydraulicBoundaryLocationsColumn); - pipingInputObserver = new RecursiveObserver(UpdateDataGridViewDataSource, pcg => pcg.Children.Concat(pcg.Children.OfType().Select(pc => pc.InputParameters))); - pipingCalculationObserver = new RecursiveObserver(RefreshDataGridView, pcg => pcg.Children); + pipingInputObserver = new RecursiveObserver(UpdateDataGridViewDataSource, pcg => pcg.Children.Concat(pcg.Children.OfType().Select(pc => pc.InputParameters))); + pipingCalculationObserver = new RecursiveObserver(RefreshDataGridView, pcg => pcg.Children); pipingCalculationGroupObserver = new RecursiveObserver(UpdateDataGridViewDataSource, pcg => pcg.Children); } Index: Ringtoets/Piping/test/Ringtoets.Piping.Data.Test/PipingCalculationGroupExtensionsTest.cs =================================================================== diff -u -rc02a37ac174a9c5a023b743d506969b8d593f0c7 -r2d36ffab7227ac916cbf278644023a95fa21d1e7 --- Ringtoets/Piping/test/Ringtoets.Piping.Data.Test/PipingCalculationGroupExtensionsTest.cs (.../PipingCalculationGroupExtensionsTest.cs) (revision c02a37ac174a9c5a023b743d506969b8d593f0c7) +++ Ringtoets/Piping/test/Ringtoets.Piping.Data.Test/PipingCalculationGroupExtensionsTest.cs (.../PipingCalculationGroupExtensionsTest.cs) (revision 2d36ffab7227ac916cbf278644023a95fa21d1e7) @@ -21,8 +21,10 @@ using System.Collections.Generic; using System.Linq; +using Core.Common.Base; using Core.Common.Base.Geometry; using NUnit.Framework; +using Rhino.Mocks; using Ringtoets.Common.Data.FailureMechanism; using Ringtoets.Piping.Data.TestUtil; using Ringtoets.Piping.Forms; @@ -152,7 +154,7 @@ } [Test] - public void AddCalculationScenariosToFailureMechanismSectionResult_CalculationAlreadyInFailureMechanismSectionResul_ScenarioNotAddedToFailureMechanismSectionResult() + public void AddCalculationScenariosToFailureMechanismSectionResult_CalculationAlreadyInFailureMechanismSectionResult_ScenarioNotAddedToFailureMechanismSectionResult() { // Setup var failureMechanism = GetFailureMechanismWithSections(); @@ -188,6 +190,42 @@ Assert.AreEqual(2, failureMechanismSectionResult4.CalculationScenarios.Count); } + [Test] + public void AddCalculationScenariosToFailureMechanismSectionResult_ScenariosAdded_NotifiesObserver() + { + // Setup + var mocks = new MockRepository(); + var observer = mocks.StrictMock(); + observer.Expect(o => o.UpdateObserver()); + mocks.ReplayAll(); + + var failureMechanism = GetFailureMechanismWithSections(); + + var calculationsStructure = PipingCalculationConfigurationHelper.GenerateCalculationsStructure( + failureMechanism.SurfaceLines, + failureMechanism.StochasticSoilModels, + failureMechanism.GeneralInput, + failureMechanism.SemiProbabilisticInput); + + foreach (var item in calculationsStructure) + { + failureMechanism.CalculationsGroup.Children.Add(item); + } + + failureMechanism.Attach(observer); + + // Call + failureMechanism.CalculationsGroup.AddCalculationScenariosToFailureMechanismSectionResult(failureMechanism); + + // Assert + var failureMechanismSectionResult1 = failureMechanism.SectionResults.First(); + var failureMechanismSectionResult2 = failureMechanism.SectionResults.ElementAt(1); + + Assert.AreEqual(4, failureMechanismSectionResult1.CalculationScenarios.Count); + Assert.AreEqual(2, failureMechanismSectionResult2.CalculationScenarios.Count); + mocks.VerifyAll(); + } + private static PipingFailureMechanism GetFailureMechanismWithoutSections() { return GetFailureMechanism();