Index: Riskeer/Integration/src/Riskeer.Integration.Forms/Observers/AssessmentSectionResultObserver.cs =================================================================== diff -u -r19e6d4ac96b28f25e8f2a5c0f164118dd0a05c0d -r71187bb65412758f6030c1ed195341c99f9c2a15 --- Riskeer/Integration/src/Riskeer.Integration.Forms/Observers/AssessmentSectionResultObserver.cs (.../AssessmentSectionResultObserver.cs) (revision 19e6d4ac96b28f25e8f2a5c0f164118dd0a05c0d) +++ Riskeer/Integration/src/Riskeer.Integration.Forms/Observers/AssessmentSectionResultObserver.cs (.../AssessmentSectionResultObserver.cs) (revision 71187bb65412758f6030c1ed195341c99f9c2a15) @@ -60,6 +60,10 @@ private readonly Observer heightStructuresObserver; private readonly Observer macroStabilityInwardsObserver; private readonly Observer pipingObserver; + + private readonly RecursiveObserver, + PipingScenarioConfigurationPerFailureMechanismSection> pipingScenarioConfigurationsPerSectionObserver; + private readonly Observer stabilityPointStructuresObserver; private readonly Observer stabilityStoneCoverObserver; private readonly Observer waveImpactAsphaltCoverObserver; @@ -132,6 +136,8 @@ pipingObserver = CreateCalculatableFailureMechanismObserver(assessmentSection.Piping); + pipingScenarioConfigurationsPerSectionObserver = CreatePipingScenarioConfigurationsPerSectionObserver(assessmentSection.Piping); + stabilityPointStructuresObserver = CreateCalculatableFailureMechanismObserver>(assessmentSection.StabilityPointStructures); @@ -179,6 +185,7 @@ heightStructuresObserver.Dispose(); macroStabilityInwardsObserver.Dispose(); pipingObserver.Dispose(); + pipingScenarioConfigurationsPerSectionObserver.Dispose(); stabilityPointStructuresObserver.Dispose(); stabilityStoneCoverObserver.Dispose(); waveImpactAsphaltCoverObserver.Dispose(); @@ -249,5 +256,15 @@ specificFailureMechanismObservers.Clear(); } + + private RecursiveObserver, PipingScenarioConfigurationPerFailureMechanismSection> CreatePipingScenarioConfigurationsPerSectionObserver(PipingFailureMechanism pipingFailureMechanism) + { + return new RecursiveObserver, PipingScenarioConfigurationPerFailureMechanismSection>( + NotifyObservers, + sc => sc) + { + Observable = pipingFailureMechanism.ScenarioConfigurationsPerFailureMechanismSection + }; + } } } \ No newline at end of file Index: Riskeer/Integration/test/Riskeer.Integration.Forms.Test/Observers/AssessmentSectionResultObserverTest.cs =================================================================== diff -u -r19e6d4ac96b28f25e8f2a5c0f164118dd0a05c0d -r71187bb65412758f6030c1ed195341c99f9c2a15 --- Riskeer/Integration/test/Riskeer.Integration.Forms.Test/Observers/AssessmentSectionResultObserverTest.cs (.../AssessmentSectionResultObserverTest.cs) (revision 19e6d4ac96b28f25e8f2a5c0f164118dd0a05c0d) +++ Riskeer/Integration/test/Riskeer.Integration.Forms.Test/Observers/AssessmentSectionResultObserverTest.cs (.../AssessmentSectionResultObserverTest.cs) (revision 71187bb65412758f6030c1ed195341c99f9c2a15) @@ -21,6 +21,7 @@ using System; using System.Collections.Generic; +using System.Linq; using Core.Common.Base; using Core.Common.TestUtil; using NUnit.Framework; @@ -29,6 +30,7 @@ using Riskeer.ClosingStructures.Data.TestUtil; using Riskeer.Common.Data.AssessmentSection; using Riskeer.Common.Data.FailureMechanism; +using Riskeer.Common.Data.TestUtil; using Riskeer.DuneErosion.Data; using Riskeer.GrassCoverErosionInwards.Data; using Riskeer.GrassCoverErosionOutwards.Data; @@ -438,7 +440,7 @@ AssessmentSection assessmentSection = CreateAssessmentSection(); var calculationScenario = SemiProbabilisticPipingCalculationTestFactory.CreateCalculationWithInvalidInput(); - assessmentSection.MacroStabilityInwards.CalculationsGroup.Children.Add(calculationScenario); + assessmentSection.Piping.CalculationsGroup.Children.Add(calculationScenario); using (var resultObserver = new AssessmentSectionResultObserver(assessmentSection)) { @@ -458,6 +460,35 @@ } [Test] + public void GivenAssessmentSectionResultObserverWithAttachedObserver_WhenPipingScenarioConfigurationsPerFailureMechanismSectionNotified_ThenAttachedObserverNotified() + { + // Given + AssessmentSection assessmentSection = CreateAssessmentSection(); + + assessmentSection.Piping = new PipingFailureMechanism(); + FailureMechanismTestHelper.SetSections(assessmentSection.Piping, new[] + { + FailureMechanismSectionTestFactory.CreateFailureMechanismSection("Section 1") + }); + + using (var resultObserver = new AssessmentSectionResultObserver(assessmentSection)) + { + var mocks = new MockRepository(); + var observer = mocks.StrictMock(); + observer.Expect(o => o.UpdateObserver()); + mocks.ReplayAll(); + + resultObserver.Attach(observer); + + // When + assessmentSection.Piping.ScenarioConfigurationsPerFailureMechanismSection.First().NotifyObservers(); + + // Then + mocks.VerifyAll(); + } + } + + [Test] public void GivenAssessmentSectionResultObserverWithAttachedObserver_WhenStabilityPointStructuresCalculationNotified_ThenAttachedObserverNotified() { // Given