Index: Ringtoets/StabilityStoneCover/src/Ringtoets.StabilityStoneCover.Data/GeneralStabilityStoneCoverWaveConditionsInput.cs =================================================================== diff -u -r5ca67bdbaab0f6a9fb7682c06140b93bb0f5b5bb -rac74205f3a29ca5bce4772b38e365f85fa9ba0bc --- Ringtoets/StabilityStoneCover/src/Ringtoets.StabilityStoneCover.Data/GeneralStabilityStoneCoverWaveConditionsInput.cs (.../GeneralStabilityStoneCoverWaveConditionsInput.cs) (revision 5ca67bdbaab0f6a9fb7682c06140b93bb0f5b5bb) +++ Ringtoets/StabilityStoneCover/src/Ringtoets.StabilityStoneCover.Data/GeneralStabilityStoneCoverWaveConditionsInput.cs (.../GeneralStabilityStoneCoverWaveConditionsInput.cs) (revision ac74205f3a29ca5bce4772b38e365f85fa9ba0bc) @@ -19,6 +19,9 @@ // Stichting Deltares and remain full property of Stichting Deltares at all times. // All rights reserved. +using System; +using Core.Common.Base.Data; +using Ringtoets.Common.Data.Properties; using Ringtoets.Revetment.Data; namespace Ringtoets.StabilityStoneCover.Data @@ -28,13 +31,17 @@ /// public class GeneralStabilityStoneCoverWaveConditionsInput { + private static readonly Range validityRangeN = new Range(1.0, 20.0); + private RoundedDouble n; + /// /// Creates a new instance of . /// public GeneralStabilityStoneCoverWaveConditionsInput() { GeneralBlocksWaveConditionsInput = new GeneralWaveConditionsInput(1.0, 1.0, 1.0); GeneralColumnsWaveConditionsInput = new GeneralWaveConditionsInput(1.0, 0.4, 0.8); + n = new RoundedDouble(2, 4.0); } /// @@ -46,5 +53,28 @@ /// Gets the general input parameter used in wave conditions calculations for columns. /// public GeneralWaveConditionsInput GeneralColumnsWaveConditionsInput { get; } + + /// + /// Gets or sets the general input parameter N used in wave conditions calculations. + /// + /// Thrown when the value of + /// is not in the range [1, 20]. + public RoundedDouble N + { + get + { + return n; + } + set + { + if (!validityRangeN.InRange(value)) + { + throw new ArgumentOutOfRangeException(nameof(value), string.Format(Resources.N_Value_should_be_in_Range_0_, + validityRangeN)); + } + + n = value.ToPrecision(n.NumberOfDecimalPlaces); + } + } } } \ No newline at end of file Index: Ringtoets/StabilityStoneCover/src/Ringtoets.StabilityStoneCover.Forms/PropertyClasses/StabilityStoneCoverFailureMechanismProperties.cs =================================================================== diff -u -rac96d7c315129af851634ed5a4a6800b59ede718 -rac74205f3a29ca5bce4772b38e365f85fa9ba0bc --- Ringtoets/StabilityStoneCover/src/Ringtoets.StabilityStoneCover.Forms/PropertyClasses/StabilityStoneCoverFailureMechanismProperties.cs (.../StabilityStoneCoverFailureMechanismProperties.cs) (revision ac96d7c315129af851634ed5a4a6800b59ede718) +++ Ringtoets/StabilityStoneCover/src/Ringtoets.StabilityStoneCover.Forms/PropertyClasses/StabilityStoneCoverFailureMechanismProperties.cs (.../StabilityStoneCoverFailureMechanismProperties.cs) (revision ac74205f3a29ca5bce4772b38e365f85fa9ba0bc) @@ -19,7 +19,9 @@ // Stichting Deltares and remain full property of Stichting Deltares at all times. // All rights reserved. +using System; using System.ComponentModel; +using Core.Common.Base.Data; using Core.Common.Gui.Attributes; using Core.Common.Gui.PropertyBag; using Core.Common.Util.Attributes; @@ -35,20 +37,58 @@ /// public class StabilityStoneCoverFailureMechanismProperties : ObjectProperties { + /// + /// Creates a new instance of . + /// + /// The instance to show the properties of. + /// Thrown when any input parameter is null. + public StabilityStoneCoverFailureMechanismProperties(StabilityStoneCoverFailureMechanism data) + { + if (data == null) + { + throw new ArgumentNullException(nameof(data)); + } + + Data = data; + } + + #region Length effect parameters + + [DynamicVisible] + [PropertyOrder(6)] + [ResourcesCategory(typeof(RingtoetsCommonFormsResources), nameof(RingtoetsCommonFormsResources.Categories_LengthEffect))] + [ResourcesDisplayName(typeof(RingtoetsCommonFormsResources), nameof(RingtoetsCommonFormsResources.FailureMechanism_N_DisplayName))] + [ResourcesDescription(typeof(RingtoetsCommonFormsResources), nameof(RingtoetsCommonFormsResources.FailureMechanism_N_Description))] + public RoundedDouble N + { + get + { + return data.GeneralInput.N; + } + set + { + data.GeneralInput.N = value; + } + } + + #endregion + [DynamicVisibleValidationMethod] public bool DynamicVisibleValidationMethod(string propertyName) { if (!data.IsRelevant && ShouldHidePropertyWhenFailureMechanismIrrelevant(propertyName)) { return false; } + return true; } private bool ShouldHidePropertyWhenFailureMechanismIrrelevant(string propertyName) { return nameof(Blocks).Equals(propertyName) - || nameof(Columns).Equals(propertyName); + || nameof(Columns).Equals(propertyName) + || nameof(N).Equals(propertyName); } #region General Index: Ringtoets/StabilityStoneCover/src/Ringtoets.StabilityStoneCover.Plugin/StabilityStoneCoverPlugin.cs =================================================================== diff -u -r20d79ce1f1600dbf7ae8ab806ca44fbcc9cdec9f -rac74205f3a29ca5bce4772b38e365f85fa9ba0bc --- Ringtoets/StabilityStoneCover/src/Ringtoets.StabilityStoneCover.Plugin/StabilityStoneCoverPlugin.cs (.../StabilityStoneCoverPlugin.cs) (revision 20d79ce1f1600dbf7ae8ab806ca44fbcc9cdec9f) +++ Ringtoets/StabilityStoneCover/src/Ringtoets.StabilityStoneCover.Plugin/StabilityStoneCoverPlugin.cs (.../StabilityStoneCoverPlugin.cs) (revision ac74205f3a29ca5bce4772b38e365f85fa9ba0bc) @@ -62,10 +62,7 @@ { yield return new PropertyInfo { - CreateInstance = context => new StabilityStoneCoverFailureMechanismProperties - { - Data = context.WrappedData - } + CreateInstance = context => new StabilityStoneCoverFailureMechanismProperties(context.WrappedData) }; yield return new PropertyInfo(); yield return new PropertyInfo @@ -223,14 +220,16 @@ if (assessmentSection != null) { return assessmentSection - .GetFailureMechanisms() - .OfType() - .Any(fm => ReferenceEquals(viewData, fm.SectionResults)); + .GetFailureMechanisms() + .OfType() + .Any(fm => ReferenceEquals(viewData, fm.SectionResults)); } + if (failureMechanismContext != null) { failureMechanism = failureMechanismContext.WrappedData; } + return failureMechanism != null && ReferenceEquals(view.Data, failureMechanism.SectionResults); } @@ -362,9 +361,9 @@ bool isNestedGroup = parentData is StabilityStoneCoverWaveConditionsCalculationGroupContext; StabilityStoneCoverWaveConditionsCalculation[] calculations = group - .GetCalculations() - .OfType() - .ToArray(); + .GetCalculations() + .OfType() + .ToArray(); builder.AddImportItem() .AddExportItem() @@ -571,28 +570,28 @@ StabilityStoneCoverWaveConditionsCalculation calculation = nodeData.WrappedData; return builder - .AddExportItem() - .AddSeparator() - .AddDuplicateCalculationItem(calculation, nodeData) - .AddSeparator() - .AddRenameItem() - .AddUpdateForeshoreProfileOfCalculationItem(calculation, - inquiryHelper, - SynchronizeCalculationWithForeshoreProfileHelper.UpdateForeshoreProfileDerivedCalculationInput) - .AddSeparator() - .AddValidateCalculationItem(nodeData, - Validate, - ValidateAllDataAvailableAndGetErrorMessageForCalculation) - .AddPerformCalculationItem(calculation, nodeData, PerformCalculation, ValidateAllDataAvailableAndGetErrorMessageForCalculation) - .AddSeparator() - .AddClearCalculationOutputItem(calculation) - .AddDeleteItem() - .AddSeparator() - .AddCollapseAllItem() - .AddExpandAllItem() - .AddSeparator() - .AddPropertiesItem() - .Build(); + .AddExportItem() + .AddSeparator() + .AddDuplicateCalculationItem(calculation, nodeData) + .AddSeparator() + .AddRenameItem() + .AddUpdateForeshoreProfileOfCalculationItem(calculation, + inquiryHelper, + SynchronizeCalculationWithForeshoreProfileHelper.UpdateForeshoreProfileDerivedCalculationInput) + .AddSeparator() + .AddValidateCalculationItem(nodeData, + Validate, + ValidateAllDataAvailableAndGetErrorMessageForCalculation) + .AddPerformCalculationItem(calculation, nodeData, PerformCalculation, ValidateAllDataAvailableAndGetErrorMessageForCalculation) + .AddSeparator() + .AddClearCalculationOutputItem(calculation) + .AddDeleteItem() + .AddSeparator() + .AddCollapseAllItem() + .AddExpandAllItem() + .AddSeparator() + .AddPropertiesItem() + .Build(); } private static void Validate(StabilityStoneCoverWaveConditionsCalculationContext context) Index: Ringtoets/StabilityStoneCover/test/Ringtoets.StabilityStoneCover.Data.Test/GeneralStabilityStoneCoverWaveConditionsInputTest.cs =================================================================== diff -u -r94f2ec1496623ae488b567f883e66b4d26243441 -rac74205f3a29ca5bce4772b38e365f85fa9ba0bc --- Ringtoets/StabilityStoneCover/test/Ringtoets.StabilityStoneCover.Data.Test/GeneralStabilityStoneCoverWaveConditionsInputTest.cs (.../GeneralStabilityStoneCoverWaveConditionsInputTest.cs) (revision 94f2ec1496623ae488b567f883e66b4d26243441) +++ Ringtoets/StabilityStoneCover/test/Ringtoets.StabilityStoneCover.Data.Test/GeneralStabilityStoneCoverWaveConditionsInputTest.cs (.../GeneralStabilityStoneCoverWaveConditionsInputTest.cs) (revision ac74205f3a29ca5bce4772b38e365f85fa9ba0bc) @@ -19,6 +19,9 @@ // Stichting Deltares and remain full property of Stichting Deltares at all times. // All rights reserved. +using System; +using Core.Common.Base.Data; +using Core.Common.TestUtil; using NUnit.Framework; using Ringtoets.Common.Data.TestUtil; @@ -34,19 +37,59 @@ var generalInput = new GeneralStabilityStoneCoverWaveConditionsInput(); // Assert - const double aBlocks = 1.0; - const double bBlocks = 1.0; - const double cBlocks = 1.0; + Assert.AreEqual(2, generalInput.GeneralBlocksWaveConditionsInput.A.NumberOfDecimalPlaces); + Assert.AreEqual(1.0, generalInput.GeneralBlocksWaveConditionsInput.A, generalInput.GeneralBlocksWaveConditionsInput.A.GetAccuracy()); - const double aColumns = 1.0; - const double bColumns = 0.4; - const double cColumns = 0.8; - Assert.AreEqual(aBlocks, generalInput.GeneralBlocksWaveConditionsInput.A, generalInput.GeneralBlocksWaveConditionsInput.A.GetAccuracy()); - Assert.AreEqual(bBlocks, generalInput.GeneralBlocksWaveConditionsInput.B, generalInput.GeneralBlocksWaveConditionsInput.B.GetAccuracy()); - Assert.AreEqual(cBlocks, generalInput.GeneralBlocksWaveConditionsInput.C, generalInput.GeneralBlocksWaveConditionsInput.C.GetAccuracy()); - Assert.AreEqual(aColumns, generalInput.GeneralColumnsWaveConditionsInput.A, generalInput.GeneralColumnsWaveConditionsInput.A.GetAccuracy()); - Assert.AreEqual(bColumns, generalInput.GeneralColumnsWaveConditionsInput.B, generalInput.GeneralColumnsWaveConditionsInput.B.GetAccuracy()); - Assert.AreEqual(cColumns, generalInput.GeneralColumnsWaveConditionsInput.C, generalInput.GeneralColumnsWaveConditionsInput.C.GetAccuracy()); + Assert.AreEqual(2, generalInput.GeneralBlocksWaveConditionsInput.B.NumberOfDecimalPlaces); + Assert.AreEqual(1.0, generalInput.GeneralBlocksWaveConditionsInput.B, generalInput.GeneralBlocksWaveConditionsInput.B.GetAccuracy()); + + Assert.AreEqual(2, generalInput.GeneralBlocksWaveConditionsInput.C.NumberOfDecimalPlaces); + Assert.AreEqual(1.0, generalInput.GeneralBlocksWaveConditionsInput.C, generalInput.GeneralBlocksWaveConditionsInput.C.GetAccuracy()); + + Assert.AreEqual(2, generalInput.GeneralColumnsWaveConditionsInput.A.NumberOfDecimalPlaces); + Assert.AreEqual(1.0, generalInput.GeneralColumnsWaveConditionsInput.A, generalInput.GeneralColumnsWaveConditionsInput.A.GetAccuracy()); + + Assert.AreEqual(2, generalInput.GeneralColumnsWaveConditionsInput.B.NumberOfDecimalPlaces); + Assert.AreEqual(0.4, generalInput.GeneralColumnsWaveConditionsInput.B, generalInput.GeneralColumnsWaveConditionsInput.B.GetAccuracy()); + + Assert.AreEqual(2, generalInput.GeneralColumnsWaveConditionsInput.C.NumberOfDecimalPlaces); + Assert.AreEqual(0.8, generalInput.GeneralColumnsWaveConditionsInput.C, generalInput.GeneralColumnsWaveConditionsInput.C.GetAccuracy()); + + Assert.AreEqual(2, generalInput.N.NumberOfDecimalPlaces); + Assert.AreEqual(4.0, generalInput.N, generalInput.N.GetAccuracy()); } + + [Test] + [TestCase(1.0)] + [TestCase(3.1415)] + [TestCase(20.0)] + public void N_ValidValue_SetsNewValue(double n) + { + // Setup + var generalInput = new GeneralStabilityStoneCoverWaveConditionsInput(); + + // Call + generalInput.N = (RoundedDouble) n; + + // Assert + Assert.AreEqual(2, generalInput.N.NumberOfDecimalPlaces); + Assert.AreEqual(n, generalInput.N, generalInput.N.GetAccuracy()); + } + + [Test] + [TestCase(0.9)] + [TestCase(20.1)] + public void N_ValueOutOfRange_ThrowsArgumentException(double n) + { + // Setup + var generalInput = new GeneralStabilityStoneCoverWaveConditionsInput(); + + // Call + TestDelegate call = () => generalInput.N = (RoundedDouble) n; + + // Assert + var expectedMessage = "De waarde voor 'N' moet in het bereik [1, 20] liggen."; + TestHelper.AssertThrowsArgumentExceptionAndTestMessage(call, expectedMessage); + } } } \ No newline at end of file Index: Ringtoets/StabilityStoneCover/test/Ringtoets.StabilityStoneCover.Data.Test/Ringtoets.StabilityStoneCover.Data.Test.csproj =================================================================== diff -u -r63fc151e9cf722527465c1eddfa6567a90feb5e6 -rac74205f3a29ca5bce4772b38e365f85fa9ba0bc --- Ringtoets/StabilityStoneCover/test/Ringtoets.StabilityStoneCover.Data.Test/Ringtoets.StabilityStoneCover.Data.Test.csproj (.../Ringtoets.StabilityStoneCover.Data.Test.csproj) (revision 63fc151e9cf722527465c1eddfa6567a90feb5e6) +++ Ringtoets/StabilityStoneCover/test/Ringtoets.StabilityStoneCover.Data.Test/Ringtoets.StabilityStoneCover.Data.Test.csproj (.../Ringtoets.StabilityStoneCover.Data.Test.csproj) (revision ac74205f3a29ca5bce4772b38e365f85fa9ba0bc) @@ -42,6 +42,10 @@ {0B0D2DFF-7E7E-4BB0-A007-61800C85809A} Core.Common.Data.TestUtil + + {D749EE4C-CE50-4C17-BF01-9A953028C126} + Core.Common.TestUtil + {d4200f43-3f72-4f42-af0a-8ced416a38ec} Ringtoets.Common.Data Index: Ringtoets/StabilityStoneCover/test/Ringtoets.StabilityStoneCover.Forms.Test/PropertyClasses/StabilityStoneCoverFailureMechanismPropertiesTest.cs =================================================================== diff -u -r94f2ec1496623ae488b567f883e66b4d26243441 -rac74205f3a29ca5bce4772b38e365f85fa9ba0bc --- Ringtoets/StabilityStoneCover/test/Ringtoets.StabilityStoneCover.Forms.Test/PropertyClasses/StabilityStoneCoverFailureMechanismPropertiesTest.cs (.../StabilityStoneCoverFailureMechanismPropertiesTest.cs) (revision 94f2ec1496623ae488b567f883e66b4d26243441) +++ Ringtoets/StabilityStoneCover/test/Ringtoets.StabilityStoneCover.Forms.Test/PropertyClasses/StabilityStoneCoverFailureMechanismPropertiesTest.cs (.../StabilityStoneCoverFailureMechanismPropertiesTest.cs) (revision ac74205f3a29ca5bce4772b38e365f85fa9ba0bc) @@ -19,10 +19,13 @@ // Stichting Deltares and remain full property of Stichting Deltares at all times. // All rights reserved. +using System; using System.ComponentModel; +using Core.Common.Base.Data; using Core.Common.Gui.PropertyBag; using Core.Common.TestUtil; using NUnit.Framework; +using Ringtoets.Common.Data.TestUtil; using Ringtoets.StabilityStoneCover.Data; using Ringtoets.StabilityStoneCover.Forms.PropertyClasses; @@ -32,56 +35,85 @@ public class StabilityStoneCoverFailureMechanismPropertiesTest { [Test] - public void Constructor_ExpectedValues() + public void Constructor_DataIsNull_ThrowArgumentNullException() { // Call - var properties = new StabilityStoneCoverFailureMechanismProperties(); + TestDelegate test = () => new StabilityStoneCoverFailureMechanismProperties(null); // Assert - Assert.IsInstanceOf>(properties); + string paramName = Assert.Throws(test).ParamName; + Assert.AreEqual("data", paramName); } [Test] - [TestCase(true)] - [TestCase(false)] - public void Data_SetNewStabilityStoneCoverFailureMechanismContext_ReturnCorrectPropertyValues(bool isRelevant) + public void Constructor_WithData_ExpectedValues() { // Setup + var random = new Random(39); + bool isRelevant = random.NextBoolean(); var failureMechanism = new StabilityStoneCoverFailureMechanism { - IsRelevant = isRelevant + IsRelevant = isRelevant, + GeneralInput = + { + N = random.NextRoundedDouble(1.0, 20.0) + } }; - var properties = new StabilityStoneCoverFailureMechanismProperties(); // Call - properties.Data = failureMechanism; + var properties = new StabilityStoneCoverFailureMechanismProperties(failureMechanism); // Assert + Assert.IsInstanceOf>(properties); + TestHelper.AssertTypeConverter( + nameof(StabilityStoneCoverFailureMechanismProperties.Columns)); + TestHelper.AssertTypeConverter( + nameof(StabilityStoneCoverFailureMechanismProperties.Blocks)); + + Assert.AreSame(failureMechanism, properties.Data); Assert.AreEqual(failureMechanism.Name, properties.Name); Assert.AreEqual(failureMechanism.Code, properties.Code); Assert.AreEqual(isRelevant, properties.IsRelevant); Assert.AreSame(failureMechanism.GeneralInput.GeneralBlocksWaveConditionsInput, properties.Blocks.Data); Assert.AreSame(failureMechanism.GeneralInput.GeneralColumnsWaveConditionsInput, properties.Columns.Data); + Assert.AreEqual(failureMechanism.GeneralInput.N, properties.N); } [Test] - public void Constructor_IsRelevantTrue_PropertiesHaveExpectedAttributesValues() + public void N_NewValue_GeneralInputUpdated() { + // Setup + var random = new Random(39); + RoundedDouble newN = random.NextRoundedDouble(1.0, 20.0); + var failureMechanism = new StabilityStoneCoverFailureMechanism(); + var properties = new StabilityStoneCoverFailureMechanismProperties(failureMechanism); + // Call - var properties = new StabilityStoneCoverFailureMechanismProperties + properties.N = newN; + + // Assert + Assert.AreEqual(newN, failureMechanism.GeneralInput.N, failureMechanism.GeneralInput.N.GetAccuracy()); + } + + [Test] + public void Constructor_IsRelevantTrue_PropertiesHaveExpectedAttributesValues() + { + // Setup + var failureMechanism = new StabilityStoneCoverFailureMechanism { - Data = new StabilityStoneCoverFailureMechanism - { - IsRelevant = true - } + IsRelevant = true }; + // Call + var properties = new StabilityStoneCoverFailureMechanismProperties(failureMechanism); + // Assert PropertyDescriptorCollection dynamicProperties = PropertiesTestHelper.GetAllVisiblePropertyDescriptors(properties); - Assert.AreEqual(5, dynamicProperties.Count); + Assert.AreEqual(6, dynamicProperties.Count); const string generalCategory = "Algemeen"; const string modelSettingsCateogry = "Modelinstellingen"; + const string lengthEffectCategory = "Lengte-effect parameters"; PropertyDescriptor nameProperty = dynamicProperties[0]; PropertiesTestHelper.AssertRequiredPropertyDescriptorProperties(nameProperty, @@ -110,29 +142,33 @@ "Blokken", "De modelinstellingen voor het berekenen van golfcondities voor blokken.", true); - Assert.IsInstanceOf(blocksProperty.Converter); PropertyDescriptor columnsProperty = dynamicProperties[4]; PropertiesTestHelper.AssertRequiredPropertyDescriptorProperties(columnsProperty, modelSettingsCateogry, "Zuilen", "De modelinstellingen voor het berekenen van golfcondities voor zuilen.", true); - Assert.IsInstanceOf(columnsProperty.Converter); + + PropertyDescriptor NProperty = dynamicProperties[5]; + PropertiesTestHelper.AssertRequiredPropertyDescriptorProperties(NProperty, + lengthEffectCategory, + "N [-]", + "De parameter 'N' die gebruikt wordt om het lengte-effect mee te nemen in de beoordeling."); } [Test] - public void Constructor_IsRelevantFalse_PropertiesHaveExpectedAttributesValues() + public void Constructor_FailureMechanismIsRelevantFalse_PropertiesHaveExpectedAttributesValues() { - // Call - var properties = new StabilityStoneCoverFailureMechanismProperties + // Setup + var failureMechanism = new StabilityStoneCoverFailureMechanism { - Data = new StabilityStoneCoverFailureMechanism - { - IsRelevant = false - } + IsRelevant = false }; + // Call + var properties = new StabilityStoneCoverFailureMechanismProperties(failureMechanism); + // Assert PropertyDescriptorCollection dynamicProperties = PropertiesTestHelper.GetAllVisiblePropertyDescriptors(properties); Assert.AreEqual(3, dynamicProperties.Count); @@ -167,13 +203,11 @@ public void DynamicVisibleValidationMethod_DependingOnRelevancy_ReturnExpectedVisibility(bool isRelevant) { // Setup - var properties = new StabilityStoneCoverFailureMechanismProperties + var failureMechanism = new StabilityStoneCoverFailureMechanism { - Data = new StabilityStoneCoverFailureMechanism - { - IsRelevant = isRelevant - } + IsRelevant = isRelevant }; + var properties = new StabilityStoneCoverFailureMechanismProperties(failureMechanism); // Call & Assert Assert.IsTrue(properties.DynamicVisibleValidationMethod(nameof(properties.Name))); @@ -182,6 +216,7 @@ Assert.AreEqual(isRelevant, properties.DynamicVisibleValidationMethod(nameof(properties.Blocks))); Assert.AreEqual(isRelevant, properties.DynamicVisibleValidationMethod(nameof(properties.Columns))); + Assert.AreEqual(isRelevant, properties.DynamicVisibleValidationMethod(nameof(properties.N))); Assert.IsTrue(properties.DynamicVisibleValidationMethod(null)); }