Index: Ringtoets/Common/src/Ringtoets.Common.Forms/Properties/Resources.Designer.cs
===================================================================
diff -u -rb034322e34cde361a1cb86dffc55e9e0f83a1a9f -r4d7632a55f75ca47d7cee49166570d91a75d3d8f
--- Ringtoets/Common/src/Ringtoets.Common.Forms/Properties/Resources.Designer.cs (.../Resources.Designer.cs) (revision b034322e34cde361a1cb86dffc55e9e0f83a1a9f)
+++ Ringtoets/Common/src/Ringtoets.Common.Forms/Properties/Resources.Designer.cs (.../Resources.Designer.cs) (revision 4d7632a55f75ca47d7cee49166570d91a75d3d8f)
@@ -680,6 +680,60 @@
}
///
+ /// Looks up a localized string similar to Naam van de categorie..
+ ///
+ public static string CategoryProperties_Group_Description {
+ get {
+ return ResourceManager.GetString("CategoryProperties_Group_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Naam.
+ ///
+ public static string CategoryProperties_Group_DisplayName {
+ get {
+ return ResourceManager.GetString("CategoryProperties_Group_DisplayName", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Ondergrens van de categorie..
+ ///
+ public static string CategoryProperties_LowerBoundary_Description {
+ get {
+ return ResourceManager.GetString("CategoryProperties_LowerBoundary_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Ondergrens [1/jaar].
+ ///
+ public static string CategoryProperties_LowerBoundary_DisplayName {
+ get {
+ return ResourceManager.GetString("CategoryProperties_LowerBoundary_DisplayName", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Bovengrens van de categorie..
+ ///
+ public static string CategoryProperties_UpperBoundary_Description {
+ get {
+ return ResourceManager.GetString("CategoryProperties_UpperBoundary_Description", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Bovengrens [1/jaar].
+ ///
+ public static string CategoryProperties_UpperBoundary_DisplayName {
+ get {
+ return ResourceManager.GetString("CategoryProperties_UpperBoundary_DisplayName", resourceCulture);
+ }
+ }
+
+ ///
/// Looks up a localized string similar to De locatie van het begin van de slootbodem wanneer deze van de kant van de dijk wordt benaderd..
///
public static string CharacteristicPoint_BottomDitchDikeSide_Description {
@@ -1392,6 +1446,46 @@
}
///
+ /// Looks up a localized string similar to De categoriegrenzen per traject voor dit toetsspoor..
+ ///
+ public static string FailureMechanismCategoryBoundariesProperties_FailureMechanismBoundaries_Description {
+ get {
+ return ResourceManager.GetString("FailureMechanismCategoryBoundariesProperties_FailureMechanismBoundaries_Descripti" +
+ "on", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Categoriegrenzen per traject.
+ ///
+ public static string FailureMechanismCategoryBoundariesProperties_FailureMechanismBoundaries_DisplayName {
+ get {
+ return ResourceManager.GetString("FailureMechanismCategoryBoundariesProperties_FailureMechanismBoundaries_DisplayNa" +
+ "me", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to De categoriegrenzen per vak voor dit toetsspoor..
+ ///
+ public static string FailureMechanismCategoryBoundariesProperties_FailureMechanismSectionBoundaries_Description {
+ get {
+ return ResourceManager.GetString("FailureMechanismCategoryBoundariesProperties_FailureMechanismSectionBoundaries_De" +
+ "scription", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Categoriegrenzen per vak.
+ ///
+ public static string FailureMechanismCategoryBoundariesProperties_FailureMechanismSectionBoundaries_DisplayName {
+ get {
+ return ResourceManager.GetString("FailureMechanismCategoryBoundariesProperties_FailureMechanismSectionBoundaries_Di" +
+ "splayName", resourceCulture);
+ }
+ }
+
+ ///
/// Looks up a localized string similar to I&s relevant.
///
public static string FailureMechanismContextMenuStrip_Is_relevant {
Index: Ringtoets/Common/src/Ringtoets.Common.Forms/Properties/Resources.resx
===================================================================
diff -u -rb034322e34cde361a1cb86dffc55e9e0f83a1a9f -r4d7632a55f75ca47d7cee49166570d91a75d3d8f
--- Ringtoets/Common/src/Ringtoets.Common.Forms/Properties/Resources.resx (.../Resources.resx) (revision b034322e34cde361a1cb86dffc55e9e0f83a1a9f)
+++ Ringtoets/Common/src/Ringtoets.Common.Forms/Properties/Resources.resx (.../Resources.resx) (revision 4d7632a55f75ca47d7cee49166570d91a75d3d8f)
@@ -1401,4 +1401,34 @@
Categoriegrenzen
+
+ Naam van de categorie.
+
+
+ Naam
+
+
+ Ondergrens van de categorie.
+
+
+ Ondergrens [1/jaar]
+
+
+ Bovengrens van de categorie.
+
+
+ Bovengrens [1/jaar]
+
+
+ De categoriegrenzen per traject voor dit toetsspoor.
+
+
+ Categoriegrenzen per traject
+
+
+ De categoriegrenzen per vak voor dit toetsspoor.
+
+
+ Categoriegrenzen per vak
+
\ No newline at end of file
Index: Ringtoets/Common/src/Ringtoets.Common.Forms/PropertyClasses/FailureMechanismCategoryBoundariesBaseProperties.cs
===================================================================
diff -u
--- Ringtoets/Common/src/Ringtoets.Common.Forms/PropertyClasses/FailureMechanismCategoryBoundariesBaseProperties.cs (revision 0)
+++ Ringtoets/Common/src/Ringtoets.Common.Forms/PropertyClasses/FailureMechanismCategoryBoundariesBaseProperties.cs (revision 4d7632a55f75ca47d7cee49166570d91a75d3d8f)
@@ -0,0 +1,130 @@
+// Copyright (C) Stichting Deltares 2017. All rights reserved.
+//
+// This file is part of Ringtoets.
+//
+// Ringtoets is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this program. If not, see .
+//
+// All names, logos, and references to "Deltares" are registered trademarks of
+// Stichting Deltares and remain full property of Stichting Deltares at all times.
+// All rights reserved.
+
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Linq;
+using Core.Common.Gui.Attributes;
+using Core.Common.Gui.Converters;
+using Core.Common.Gui.PropertyBag;
+using Core.Common.Util.Attributes;
+using Ringtoets.AssemblyTool.Data;
+using Ringtoets.Common.Data.AssemblyTool;
+using Ringtoets.Common.Data.AssessmentSection;
+using Ringtoets.Common.Data.Contribution;
+using Ringtoets.Common.Data.Exceptions;
+using Ringtoets.Common.Data.FailureMechanism;
+using Ringtoets.Common.Forms.Properties;
+
+namespace Ringtoets.Common.Forms.PropertyClasses
+{
+ ///
+ /// Base ViewModel of the category boundaries in a for properties panel.
+ ///
+ public abstract class FailureMechanismCategoryBoundariesBaseProperties : ObjectProperties
+ {
+ private const int failureMechanismAssemblyCategoryPropertyIndex = 1;
+ private const int failureMechanismSectionAssemblyCategoryPropertyIndex = 2;
+
+ protected readonly IAssessmentSection AssessmentSection;
+ protected readonly Func GetNFunc;
+
+ ///
+ /// Creates a new instance of .
+ ///
+ /// The failure mechanism to show the properties for.
+ /// The assessment section to show the properties for.
+ /// The function to get the 'N' parameter used to factor in the 'length effect'.
+ /// Thrown when any parameter is null.
+ protected FailureMechanismCategoryBoundariesBaseProperties(IFailureMechanism failureMechanism,
+ IAssessmentSection assessmentSection,
+ Func getNFunc)
+ {
+ if (failureMechanism == null)
+ {
+ throw new ArgumentNullException(nameof(failureMechanism));
+ }
+
+ if (assessmentSection == null)
+ {
+ throw new ArgumentNullException(nameof(assessmentSection));
+ }
+
+ if (getNFunc == null)
+ {
+ throw new ArgumentNullException(nameof(getNFunc));
+ }
+
+ AssessmentSection = assessmentSection;
+ GetNFunc = getNFunc;
+ Data = failureMechanism;
+ }
+
+ [PropertyOrder(failureMechanismAssemblyCategoryPropertyIndex)]
+ [ResourcesCategory(typeof(Resources), nameof(Resources.Categories_General))]
+ [ResourcesDisplayName(typeof(Resources), nameof(Resources.FailureMechanismCategoryBoundariesProperties_FailureMechanismBoundaries_DisplayName))]
+ [ResourcesDescription(typeof(Resources), nameof(Resources.FailureMechanismCategoryBoundariesProperties_FailureMechanismBoundaries_Description))]
+ [TypeConverter(typeof(ExpandableArrayConverter))]
+ public FailureMechanismAssemblyCategoryProperties[] FailureMechanismAssemblyCategoryProperties
+ {
+ get
+ {
+ return CreateFailureMechanismCategoryBoundaries().Select(boundary => new FailureMechanismAssemblyCategoryProperties(boundary)).ToArray();
+ }
+ }
+
+ [PropertyOrder(failureMechanismSectionAssemblyCategoryPropertyIndex)]
+ [ResourcesCategory(typeof(Resources), nameof(Resources.Categories_General))]
+ [ResourcesDisplayName(typeof(Resources), nameof(Resources.FailureMechanismCategoryBoundariesProperties_FailureMechanismSectionBoundaries_DisplayName))]
+ [ResourcesDescription(typeof(Resources), nameof(Resources.FailureMechanismCategoryBoundariesProperties_FailureMechanismSectionBoundaries_Description))]
+ [TypeConverter(typeof(ExpandableArrayConverter))]
+ public FailureMechanismSectionAssemblyCategoryProperties[] FailureMechanismSectionAssemblyCategoryProperties
+ {
+ get
+ {
+ return CreateFailureMechanismSectionCategoryBoundaries().Select(boundary => new FailureMechanismSectionAssemblyCategoryProperties(boundary)).ToArray();
+ }
+ }
+
+ ///
+ /// Creates the collection of for the
+ /// in .
+ ///
+ /// A collection of .
+ protected abstract IEnumerable CreateFailureMechanismSectionCategoryBoundaries();
+
+ ///
+ /// Creates the collection of for the
+ /// in .
+ ///
+ /// A collection of .
+ /// Thrown when an error occurred while creating the categories.
+ private IEnumerable CreateFailureMechanismCategoryBoundaries()
+ {
+ FailureMechanismContribution failureMechanismContribution = AssessmentSection.FailureMechanismContribution;
+ return AssemblyToolCategoriesFactory.CreateFailureMechanismAssemblyCategories(failureMechanismContribution.SignalingNorm,
+ failureMechanismContribution.LowerLimitNorm,
+ data.Contribution,
+ GetNFunc());
+ }
+ }
+}
\ No newline at end of file
Index: Ringtoets/Common/src/Ringtoets.Common.Forms/Ringtoets.Common.Forms.csproj
===================================================================
diff -u -rb034322e34cde361a1cb86dffc55e9e0f83a1a9f -r4d7632a55f75ca47d7cee49166570d91a75d3d8f
--- Ringtoets/Common/src/Ringtoets.Common.Forms/Ringtoets.Common.Forms.csproj (.../Ringtoets.Common.Forms.csproj) (revision b034322e34cde361a1cb86dffc55e9e0f83a1a9f)
+++ Ringtoets/Common/src/Ringtoets.Common.Forms/Ringtoets.Common.Forms.csproj (.../Ringtoets.Common.Forms.csproj) (revision 4d7632a55f75ca47d7cee49166570d91a75d3d8f)
@@ -93,6 +93,7 @@
Resources.resx
+
Index: Ringtoets/Common/test/Ringtoets.Common.Forms.Test/PropertyClasses/FailureMechanismCategoryBoundariesBasePropertiesTest.cs
===================================================================
diff -u
--- Ringtoets/Common/test/Ringtoets.Common.Forms.Test/PropertyClasses/FailureMechanismCategoryBoundariesBasePropertiesTest.cs (revision 0)
+++ Ringtoets/Common/test/Ringtoets.Common.Forms.Test/PropertyClasses/FailureMechanismCategoryBoundariesBasePropertiesTest.cs (revision 4d7632a55f75ca47d7cee49166570d91a75d3d8f)
@@ -0,0 +1,203 @@
+// Copyright (C) Stichting Deltares 2017. All rights reserved.
+//
+// This file is part of Ringtoets.
+//
+// Ringtoets is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this program. If not, see .
+//
+// All names, logos, and references to "Deltares" are registered trademarks of
+// Stichting Deltares and remain full property of Stichting Deltares at all times.
+// All rights reserved.
+
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Linq;
+using Core.Common.Gui.Converters;
+using Core.Common.Gui.PropertyBag;
+using Core.Common.TestUtil;
+using NUnit.Framework;
+using Rhino.Mocks;
+using Ringtoets.AssemblyTool.Data;
+using Ringtoets.Common.Data.AssemblyTool;
+using Ringtoets.Common.Data.AssessmentSection;
+using Ringtoets.Common.Data.Contribution;
+using Ringtoets.Common.Data.FailureMechanism;
+using Ringtoets.Common.Data.TestUtil;
+using Ringtoets.Common.Forms.PropertyClasses;
+
+namespace Ringtoets.Common.Forms.Test.PropertyClasses
+{
+ [TestFixture]
+ public class FailureMechanismCategoryBoundariesBasePropertiesTest
+ {
+ [Test]
+ public void Constructor_FailureMechanismNull_ThrowsArgumentNullException()
+ {
+ // Setup
+ var mocks = new MockRepository();
+ var assessmentSection = mocks.Stub();
+ mocks.ReplayAll();
+
+ // Call
+ TestDelegate call = () => new TestFailureMechanismCategoryBoundariesProperties(null,
+ assessmentSection,
+ () => 0.01);
+
+ // Assert
+ var exception = Assert.Throws(call);
+ Assert.AreEqual("failureMechanism", exception.ParamName);
+ mocks.VerifyAll();
+ }
+
+ [Test]
+ public void Constructor_AssessmentSectionNull_ThrowsArgumentNullException()
+ {
+ // Setup
+ var mocks = new MockRepository();
+ var failureMechanism = mocks.Stub();
+ mocks.ReplayAll();
+
+ // Call
+ TestDelegate call = () => new TestFailureMechanismCategoryBoundariesProperties(failureMechanism,
+ null,
+ () => 0.01);
+
+ // Assert
+ var exception = Assert.Throws(call);
+ Assert.AreEqual("assessmentSection", exception.ParamName);
+ mocks.VerifyAll();
+ }
+
+ [Test]
+ public void Constructor_GetNFuncNull_ThrowsArgumentNullException()
+ {
+ // Setup
+ var mocks = new MockRepository();
+ var failureMechanism = mocks.Stub();
+ var assessmentSection = mocks.Stub();
+ mocks.ReplayAll();
+
+ // Call
+ TestDelegate call = () => new TestFailureMechanismCategoryBoundariesProperties(failureMechanism,
+ assessmentSection,
+ null);
+
+ // Assert
+ var exception = Assert.Throws(call);
+ Assert.AreEqual("getNFunc", exception.ParamName);
+ mocks.VerifyAll();
+ }
+
+ [Test]
+ public void Constructor_ValidParameters_ExpectedValues()
+ {
+ // Setup
+ const double n = 1.0;
+
+ var mocks = new MockRepository();
+ var failureMechanism = mocks.Stub();
+ failureMechanism.Contribution = 5;
+ var assessmentSection = new AssessmentSectionStub();
+ mocks.ReplayAll();
+
+ // Call
+ var properties = new TestFailureMechanismCategoryBoundariesProperties(failureMechanism,
+ assessmentSection,
+ () => n);
+
+ // Assert
+ Assert.IsInstanceOf>(properties);
+ Assert.AreSame(failureMechanism, properties.Data);
+
+ TestHelper.AssertTypeConverter(
+ nameof(TestFailureMechanismCategoryBoundariesProperties.FailureMechanismAssemblyCategoryProperties));
+ TestHelper.AssertTypeConverter(
+ nameof(TestFailureMechanismCategoryBoundariesProperties.FailureMechanismSectionAssemblyCategoryProperties));
+
+ FailureMechanismContribution failureMechanismContribution = assessmentSection.FailureMechanismContribution;
+ IEnumerable expectedFailureMechanismCategories = AssemblyToolCategoriesFactory.CreateFailureMechanismAssemblyCategories(
+ failureMechanismContribution.SignalingNorm,
+ failureMechanismContribution.LowerLimitNorm,
+ failureMechanism.Contribution,
+ n);
+
+ Assert.AreEqual(expectedFailureMechanismCategories.Count(), properties.FailureMechanismAssemblyCategoryProperties.Length);
+ for (var i = 0; i < expectedFailureMechanismCategories.Count(); i++)
+ {
+ FailureMechanismAssemblyCategory category = expectedFailureMechanismCategories.ElementAt(i);
+ FailureMechanismAssemblyCategoryProperties property = properties.FailureMechanismAssemblyCategoryProperties[i];
+ Assert.AreEqual(category.Group, property.Group);
+ Assert.AreEqual(category.UpperBoundary, property.UpperBoundary);
+ Assert.AreEqual(category.LowerBoundary, property.LowerBoundary);
+ }
+
+ FailureMechanismSectionAssemblyCategoryProperties actualSectionCategoryProperties = properties.FailureMechanismSectionAssemblyCategoryProperties.Single();
+ Assert.AreEqual(FailureMechanismSectionAssemblyCategoryGroup.IIIv, actualSectionCategoryProperties.Group);
+ Assert.AreEqual(0.0, actualSectionCategoryProperties.LowerBoundary);
+ Assert.AreEqual(1.0, actualSectionCategoryProperties.UpperBoundary);
+
+ mocks.VerifyAll();
+ }
+
+ [Test]
+ public void Constructor_Always_PropertiesHaveExpectedAttributesValues()
+ {
+ // Setup
+ var mocks = new MockRepository();
+ var failureMechanism = mocks.Stub();
+ var assessmentSection = new AssessmentSectionStub();
+ mocks.ReplayAll();
+
+ // Call
+ var properties = new TestFailureMechanismCategoryBoundariesProperties(failureMechanism,
+ assessmentSection,
+ () => 0.01);
+ // Assert
+ PropertyDescriptorCollection dynamicProperties = PropertiesTestHelper.GetAllVisiblePropertyDescriptors(properties);
+ Assert.AreEqual(2, dynamicProperties.Count);
+
+ const string generalCategoryName = "Algemeen";
+
+ PropertyDescriptor failureMechanismCategoriesProperty = dynamicProperties[0];
+ PropertiesTestHelper.AssertRequiredPropertyDescriptorProperties(failureMechanismCategoriesProperty,
+ generalCategoryName,
+ "Categoriegrenzen per traject",
+ "De categoriegrenzen per traject voor dit toetsspoor.",
+ true);
+
+ PropertyDescriptor failureMechanismSectionCategoriesProperty = dynamicProperties[1];
+ PropertiesTestHelper.AssertRequiredPropertyDescriptorProperties(failureMechanismSectionCategoriesProperty,
+ generalCategoryName,
+ "Categoriegrenzen per vak",
+ "De categoriegrenzen per vak voor dit toetsspoor.",
+ true);
+
+ mocks.VerifyAll();
+ }
+
+ private class TestFailureMechanismCategoryBoundariesProperties : FailureMechanismCategoryBoundariesBaseProperties
+ {
+ public TestFailureMechanismCategoryBoundariesProperties(IFailureMechanism failureMechanism, IAssessmentSection assessmentSection, Func getNFunc)
+ : base(failureMechanism, assessmentSection, getNFunc) {}
+
+ protected override IEnumerable CreateFailureMechanismSectionCategoryBoundaries()
+ {
+ return new[]
+ {
+ new FailureMechanismSectionAssemblyCategory(0.0, 1.0, FailureMechanismSectionAssemblyCategoryGroup.IIIv)
+ };
+ }
+ }
+ }
+}
\ No newline at end of file
Index: Ringtoets/Common/test/Ringtoets.Common.Forms.Test/Ringtoets.Common.Forms.Test.csproj
===================================================================
diff -u -rb034322e34cde361a1cb86dffc55e9e0f83a1a9f -r4d7632a55f75ca47d7cee49166570d91a75d3d8f
--- Ringtoets/Common/test/Ringtoets.Common.Forms.Test/Ringtoets.Common.Forms.Test.csproj (.../Ringtoets.Common.Forms.Test.csproj) (revision b034322e34cde361a1cb86dffc55e9e0f83a1a9f)
+++ Ringtoets/Common/test/Ringtoets.Common.Forms.Test/Ringtoets.Common.Forms.Test.csproj (.../Ringtoets.Common.Forms.Test.csproj) (revision 4d7632a55f75ca47d7cee49166570d91a75d3d8f)
@@ -98,6 +98,7 @@
+