Index: Ringtoets/Common/src/Ringtoets.Common.Data/Contribution/FailureMechanismContribution.cs =================================================================== diff -u -rf1bd17ba95b3fbae5928d4240523d50d8b83b64d -r8efe7a79774f6a946a58c45f052c975d43304fb3 --- Ringtoets/Common/src/Ringtoets.Common.Data/Contribution/FailureMechanismContribution.cs (.../FailureMechanismContribution.cs) (revision f1bd17ba95b3fbae5928d4240523d50d8b83b64d) +++ Ringtoets/Common/src/Ringtoets.Common.Data/Contribution/FailureMechanismContribution.cs (.../FailureMechanismContribution.cs) (revision 8efe7a79774f6a946a58c45f052c975d43304fb3) @@ -138,7 +138,7 @@ { Contribution = otherContribution }; - var otherContributionItem = new FailureMechanismContributionItem(otherFailureMechanism, norm); + var otherContributionItem = new FailureMechanismContributionItem(otherFailureMechanism, norm, true); distribution.Add(otherContributionItem); } } Index: Ringtoets/Common/src/Ringtoets.Common.Data/Contribution/FailureMechanismContributionItem.cs =================================================================== diff -u -r103f8cf52c957309a116106dc9ae31169ff83169 -r8efe7a79774f6a946a58c45f052c975d43304fb3 --- Ringtoets/Common/src/Ringtoets.Common.Data/Contribution/FailureMechanismContributionItem.cs (.../FailureMechanismContributionItem.cs) (revision 103f8cf52c957309a116106dc9ae31169ff83169) +++ Ringtoets/Common/src/Ringtoets.Common.Data/Contribution/FailureMechanismContributionItem.cs (.../FailureMechanismContributionItem.cs) (revision 8efe7a79774f6a946a58c45f052c975d43304fb3) @@ -41,8 +41,11 @@ /// /// The for which the contribution is defined. /// The norm used to calculate the probability space. + /// Gets a value indicating whether + /// the corresponding failure mechanism is always relevant. When true, then + /// cannot be set to false. /// Thrown when is null. - public FailureMechanismContributionItem(IFailureMechanism failureMechanism, int norm) + public FailureMechanismContributionItem(IFailureMechanism failureMechanism, int norm, bool isFailureMechanismAlwaysRelevant = false) { if (failureMechanism == null) { @@ -52,6 +55,7 @@ Assessment = failureMechanism.Name; Contribution = failureMechanism.Contribution; Norm = norm; + IsAlwaysRelevant = isFailureMechanismAlwaysRelevant; } /// @@ -88,15 +92,24 @@ { get { - return failureMechanism.IsRelevant; + return IsAlwaysRelevant || failureMechanism.IsRelevant; } set { - failureMechanism.IsRelevant = value; + if (!IsAlwaysRelevant) + { + failureMechanism.IsRelevant = value; + } } } /// + /// Gets a value indicating whether the corresponding failure mechanism is always + /// relevant. When true, then cannot be set to false. + /// + public bool IsAlwaysRelevant { get; private set; } + + /// /// Notifies the observers for the wrapped . /// public void NotifyFailureMechanismObservers() Index: Ringtoets/Common/test/Ringtoets.Common.Data.Test/Contribution/FailureMechanismContributionItemTest.cs =================================================================== diff -u -r1e4d77c17c6eac78bfd705efdff9e52b4fca2c7e -r8efe7a79774f6a946a58c45f052c975d43304fb3 --- Ringtoets/Common/test/Ringtoets.Common.Data.Test/Contribution/FailureMechanismContributionItemTest.cs (.../FailureMechanismContributionItemTest.cs) (revision 1e4d77c17c6eac78bfd705efdff9e52b4fca2c7e) +++ Ringtoets/Common/test/Ringtoets.Common.Data.Test/Contribution/FailureMechanismContributionItemTest.cs (.../FailureMechanismContributionItemTest.cs) (revision 8efe7a79774f6a946a58c45f052c975d43304fb3) @@ -85,12 +85,43 @@ Assert.AreEqual(name, result.Assessment); Assert.AreEqual(contribution, result.Contribution); Assert.AreEqual(norm, result.Norm); + Assert.IsFalse(result.IsAlwaysRelevant); Assert.AreEqual(isRelevant, result.IsRelevant); mockRepository.VerifyAll(); } [Test] + public void Constructor_WithFailureMechanismThatIsAlwaysRelevant_SetProperties() + { + // Setup + string name = "SomeName"; + var random = new Random(21); + double contribution = random.Next(1, 100); + var norm = random.Next(1, int.MaxValue); + const bool isRelevant = false; + + var failureMechanism = mockRepository.StrictMock(); + failureMechanism.Expect(fm => fm.Name).Return(name); + failureMechanism.Expect(fm => fm.Contribution).Return(contribution); + failureMechanism.Stub(fm => fm.IsRelevant).Return(isRelevant); + + mockRepository.ReplayAll(); + + // Call + var result = new FailureMechanismContributionItem(failureMechanism, norm, true); + + // Assert + Assert.AreEqual(name, result.Assessment); + Assert.AreEqual(contribution, result.Contribution); + Assert.AreEqual(norm, result.Norm); + Assert.IsTrue(result.IsAlwaysRelevant); + Assert.IsTrue(result.IsRelevant); + + mockRepository.VerifyAll(); + } + + [Test] [TestCase(20, 2000, 10000)] [TestCase(3, 100, 10000/3.0)] [TestCase(25.5, 2550, 10000)] @@ -137,6 +168,26 @@ } [Test] + public void IsRelevant_SetNewValueWhenAlwaysRelevant_NothingChanges() + { + // Setup + var failureMechanism = mockRepository.Stub(); + failureMechanism.IsRelevant = false; + mockRepository.ReplayAll(); + + var contributionItem = new FailureMechanismContributionItem(failureMechanism, 30000, true); + + // Precondition: + Assert.IsTrue(contributionItem.IsRelevant); + + // Call + contributionItem.IsRelevant = false; + + // Assert + Assert.IsTrue(contributionItem.IsRelevant); + } + + [Test] public void NotifyFailureMechanismObservers_Always_CallsFailureMechanismUpdateObservers() { // Setup Index: Ringtoets/Common/test/Ringtoets.Common.Data.Test/Contribution/FailureMechanismContributionTest.cs =================================================================== diff -u -rf1bd17ba95b3fbae5928d4240523d50d8b83b64d -r8efe7a79774f6a946a58c45f052c975d43304fb3 --- Ringtoets/Common/test/Ringtoets.Common.Data.Test/Contribution/FailureMechanismContributionTest.cs (.../FailureMechanismContributionTest.cs) (revision f1bd17ba95b3fbae5928d4240523d50d8b83b64d) +++ Ringtoets/Common/test/Ringtoets.Common.Data.Test/Contribution/FailureMechanismContributionTest.cs (.../FailureMechanismContributionTest.cs) (revision 8efe7a79774f6a946a58c45f052c975d43304fb3) @@ -132,6 +132,8 @@ FailureMechanismContributionItem otherFailureMechanismItem = result.Distribution.ElementAt(0); Assert.AreEqual(contribution, otherFailureMechanismItem.Contribution); AssertFailureProbabilitySpace(contribution, norm, otherFailureMechanismItem.ProbabilitySpace); + Assert.IsTrue(otherFailureMechanismItem.IsAlwaysRelevant); + Assert.IsTrue(otherFailureMechanismItem.IsRelevant); Assert.AreEqual(norm, result.Norm); } @@ -179,7 +181,9 @@ CollectionAssert.AreEqual(failureMechanismNames, result.Distribution.Select(d => d.Assessment)); CollectionAssert.AreEqual(failureMechanismContributions, result.Distribution.Select(d => d.Contribution)); CollectionAssert.AreEqual(failureMechanismContributions.Select(c => (norm/c)*100), result.Distribution.Select(d => d.ProbabilitySpace)); - + var expectedIsAlwaysRelevant = Enumerable.Repeat(false, failureMechanismCount) + .Concat(Enumerable.Repeat(true, 1)); + CollectionAssert.AreEqual(expectedIsAlwaysRelevant, result.Distribution.Select(d => d.IsAlwaysRelevant)); mockRepository.VerifyAll(); } Index: Ringtoets/Integration/src/Ringtoets.Integration.Forms/Views/FailureMechanismContributionView.cs =================================================================== diff -u -r4ee9bf9a46317d760d9d8fdf95b9024571fc04fe -r8efe7a79774f6a946a58c45f052c975d43304fb3 --- Ringtoets/Integration/src/Ringtoets.Integration.Forms/Views/FailureMechanismContributionView.cs (.../FailureMechanismContributionView.cs) (revision 4ee9bf9a46317d760d9d8fdf95b9024571fc04fe) +++ Ringtoets/Integration/src/Ringtoets.Integration.Forms/Views/FailureMechanismContributionView.cs (.../FailureMechanismContributionView.cs) (revision 8efe7a79774f6a946a58c45f052c975d43304fb3) @@ -409,8 +409,11 @@ { foreach (DataGridViewRow row in probabilityDistributionGrid.Rows) { - var isFailureMechanismRelevant = (bool)row.Cells[isRelevantColumn.Index].Value; + var isRelevantCell = (DataGridViewCheckBoxCell)row.Cells[isRelevantColumn.Index]; + FailureMechanismContributionItem rowData = data.Distribution.ElementAt(row.Index); + isRelevantCell.ReadOnly = rowData.IsAlwaysRelevant; + var isFailureMechanismRelevant = (bool)isRelevantCell.Value; SetRowStyle(isFailureMechanismRelevant, row); } } Index: Ringtoets/Integration/test/Ringtoets.Integration.Forms.Test/Ringtoets.Integration.Forms.Test.csproj =================================================================== diff -u -r684b8c0ca681ea2da3cc988bd60e9223037e5a16 -r8efe7a79774f6a946a58c45f052c975d43304fb3 --- Ringtoets/Integration/test/Ringtoets.Integration.Forms.Test/Ringtoets.Integration.Forms.Test.csproj (.../Ringtoets.Integration.Forms.Test.csproj) (revision 684b8c0ca681ea2da3cc988bd60e9223037e5a16) +++ Ringtoets/Integration/test/Ringtoets.Integration.Forms.Test/Ringtoets.Integration.Forms.Test.csproj (.../Ringtoets.Integration.Forms.Test.csproj) (revision 8efe7a79774f6a946a58c45f052c975d43304fb3) @@ -66,7 +66,6 @@ - Fisheye: Tag 8efe7a79774f6a946a58c45f052c975d43304fb3 refers to a dead (removed) revision in file `Ringtoets/Integration/test/Ringtoets.Integration.Forms.Test/TreeNodeInfos/DisabledFailureMechanismTreeNodeInfoTest.cs'. Fisheye: No comparison available. Pass `N' to diff? Index: Ringtoets/Integration/test/Ringtoets.Integration.Forms.Test/Views/FailureMechanismContributionViewTest.cs =================================================================== diff -u -r4ee9bf9a46317d760d9d8fdf95b9024571fc04fe -r8efe7a79774f6a946a58c45f052c975d43304fb3 --- Ringtoets/Integration/test/Ringtoets.Integration.Forms.Test/Views/FailureMechanismContributionViewTest.cs (.../FailureMechanismContributionViewTest.cs) (revision 4ee9bf9a46317d760d9d8fdf95b9024571fc04fe) +++ Ringtoets/Integration/test/Ringtoets.Integration.Forms.Test/Views/FailureMechanismContributionViewTest.cs (.../FailureMechanismContributionViewTest.cs) (revision 8efe7a79774f6a946a58c45f052c975d43304fb3) @@ -881,6 +881,35 @@ mocks.VerifyAll(); } + [Test] + public void GivenView_WhenSettingFailureMechanismThatIsAlwaysRelevant_IsRelevantFlagTrueAndReadonly() + { + // Given + using (var view = new FailureMechanismContributionView()) + { + ShowFormWithView(view); + + var failureMechanisms = Enumerable.Empty(); + var contribution = new FailureMechanismContribution(failureMechanisms, 50.0, 30000); + + // Precondition: + FailureMechanismContributionItem[] contributionItems = contribution.Distribution.ToArray(); + Assert.AreEqual(1, contributionItems.Length); + Assert.IsTrue(contributionItems[0].IsAlwaysRelevant); + Assert.IsTrue(contributionItems[0].IsRelevant); + + // When + view.Data = contribution; + + // Then + var dataGridView = (DataGridView)new ControlTester(dataGridViewControlName).TheObject; + DataGridViewRow row = dataGridView.Rows[0]; + DataGridViewCell isRelevantCell = row.Cells[isRelevantColumnIndex]; + Assert.IsTrue((bool)isRelevantCell.Value); + Assert.IsTrue(isRelevantCell.ReadOnly); + } + } + private void AssertDataGridViewDataSource(IEnumerable expectedDistributionElements, DataGridView dataGridView) { FailureMechanismContributionItem[] itemArray = expectedDistributionElements.ToArray();