Index: Riskeer/Piping/src/Riskeer.Piping.Forms/Views/PipingFailureMechanismSectionResultRow.cs =================================================================== diff -u -r35602e76c6603509eeaf4f7d4815beb4abd7e50b -readb95b5bcb74c2c671beaabd2cda2ace1187675 --- Riskeer/Piping/src/Riskeer.Piping.Forms/Views/PipingFailureMechanismSectionResultRow.cs (.../PipingFailureMechanismSectionResultRow.cs) (revision 35602e76c6603509eeaf4f7d4815beb4abd7e50b) +++ Riskeer/Piping/src/Riskeer.Piping.Forms/Views/PipingFailureMechanismSectionResultRow.cs (.../PipingFailureMechanismSectionResultRow.cs) (revision eadb95b5bcb74c2c671beaabd2cda2ace1187675) @@ -24,9 +24,11 @@ using System.ComponentModel; using Riskeer.Common.Data.AssessmentSection; using Riskeer.Common.Data.FailureMechanism; +using Riskeer.Common.Data.Probability; using Riskeer.Common.Forms.TypeConverters; using Riskeer.Common.Forms.Views; using Riskeer.Piping.Data; +using Riskeer.Piping.Data.SemiProbabilistic; namespace Riskeer.Piping.Forms.Views { @@ -38,6 +40,8 @@ private readonly IEnumerable> calculations; private readonly PipingFailureMechanism failureMechanism; private readonly IAssessmentSection assessmentSection; + private double initialFailureMechanismResultProfileProbability; + private double initialFailureMechanismResultSectionProbability; /// /// Creates a new instance of . @@ -72,6 +76,8 @@ this.calculations = calculations; this.failureMechanism = failureMechanism; this.assessmentSection = assessmentSection; + + Update(); } /// @@ -107,7 +113,7 @@ [TypeConverter(typeof(NoProbabilityValueDoubleConverter))] public double InitialFailureMechanismResultProfileProbability { - get => SectionResult.ManualInitialFailureMechanismResultProfileProbability; + get => initialFailureMechanismResultProfileProbability; set { SectionResult.ManualInitialFailureMechanismResultProfileProbability = value; @@ -122,7 +128,7 @@ [TypeConverter(typeof(NoProbabilityValueDoubleConverter))] public double InitialFailureMechanismResultSectionProbability { - get => SectionResult.ManualInitialFailureMechanismResultSectionProbability; + get => initialFailureMechanismResultSectionProbability; set { SectionResult.ManualInitialFailureMechanismResultSectionProbability = value; @@ -186,6 +192,21 @@ } } - public override void Update() {} + public override void Update() + { + if (SectionResult.InitialFailureMechanismResult == InitialFailureMechanismResultType.Adopt) + { + initialFailureMechanismResultProfileProbability = SectionResult.GetDetailedAssessmentProbability( + (IEnumerable) calculations, assessmentSection.FailureMechanismContribution.Norm); + initialFailureMechanismResultSectionProbability = initialFailureMechanismResultProfileProbability + * failureMechanism.PipingProbabilityAssessmentInput.GetN( + SectionResult.Section.Length); + } + else + { + initialFailureMechanismResultProfileProbability = SectionResult.ManualInitialFailureMechanismResultProfileProbability; + initialFailureMechanismResultSectionProbability = SectionResult.ManualInitialFailureMechanismResultSectionProbability; + } + } } } \ No newline at end of file Index: Riskeer/Piping/test/Riskeer.Piping.Forms.Test/Views/PipingFailureMechanismSectionResultRowTest.cs =================================================================== diff -u -r35602e76c6603509eeaf4f7d4815beb4abd7e50b -readb95b5bcb74c2c671beaabd2cda2ace1187675 --- Riskeer/Piping/test/Riskeer.Piping.Forms.Test/Views/PipingFailureMechanismSectionResultRowTest.cs (.../PipingFailureMechanismSectionResultRowTest.cs) (revision 35602e76c6603509eeaf4f7d4815beb4abd7e50b) +++ Riskeer/Piping/test/Riskeer.Piping.Forms.Test/Views/PipingFailureMechanismSectionResultRowTest.cs (.../PipingFailureMechanismSectionResultRowTest.cs) (revision eadb95b5bcb74c2c671beaabd2cda2ace1187675) @@ -126,8 +126,8 @@ Assert.IsInstanceOf>(row); Assert.AreEqual(result.IsRelevant, row.IsRelevant); Assert.AreEqual(result.InitialFailureMechanismResult, row.InitialFailureMechanismResult); - Assert.AreEqual(result.ManualInitialFailureMechanismResultProfileProbability, row.InitialFailureMechanismResultProfileProbability); - Assert.AreEqual(result.ManualInitialFailureMechanismResultSectionProbability, row.InitialFailureMechanismResultSectionProbability); + Assert.AreEqual(0.43485793401079542, row.InitialFailureMechanismResultProfileProbability); + Assert.AreEqual(0.43543774458947654, row.InitialFailureMechanismResultSectionProbability); Assert.AreEqual(result.FurtherAnalysisNeeded, row.FurtherAnalysisNeeded); Assert.AreEqual(result.ProbabilityRefinementType, row.ProbabilityRefinementType); Assert.AreEqual(result.RefinedProfileProbability, row.RefinedProfileProbability); @@ -145,6 +145,46 @@ } [Test] + [TestCase(InitialFailureMechanismResultType.Manual)] + [TestCase(InitialFailureMechanismResultType.NoFailureProbability)] + public void GivenRowWithInitialFailureMechanismResultAdopt_WhenValueChanged_ThenInitialProbabilitiesChanged(InitialFailureMechanismResultType newValue) + { + // Given + var failureMechanism = new PipingFailureMechanism(); + + var mocks = new MockRepository(); + IAssessmentSection assessmentSection = AssessmentSectionTestHelper.CreateAssessmentSectionStub(failureMechanism, mocks); + var observer = mocks.StrictMock(); + observer.Expect(o => o.UpdateObserver()); + mocks.ReplayAll(); + + FailureMechanismSection section = FailureMechanismSectionTestFactory.CreateFailureMechanismSection(); + var result = new PipingFailureMechanismSectionResult(section); + result.Attach(observer); + + SemiProbabilisticPipingCalculationScenario[] calculationScenarios = + { + SemiProbabilisticPipingCalculationTestFactory.CreateCalculation(section) + }; + + var row = new PipingFailureMechanismSectionResultRow(result, calculationScenarios, failureMechanism, assessmentSection); + + // Precondition + Assert.AreEqual(0.43485793401079542, row.InitialFailureMechanismResultProfileProbability); + Assert.AreEqual(0.43543774458947654, row.InitialFailureMechanismResultSectionProbability); + + // When + row.InitialFailureMechanismResult = newValue; + + // Then + Assert.AreEqual(result.ManualInitialFailureMechanismResultProfileProbability, row.InitialFailureMechanismResultProfileProbability); + Assert.AreEqual(result.ManualInitialFailureMechanismResultSectionProbability, row.InitialFailureMechanismResultSectionProbability); + mocks.VerifyAll(); + } + + #region Registration + + [Test] public void IsRelevant_SetNewValue_NotifyObserversAndPropertyChanged() { const bool newValue = false; @@ -302,7 +342,7 @@ FailureMechanismSection section = FailureMechanismSectionTestFactory.CreateFailureMechanismSection(); var result = new PipingFailureMechanismSectionResult(section); - var row = new PipingFailureMechanismSectionResultRow(result, Enumerable.Empty>(), + var row = new PipingFailureMechanismSectionResultRow(result, Enumerable.Empty(), failureMechanism, assessmentSection); // Call @@ -313,7 +353,7 @@ TestHelper.AssertThrowsArgumentExceptionAndTestMessage(Call, expectedMessage); mocks.VerifyAll(); } - + private static IEnumerable GetValidProbabilities() { yield return new TestCaseData(0); @@ -330,5 +370,7 @@ yield return new TestCaseData(1 + 1e-6); yield return new TestCaseData(12); } + + #endregion } } \ No newline at end of file