Index: Riskeer/WaveImpactAsphaltCover/src/Riskeer.WaveImpactAsphaltCover.Forms/PropertyClasses/WaveImpactAsphaltCoverFailurePathProperties.cs =================================================================== diff -u -r518eb75d72ca4fd926c21553f2341eaf397b8882 -rb609712c9e66d32bd333ec74ce4c6566e780ef70 --- Riskeer/WaveImpactAsphaltCover/src/Riskeer.WaveImpactAsphaltCover.Forms/PropertyClasses/WaveImpactAsphaltCoverFailurePathProperties.cs (.../WaveImpactAsphaltCoverFailurePathProperties.cs) (revision 518eb75d72ca4fd926c21553f2341eaf397b8882) +++ Riskeer/WaveImpactAsphaltCover/src/Riskeer.WaveImpactAsphaltCover.Forms/PropertyClasses/WaveImpactAsphaltCoverFailurePathProperties.cs (.../WaveImpactAsphaltCoverFailurePathProperties.cs) (revision b609712c9e66d32bd333ec74ce4c6566e780ef70) @@ -40,9 +40,10 @@ private const int codePropertyIndex = 2; private const int groupPropertyIndex = 3; private const int contributionPropertyIndex = 4; - private const int sectionLengthPropertyIndex = 5; - private const int deltaLPropertyIndex = 6; - private const int nPropertyIndex = 7; + private const int isRelevantPropertyIndex = 5; + private const int sectionLengthPropertyIndex = 6; + private const int deltaLPropertyIndex = 7; + private const int nPropertyIndex = 8; private readonly IAssessmentSection assessmentSection; /// @@ -51,7 +52,8 @@ /// The instance to show the properties of. /// /// Thrown when any parameter is null. - public WaveImpactAsphaltCoverFailurePathProperties(WaveImpactAsphaltCoverFailureMechanism data, IAssessmentSection assessmentSection) : base(data, new ConstructionProperties + public WaveImpactAsphaltCoverFailurePathProperties(WaveImpactAsphaltCoverFailureMechanism data, IAssessmentSection assessmentSection) + : base(data, new ConstructionProperties { NamePropertyIndex = namePropertyIndex, CodePropertyIndex = codePropertyIndex, @@ -66,8 +68,41 @@ this.assessmentSection = assessmentSection; } + [DynamicVisibleValidationMethod] + public bool DynamicVisibleValidationMethod(string propertyName) + { + if (!data.IsRelevant && ShouldHidePropertyWhenFailureMechanismIrrelevant(propertyName)) + { + return false; + } + + return true; + } + + private bool ShouldHidePropertyWhenFailureMechanismIrrelevant(string propertyName) + { + return nameof(Contribution).Equals(propertyName) + || nameof(DeltaL).Equals(propertyName) + || nameof(SectionLength).Equals(propertyName) + || nameof(N).Equals(propertyName); + } + + #region General + [PropertyOrder(isRelevantPropertyIndex)] + [ResourcesCategory(typeof(RiskeerCommonFormsResources), nameof(RiskeerCommonFormsResources.Categories_General))] + [ResourcesDisplayName(typeof(RiskeerCommonFormsResources), nameof(RiskeerCommonFormsResources.FailureMechanism_IsRelevant_DisplayName))] + [ResourcesDescription(typeof(RiskeerCommonFormsResources), nameof(RiskeerCommonFormsResources.FailureMechanism_IsRelevant_Description))] + public bool IsRelevant + { + get + { + return data.IsRelevant; + } + } + + [DynamicVisible] [PropertyOrder(contributionPropertyIndex)] [ResourcesCategory(typeof(RiskeerCommonFormsResources), nameof(RiskeerCommonFormsResources.Categories_General))] [ResourcesDisplayName(typeof(RiskeerCommonFormsResources), nameof(RiskeerCommonFormsResources.FailureMechanism_Contribution_DisplayName))] @@ -84,6 +119,7 @@ #region Length effect parameters + [DynamicVisible] [PropertyOrder(sectionLengthPropertyIndex)] [ResourcesCategory(typeof(RiskeerCommonFormsResources), nameof(RiskeerCommonFormsResources.Categories_LengthEffect))] [ResourcesDisplayName(typeof(RiskeerCommonFormsResources), nameof(RiskeerCommonFormsResources.ReferenceLine_Length_Rounded_DisplayName))] @@ -96,6 +132,7 @@ } } + [DynamicVisible] [PropertyOrder(deltaLPropertyIndex)] [ResourcesCategory(typeof(RiskeerCommonFormsResources), nameof(RiskeerCommonFormsResources.Categories_LengthEffect))] [ResourcesDisplayName(typeof(Resources), nameof(Resources.WaveImpactAsphaltCoverFailureMechanismProperties_DeltaL_DisplayName))] @@ -113,6 +150,7 @@ } } + [DynamicVisible] [PropertyOrder(nPropertyIndex)] [ResourcesCategory(typeof(RiskeerCommonFormsResources), nameof(RiskeerCommonFormsResources.Categories_LengthEffect))] [ResourcesDisplayName(typeof(RiskeerCommonFormsResources), nameof(RiskeerCommonFormsResources.FailureMechanism_N_Rounded_DisplayName))] Index: Riskeer/WaveImpactAsphaltCover/test/Riskeer.WaveImpactAsphaltCover.Forms.Test/PropertyClasses/WaveImpactAsphaltCoverFailurePathPropertiesTest.cs =================================================================== diff -u -r6c6cf953239d5e41763a97cbc6802af61d901bca -rb609712c9e66d32bd333ec74ce4c6566e780ef70 --- Riskeer/WaveImpactAsphaltCover/test/Riskeer.WaveImpactAsphaltCover.Forms.Test/PropertyClasses/WaveImpactAsphaltCoverFailurePathPropertiesTest.cs (.../WaveImpactAsphaltCoverFailurePathPropertiesTest.cs) (revision 6c6cf953239d5e41763a97cbc6802af61d901bca) +++ Riskeer/WaveImpactAsphaltCover/test/Riskeer.WaveImpactAsphaltCover.Forms.Test/PropertyClasses/WaveImpactAsphaltCoverFailurePathPropertiesTest.cs (.../WaveImpactAsphaltCoverFailurePathPropertiesTest.cs) (revision b609712c9e66d32bd333ec74ce4c6566e780ef70) @@ -34,15 +34,17 @@ namespace Riskeer.WaveImpactAsphaltCover.Forms.Test.PropertyClasses { + [TestFixture] public class WaveImpactAsphaltCoverFailurePathPropertiesTest { private const int namePropertyIndex = 0; private const int codePropertyIndex = 1; private const int groupPropertyIndex = 2; private const int contributionPropertyIndex = 3; - private const int sectionLengthPropertyIndex = 4; - private const int deltaLPropertyIndex = 5; - private const int nPropertyIndex = 6; + private const int isRelevantPropertyIndex = 4; + private const int sectionLengthPropertyIndex = 5; + private const int deltaLPropertyIndex = 6; + private const int nPropertyIndex = 7; private MockRepository mocks; [SetUp] @@ -76,7 +78,11 @@ assessmentSection.Stub(a => a.ReferenceLine).Return(new ReferenceLine()); mocks.ReplayAll(); - var failureMechanism = new WaveImpactAsphaltCoverFailureMechanism(); + var random = new Random(21); + var failureMechanism = new WaveImpactAsphaltCoverFailureMechanism + { + IsRelevant = random.NextBoolean() + }; // Call var properties = new WaveImpactAsphaltCoverFailurePathProperties(failureMechanism, assessmentSection); @@ -88,6 +94,7 @@ Assert.AreEqual(failureMechanism.Code, properties.Code); Assert.AreEqual(failureMechanism.Group, properties.Group); Assert.AreEqual(failureMechanism.Contribution, properties.Contribution); + Assert.AreEqual(failureMechanism.IsRelevant, properties.IsRelevant); Assert.AreEqual(2, properties.SectionLength.NumberOfDecimalPlaces); Assert.AreEqual(assessmentSection.ReferenceLine.Length, @@ -107,7 +114,7 @@ } [Test] - public void Constructor_Always_PropertiesHaveExpectedAttributesValues() + public void Constructor_IsRelevantTrue_PropertiesHaveExpectedAttributesValues() { // Setup var assessmentSection = mocks.Stub(); @@ -118,7 +125,7 @@ // Assert PropertyDescriptorCollection dynamicProperties = PropertiesTestHelper.GetAllVisiblePropertyDescriptors(properties); - Assert.AreEqual(7, dynamicProperties.Count); + Assert.AreEqual(8, dynamicProperties.Count); const string generalCategory = "Algemeen"; const string lengthEffectCategory = "Lengte-effect parameters"; @@ -151,6 +158,13 @@ "Procentuele bijdrage van dit toetsspoor aan de totale overstromingskans van het traject.", true); + PropertyDescriptor isRelevantProperty = dynamicProperties[isRelevantPropertyIndex]; + PropertiesTestHelper.AssertRequiredPropertyDescriptorProperties(isRelevantProperty, + generalCategory, + "Is relevant", + "Geeft aan of dit toetsspoor relevant is of niet.", + true); + PropertyDescriptor sectionLength = dynamicProperties[sectionLengthPropertyIndex]; PropertiesTestHelper.AssertRequiredPropertyDescriptorProperties(sectionLength, lengthEffectCategory, @@ -174,6 +188,56 @@ } [Test] + public void Constructor_IsRelevantFalse_PropertiesHaveExpectedAttributesValues() + { + // Setup + var assessmentSection = mocks.Stub(); + mocks.ReplayAll(); + + var failureMechanism = new WaveImpactAsphaltCoverFailureMechanism + { + IsRelevant = false + }; + + // Call + var properties = new WaveImpactAsphaltCoverFailurePathProperties(failureMechanism, assessmentSection); + + // Assert + PropertyDescriptorCollection dynamicProperties = PropertiesTestHelper.GetAllVisiblePropertyDescriptors(properties); + Assert.AreEqual(4, dynamicProperties.Count); + + const string generalCategory = "Algemeen"; + + PropertyDescriptor nameProperty = dynamicProperties[namePropertyIndex]; + PropertiesTestHelper.AssertRequiredPropertyDescriptorProperties(nameProperty, + generalCategory, + "Naam", + "De naam van het toetsspoor.", + true); + + PropertyDescriptor codeProperty = dynamicProperties[codePropertyIndex]; + PropertiesTestHelper.AssertRequiredPropertyDescriptorProperties(codeProperty, + generalCategory, + "Label", + "Het label van het toetsspoor.", + true); + + PropertyDescriptor groupProperty = dynamicProperties[groupPropertyIndex]; + PropertiesTestHelper.AssertRequiredPropertyDescriptorProperties(groupProperty, + generalCategory, + "Groep", + "De groep waar het toetsspoor toe behoort.", + true); + + PropertyDescriptor isRelevantProperty = dynamicProperties[isRelevantPropertyIndex - 1]; + PropertiesTestHelper.AssertRequiredPropertyDescriptorProperties(isRelevantProperty, + generalCategory, + "Is relevant", + "Geeft aan of dit toetsspoor relevant is of niet.", + true); + } + + [Test] [SetCulture("nl-NL")] [TestCase(0.0)] [TestCase(-1.0)] @@ -225,5 +289,34 @@ // Assert Assert.AreEqual(newN, failureMechanism.GeneralWaveImpactAsphaltCoverInput.DeltaL); } + + [Test] + [TestCase(true)] + [TestCase(false)] + public void DynamicVisibleValidationMethod_DependingOnRelevancy_ReturnExpectedVisibility(bool isRelevant) + { + // Setup + var assessmentSection = mocks.Stub(); + mocks.ReplayAll(); + + var failureMechanism = new WaveImpactAsphaltCoverFailureMechanism + { + IsRelevant = isRelevant + }; + var properties = new WaveImpactAsphaltCoverFailurePathProperties(failureMechanism, assessmentSection); + + // Call & Assert + Assert.IsTrue(properties.DynamicVisibleValidationMethod(nameof(properties.Name))); + Assert.IsTrue(properties.DynamicVisibleValidationMethod(nameof(properties.Code))); + Assert.IsTrue(properties.DynamicVisibleValidationMethod(nameof(properties.Group))); + Assert.IsTrue(properties.DynamicVisibleValidationMethod(nameof(properties.IsRelevant))); + + Assert.AreEqual(isRelevant, properties.DynamicVisibleValidationMethod(nameof(properties.Contribution))); + Assert.AreEqual(isRelevant, properties.DynamicVisibleValidationMethod(nameof(properties.DeltaL))); + Assert.AreEqual(isRelevant, properties.DynamicVisibleValidationMethod(nameof(properties.SectionLength))); + Assert.AreEqual(isRelevant, properties.DynamicVisibleValidationMethod(nameof(properties.N))); + + Assert.IsTrue(properties.DynamicVisibleValidationMethod(null)); + } } } \ No newline at end of file