Index: Ringtoets/Common/src/Ringtoets.Common.Data/BaseFailureMechanism.cs =================================================================== diff -u -r6f069737c5a49402fc344e4f7e350c6d869b69f2 -reaba38093f5f76350766303e83e497fd4af07227 --- Ringtoets/Common/src/Ringtoets.Common.Data/BaseFailureMechanism.cs (.../BaseFailureMechanism.cs) (revision 6f069737c5a49402fc344e4f7e350c6d869b69f2) +++ Ringtoets/Common/src/Ringtoets.Common.Data/BaseFailureMechanism.cs (.../BaseFailureMechanism.cs) (revision eaba38093f5f76350766303e83e497fd4af07227) @@ -69,7 +69,7 @@ } set { - if (value <= 0 || value > 100) + if (value < 0 || value > 100) { throw new ArgumentOutOfRangeException("value", Resources.Contribution_Value_should_be_in_interval_0_100); } Index: Ringtoets/Common/src/Ringtoets.Common.Data/Properties/Resources.Designer.cs =================================================================== diff -u -r5b575c7019f5ec9d0db2784fda5cb5c7b4df9a90 -reaba38093f5f76350766303e83e497fd4af07227 --- Ringtoets/Common/src/Ringtoets.Common.Data/Properties/Resources.Designer.cs (.../Resources.Designer.cs) (revision 5b575c7019f5ec9d0db2784fda5cb5c7b4df9a90) +++ Ringtoets/Common/src/Ringtoets.Common.Data/Properties/Resources.Designer.cs (.../Resources.Designer.cs) (revision eaba38093f5f76350766303e83e497fd4af07227) @@ -70,7 +70,7 @@ } /// - /// Looks up a localized string similar to De waarde voor de toegestane bijdrage aan faalkans moet in interval (0,100] liggen.. + /// Looks up a localized string similar to De waarde voor de toegestane bijdrage aan faalkans moet in interval [0,100] liggen.. /// public static string Contribution_Value_should_be_in_interval_0_100 { get { Index: Ringtoets/Common/src/Ringtoets.Common.Data/Properties/Resources.resx =================================================================== diff -u -r5b575c7019f5ec9d0db2784fda5cb5c7b4df9a90 -reaba38093f5f76350766303e83e497fd4af07227 --- Ringtoets/Common/src/Ringtoets.Common.Data/Properties/Resources.resx (.../Resources.resx) (revision 5b575c7019f5ec9d0db2784fda5cb5c7b4df9a90) +++ Ringtoets/Common/src/Ringtoets.Common.Data/Properties/Resources.resx (.../Resources.resx) (revision eaba38093f5f76350766303e83e497fd4af07227) @@ -124,7 +124,7 @@ Randvoorwaarden - De waarde voor de toegestane bijdrage aan faalkans moet in interval (0,100] liggen. + De waarde voor de toegestane bijdrage aan faalkans moet in interval [0,100] liggen. Locaties Index: Ringtoets/Common/test/Ringtoets.Common.Data.Test/BaseFailureMechanismTest.cs =================================================================== diff -u -r6f069737c5a49402fc344e4f7e350c6d869b69f2 -reaba38093f5f76350766303e83e497fd4af07227 --- Ringtoets/Common/test/Ringtoets.Common.Data.Test/BaseFailureMechanismTest.cs (.../BaseFailureMechanismTest.cs) (revision 6f069737c5a49402fc344e4f7e350c6d869b69f2) +++ Ringtoets/Common/test/Ringtoets.Common.Data.Test/BaseFailureMechanismTest.cs (.../BaseFailureMechanismTest.cs) (revision eaba38093f5f76350766303e83e497fd4af07227) @@ -32,7 +32,6 @@ [Test] [TestCase(101)] - [TestCase(0)] [TestCase(-1e-6)] [TestCase(-1)] [TestCase(100+1e-6)] @@ -51,7 +50,7 @@ [Test] [TestCase(100)] [TestCase(50)] - [TestCase(1e-9)] + [TestCase(0)] public void Contribution_ValueIntsideValidRegion_DoesNotThrow(double value) { // Setup Index: Ringtoets/Common/test/Ringtoets.Common.Data.Test/Contribution/FailureMechanismContributionTest.cs =================================================================== diff -u -r019c82bf6273ff150976c8c2ea9b895258951455 -reaba38093f5f76350766303e83e497fd4af07227 --- Ringtoets/Common/test/Ringtoets.Common.Data.Test/Contribution/FailureMechanismContributionTest.cs (.../FailureMechanismContributionTest.cs) (revision 019c82bf6273ff150976c8c2ea9b895258951455) +++ Ringtoets/Common/test/Ringtoets.Common.Data.Test/Contribution/FailureMechanismContributionTest.cs (.../FailureMechanismContributionTest.cs) (revision eaba38093f5f76350766303e83e497fd4af07227) @@ -83,7 +83,6 @@ } [Test] - [TestCase(0)] [TestCase(-10)] [TestCase(-1e-6)] [TestCase(100 + 1e-6)] @@ -106,7 +105,7 @@ [Test] [TestCase(50)] - [TestCase(1e-6)] + [TestCase(0)] [TestCase(100)] public void Constructor_EmptyFailureMechanisms_OnlyOtherFailureMechanismAddedWithContributionSet(double contribution) { Index: Ringtoets/Integration/src/Ringtoets.Integration.Data/AssessmentSection.cs =================================================================== diff -u -r8b5a6f938fe2b04cd78623649df37580e145055f -reaba38093f5f76350766303e83e497fd4af07227 --- Ringtoets/Integration/src/Ringtoets.Integration.Data/AssessmentSection.cs (.../AssessmentSection.cs) (revision 8b5a6f938fe2b04cd78623649df37580e145055f) +++ Ringtoets/Integration/src/Ringtoets.Integration.Data/AssessmentSection.cs (.../AssessmentSection.cs) (revision eaba38093f5f76350766303e83e497fd4af07227) @@ -77,6 +77,10 @@ { Contribution = 3 }; + DuneErosionFailureMechanism = new FailureMechanismPlaceholder(Resources.DuneErosionFailureMechanism_DisplayName) + { + Contribution = 0 + }; FailureMechanismContribution = new FailureMechanismContribution(GetFailureMechanisms(), 30, 30000); } @@ -152,6 +156,11 @@ /// public FailureMechanismPlaceholder GrassRevetmentFailureMechanism { get; private set; } + /// + /// Gets the "Duinerosie" failure mechanism. + /// + public FailureMechanismPlaceholder DuneErosionFailureMechanism { get; private set; } + public override IEnumerable GetFailureMechanisms() { yield return PipingFailureMechanism; @@ -163,6 +172,7 @@ yield return StoneRevetmentFailureMechanism; yield return AsphaltRevetmentFailureMechanism; yield return GrassRevetmentFailureMechanism; + yield return DuneErosionFailureMechanism; } } } \ No newline at end of file Index: Ringtoets/Integration/src/Ringtoets.Integration.Forms/Properties/Resources.Designer.cs =================================================================== diff -u -r8b5a6f938fe2b04cd78623649df37580e145055f -reaba38093f5f76350766303e83e497fd4af07227 --- Ringtoets/Integration/src/Ringtoets.Integration.Forms/Properties/Resources.Designer.cs (.../Resources.Designer.cs) (revision 8b5a6f938fe2b04cd78623649df37580e145055f) +++ Ringtoets/Integration/src/Ringtoets.Integration.Forms/Properties/Resources.Designer.cs (.../Resources.Designer.cs) (revision eaba38093f5f76350766303e83e497fd4af07227) @@ -163,6 +163,15 @@ } /// + /// Looks up a localized string similar to n.v.t. + /// + public static string FailureMechanismContributionView_ProbabilityPerYear_Not_applicable { + get { + return ResourceManager.GetString("FailureMechanismContributionView_ProbabilityPerYear_Not_applicable", resourceCulture); + } + } + + /// /// Looks up a localized resource of type System.Drawing.Bitmap. /// public static System.Drawing.Bitmap FailureMechanismIcon { Index: Ringtoets/Integration/src/Ringtoets.Integration.Forms/Properties/Resources.resx =================================================================== diff -u -r8b5a6f938fe2b04cd78623649df37580e145055f -reaba38093f5f76350766303e83e497fd4af07227 --- Ringtoets/Integration/src/Ringtoets.Integration.Forms/Properties/Resources.resx (.../Resources.resx) (revision 8b5a6f938fe2b04cd78623649df37580e145055f) +++ Ringtoets/Integration/src/Ringtoets.Integration.Forms/Properties/Resources.resx (.../Resources.resx) (revision eaba38093f5f76350766303e83e497fd4af07227) @@ -225,4 +225,7 @@ Selecteer database + + n.v.t + \ No newline at end of file Index: Ringtoets/Integration/src/Ringtoets.Integration.Forms/Views/FailureMechanismContributionView.Designer.cs =================================================================== diff -u -ra9a8404155745054ae98ccfeec456b820b05b2bf -reaba38093f5f76350766303e83e497fd4af07227 --- Ringtoets/Integration/src/Ringtoets.Integration.Forms/Views/FailureMechanismContributionView.Designer.cs (.../FailureMechanismContributionView.Designer.cs) (revision a9a8404155745054ae98ccfeec456b820b05b2bf) +++ Ringtoets/Integration/src/Ringtoets.Integration.Forms/Views/FailureMechanismContributionView.Designer.cs (.../FailureMechanismContributionView.Designer.cs) (revision eaba38093f5f76350766303e83e497fd4af07227) @@ -15,19 +15,6 @@ /// private System.ComponentModel.IContainer components = null; - /// - /// Clean up any resources being used. - /// - /// true if managed resources should be disposed; otherwise, false. - protected override void Dispose(bool disposing) - { - if (disposing && (components != null)) - { - components.Dispose(); - } - base.Dispose(disposing); - } - #region Component Designer generated code /// Index: Ringtoets/Integration/src/Ringtoets.Integration.Forms/Views/FailureMechanismContributionView.cs =================================================================== diff -u -rd1565906db90df7be4365d277d5ff22dc2d77a82 -reaba38093f5f76350766303e83e497fd4af07227 --- Ringtoets/Integration/src/Ringtoets.Integration.Forms/Views/FailureMechanismContributionView.cs (.../FailureMechanismContributionView.cs) (revision d1565906db90df7be4365d277d5ff22dc2d77a82) +++ Ringtoets/Integration/src/Ringtoets.Integration.Forms/Views/FailureMechanismContributionView.cs (.../FailureMechanismContributionView.cs) (revision eaba38093f5f76350766303e83e497fd4af07227) @@ -20,14 +20,18 @@ // All rights reserved. using System; +using System.Linq; using System.Windows.Forms; + using Core.Common.Base; using Core.Common.Controls.Views; -using Core.Common.Gui.Properties; using Core.Common.Utils.Reflection; using Ringtoets.Common.Data.Contribution; +using CommonGuiResources = Core.Common.Gui.Properties.Resources; +using RingtoetsIntegrationFormsResources = Ringtoets.Integration.Forms.Properties.Resources; + namespace Ringtoets.Integration.Forms.Views { /// @@ -37,6 +41,7 @@ /// public partial class FailureMechanismContributionView : UserControl, IView, IObserver { + private DataGridViewColumn probabilityPerYearColumn; private FailureMechanismContribution data; /// @@ -48,6 +53,7 @@ InitializeGridColumns(); BindNormChange(); BindNormInputLeave(); + SubscribeEvents(); } public object Data @@ -68,6 +74,43 @@ probabilityDistributionGrid.Invalidate(); } + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + UnsubscribeEvents(); + base.Dispose(disposing); + } + + private void SubscribeEvents() + { + probabilityDistributionGrid.CellFormatting += ProbabilityDistributionGridOnCellFormatting; + } + + private void UnsubscribeEvents() + { + probabilityDistributionGrid.CellFormatting -= ProbabilityDistributionGridOnCellFormatting; + } + + private void ProbabilityDistributionGridOnCellFormatting(object sender, DataGridViewCellFormattingEventArgs e) + { + if (e.ColumnIndex == probabilityPerYearColumn.Index) + { + var contributionItem = data.Distribution.ElementAt(e.RowIndex); + if (contributionItem.Contribution == 0.0) + { + e.Value = RingtoetsIntegrationFormsResources.FailureMechanismContributionView_ProbabilityPerYear_Not_applicable; + e.FormattingApplied = true; + } + } + } + private void SetNormValue(FailureMechanismContribution value) { UnbindNormChange(); @@ -155,7 +198,7 @@ var assessmentColumn = new DataGridViewTextBoxColumn { DataPropertyName = assessmentName, - HeaderText = Resources.FailureMechanismContributionView_GridColumn_Assessment, + HeaderText = CommonGuiResources.FailureMechanismContributionView_GridColumn_Assessment, Name = string.Format(columnNameFormat, assessmentName), AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCellsExceptHeader }; @@ -164,16 +207,16 @@ var probabilityColumn = new DataGridViewTextBoxColumn { DataPropertyName = contributionName, - HeaderText = Resources.FailureMechanismContributionView_GridColumn_Contribution, + HeaderText = CommonGuiResources.FailureMechanismContributionView_GridColumn_Contribution, Name = string.Format(columnNameFormat, contributionName), AutoSizeMode = DataGridViewAutoSizeColumnMode.ColumnHeader }; var probabilitySpaceName = TypeUtils.GetMemberName(fmci => fmci.ProbabilitySpace); - var probabilityPerYearColumn = new DataGridViewTextBoxColumn + probabilityPerYearColumn = new DataGridViewTextBoxColumn { DataPropertyName = probabilitySpaceName, - HeaderText = Resources.FailureMechanismContributionView_GridColumn_ProbabilitySpace, + HeaderText = CommonGuiResources.FailureMechanismContributionView_GridColumn_ProbabilitySpace, Name = string.Format(columnNameFormat, probabilitySpaceName), AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill, MinimumWidth = 100 Index: Ringtoets/Integration/test/Ringtoets.Integration.Data.Test/AssessmentSectionTest.cs =================================================================== diff -u -r8b5a6f938fe2b04cd78623649df37580e145055f -reaba38093f5f76350766303e83e497fd4af07227 --- Ringtoets/Integration/test/Ringtoets.Integration.Data.Test/AssessmentSectionTest.cs (.../AssessmentSectionTest.cs) (revision 8b5a6f938fe2b04cd78623649df37580e145055f) +++ Ringtoets/Integration/test/Ringtoets.Integration.Data.Test/AssessmentSectionTest.cs (.../AssessmentSectionTest.cs) (revision eaba38093f5f76350766303e83e497fd4af07227) @@ -30,9 +30,10 @@ var stoneRevetmentName = "Dijken - Steenbekledingen"; var asphaltName = "Dijken - Asfaltbekledingen"; var grassRevetmentName = "Dijken - Grasbekledingen"; + var duneErosionName = "Duinen - Erosie"; var pipingContribution = 24; - var contributions = new double[] { pipingContribution, 24, 4, 2, 4, 2, 4, 3, 3, 30 }; + var contributions = new double[] { pipingContribution, 24, 4, 2, 4, 2, 4, 3, 3, 0, 30 }; var names = new[] { pipingName, grassErosionName, @@ -43,6 +44,7 @@ stoneRevetmentName, asphaltName, grassRevetmentName, + duneErosionName, "Overig" }; @@ -66,6 +68,7 @@ Assert.AreEqual(stoneRevetmentName, section.StoneRevetmentFailureMechanism.Name); Assert.AreEqual(asphaltName, section.AsphaltRevetmentFailureMechanism.Name); Assert.AreEqual(grassRevetmentName, section.GrassRevetmentFailureMechanism.Name); + Assert.AreEqual(duneErosionName, section.DuneErosionFailureMechanism.Name); Assert.AreEqual(24, section.PipingFailureMechanism.Contribution); Assert.AreEqual(24, section.GrassErosionFailureMechanism.Contribution); @@ -76,10 +79,11 @@ Assert.AreEqual(4, section.StoneRevetmentFailureMechanism.Contribution); Assert.AreEqual(3, section.AsphaltRevetmentFailureMechanism.Contribution); Assert.AreEqual(3, section.GrassRevetmentFailureMechanism.Contribution); + Assert.AreEqual(0, section.DuneErosionFailureMechanism.Contribution); Assert.AreEqual(contributions, section.FailureMechanismContribution.Distribution.Select(d => d.Contribution)); Assert.AreEqual(names, section.FailureMechanismContribution.Distribution.Select(d => d.Assessment)); - Assert.AreEqual(Enumerable.Repeat(30000.0, 10), section.FailureMechanismContribution.Distribution.Select(d => d.Norm)); + Assert.AreEqual(Enumerable.Repeat(30000.0, 11), section.FailureMechanismContribution.Distribution.Select(d => d.Norm)); Assert.AreEqual(pipingContribution, section.PipingFailureMechanism.SemiProbabilisticInput.Contribution); Assert.AreEqual(30000.0, section.PipingFailureMechanism.SemiProbabilisticInput.Norm); @@ -113,7 +117,7 @@ var failureMechanisms = assessmentSection.GetFailureMechanisms().ToArray(); // Assert - Assert.AreEqual(9, failureMechanisms.Length); + Assert.AreEqual(10, failureMechanisms.Length); Assert.AreSame(assessmentSection.PipingFailureMechanism, failureMechanisms[0]); Assert.AreSame(assessmentSection.GrassErosionFailureMechanism, failureMechanisms[1]); Assert.AreSame(assessmentSection.MacrostabilityInwardFailureMechanism, failureMechanisms[2]); @@ -123,6 +127,7 @@ Assert.AreSame(assessmentSection.StoneRevetmentFailureMechanism, failureMechanisms[6]); Assert.AreSame(assessmentSection.AsphaltRevetmentFailureMechanism, failureMechanisms[7]); Assert.AreSame(assessmentSection.GrassRevetmentFailureMechanism, failureMechanisms[8]); + Assert.AreSame(assessmentSection.DuneErosionFailureMechanism, failureMechanisms[9]); } [Test] @@ -138,19 +143,19 @@ // Assert var failureMechanisms = assessmentSection.GetFailureMechanisms().ToArray(); - Assert.AreEqual(10, contribution.Length); + Assert.AreEqual(11, contribution.Length); - for (int i = 0; i < 9; i++) + for (int i = 0; i < 10; i++) { Assert.AreEqual(failureMechanisms[i].Name, contribution[i].Assessment); Assert.AreEqual(failureMechanisms[i].Contribution, contribution[i].Contribution); Assert.AreEqual(norm, contribution[i].Norm); Assert.AreEqual((norm / contribution[i].Contribution) * 100, contribution[i].ProbabilitySpace); } - Assert.AreEqual("Overig", contribution[9].Assessment); - Assert.AreEqual(30, contribution[9].Contribution); - Assert.AreEqual(norm, contribution[9].Norm); - Assert.AreEqual((norm / contribution[9].Contribution) * 100, 100000); + Assert.AreEqual("Overig", contribution[10].Assessment); + Assert.AreEqual(30, contribution[10].Contribution); + Assert.AreEqual(norm, contribution[10].Norm); + Assert.AreEqual((norm / contribution[10].Contribution) * 100, 100000); } [Test] Index: Ringtoets/Integration/test/Ringtoets.Integration.Forms.Test/Views/FailureMechanismContributionViewTest.cs =================================================================== diff -u -rd1565906db90df7be4365d277d5ff22dc2d77a82 -reaba38093f5f76350766303e83e497fd4af07227 --- Ringtoets/Integration/test/Ringtoets.Integration.Forms.Test/Views/FailureMechanismContributionViewTest.cs (.../FailureMechanismContributionViewTest.cs) (revision d1565906db90df7be4365d277d5ff22dc2d77a82) +++ Ringtoets/Integration/test/Ringtoets.Integration.Forms.Test/Views/FailureMechanismContributionViewTest.cs (.../FailureMechanismContributionViewTest.cs) (revision eaba38093f5f76350766303e83e497fd4af07227) @@ -13,10 +13,12 @@ [TestFixture] public class FailureMechanismContributionViewTest { + private const string normInputTextBoxName = "normInput"; + private const string dataGridViewControlName = "probabilityDistributionGrid"; + private MockRepository mockRepository; private FailureMechanismContribution distribution; private Form testForm; - private ControlTester normTester; [SetUp] public void Setup() @@ -52,6 +54,7 @@ }) { ShowFormWithView(distributionView); + var normTester = new ControlTester(normInputTextBoxName); // Assert Assert.AreEqual(distribution.Norm.ToString(), normTester.Text); @@ -75,6 +78,7 @@ }) { ShowFormWithView(distributionView); + var normTester = new ControlTester(normInputTextBoxName); // Precondition Assert.AreEqual(distribution.Norm.ToString(), normTester.Text); @@ -115,6 +119,7 @@ }) { ShowFormWithView(distributionView); + var normTester = new ControlTester(normInputTextBoxName); // Precondition Assert.AreEqual(aValue.ToString(), normTester.Properties.Text); @@ -137,12 +142,76 @@ mockRepository.VerifyAll(); } + [Test] + public void GivenFailureMechanismContributionView_WhenSettingDataWithZeroContributionFailureMechanism_ProbabilitySpaceShowsAsNotApplicable() + { + // Given + using (var view = new FailureMechanismContributionView()) + { + // When + var failureMechanismStub = mockRepository.Stub(); + failureMechanismStub.Stub(fm => fm.Name).Return("A"); + failureMechanismStub.Contribution = 0; + mockRepository.ReplayAll(); + + var contributionData = new FailureMechanismContribution(new[] + { + failureMechanismStub + }, 100, 500); + + view.Data = contributionData; + ShowFormWithView(view); + + // Then + var dataGridView = (DataGridView)new ControlTester(dataGridViewControlName).TheObject; + + DataGridViewRow zeroContributionFailureMechanismRow = dataGridView.Rows[0]; + DataGridViewCell probabilitySpaceCell = zeroContributionFailureMechanismRow.Cells[2]; + Assert.AreEqual("n.v.t", probabilitySpaceCell.FormattedValue); + } + mockRepository.VerifyAll(); + } + + [Test] + public void GivenFailureMechanismContributionView_WhenSettingDataWithNormalContributionFailureMechanism_ProbabilitySpaceShowsAsLocalisedText() + { + // Given + using (var view = new FailureMechanismContributionView()) + { + // When + const double contribution = 25.0; + const int norm = 500; + + var failureMechanismStub = mockRepository.Stub(); + failureMechanismStub.Stub(fm => fm.Name).Return("A"); + failureMechanismStub.Contribution = contribution; + mockRepository.ReplayAll(); + + var contributionData = new FailureMechanismContribution(new[] + { + failureMechanismStub + }, 100.0 - contribution, norm); + + view.Data = contributionData; + ShowFormWithView(view); + + // Then + var dataGridView = (DataGridView)new ControlTester(dataGridViewControlName).TheObject; + + DataGridViewRow zeroContributionFailureMechanismRow = dataGridView.Rows[0]; + DataGridViewCell probabilitySpaceCell = zeroContributionFailureMechanismRow.Cells[2]; + + string expectedTextValue = new FailureMechanismContributionItem(failureMechanismStub, norm) + .ProbabilitySpace.ToString(probabilitySpaceCell.InheritedStyle.Format, probabilitySpaceCell.InheritedStyle.FormatProvider); + Assert.AreEqual(expectedTextValue, probabilitySpaceCell.FormattedValue); + } + mockRepository.VerifyAll(); + } + private void ShowFormWithView(FailureMechanismContributionView distributionView) { testForm.Controls.Add(distributionView); testForm.Show(); - - normTester = new ControlTester("normInput"); } } } \ No newline at end of file