Fisheye: Tag b9e7df65b2b31d7b0c9faf17926dde1efbbf4cb4 refers to a dead (removed) revision in file `Ringtoets/Piping/src/Ringtoets.Piping.Forms/PropertyClasses/PipingFailureMechanismContextProperties.cs'.
Fisheye: No comparison available. Pass `N' to diff?
Index: Ringtoets/Piping/src/Ringtoets.Piping.Forms/PropertyClasses/PipingFailureMechanismProperties.cs
===================================================================
diff -u
--- Ringtoets/Piping/src/Ringtoets.Piping.Forms/PropertyClasses/PipingFailureMechanismProperties.cs (revision 0)
+++ Ringtoets/Piping/src/Ringtoets.Piping.Forms/PropertyClasses/PipingFailureMechanismProperties.cs (revision b9e7df65b2b31d7b0c9faf17926dde1efbbf4cb4)
@@ -0,0 +1,378 @@
+// 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 Core.Common.Base;
+using Core.Common.Base.Data;
+using Core.Common.Gui.Attributes;
+using Core.Common.Gui.PropertyBag;
+using Core.Common.Util.Attributes;
+using Ringtoets.Common.Data.Probability;
+using Ringtoets.Common.Forms.PropertyClasses;
+using Ringtoets.Piping.Data;
+using Ringtoets.Piping.Forms.PresentationObjects;
+using Ringtoets.Piping.Forms.Properties;
+using RingtoetsCommonFormsResources = Ringtoets.Common.Forms.Properties.Resources;
+
+namespace Ringtoets.Piping.Forms.PropertyClasses
+{
+ ///
+ /// ViewModel of properties panel.
+ ///
+ public class PipingFailureMechanismProperties : ObjectProperties
+ {
+ private readonly IFailureMechanismPropertyChangeHandler propertyChangeHandler;
+
+ ///
+ /// Creates a new instance of .
+ ///
+ /// The instance to show the properties of.
+ /// Handler responsible for handling effects of a property change.
+ /// Thrown when any input parameter is null.
+ public PipingFailureMechanismProperties(PipingFailureMechanism data,
+ IFailureMechanismPropertyChangeHandler handler)
+ {
+ if (data == null)
+ {
+ throw new ArgumentNullException(nameof(data));
+ }
+
+ if (handler == null)
+ {
+ throw new ArgumentNullException(nameof(handler));
+ }
+
+ Data = data;
+ propertyChangeHandler = handler;
+ }
+
+ #region Heave
+
+ [DynamicVisible]
+ [PropertyOrder(31)]
+ [ResourcesCategory(typeof(Resources), nameof(Resources.Categories_Heave))]
+ [ResourcesDisplayName(typeof(Resources), nameof(Resources.GeneralPipingInput_CriticalHeaveGradient_DisplayName))]
+ [ResourcesDescription(typeof(Resources), nameof(Resources.GeneralPipingInput_CriticalHeaveGradient_Description))]
+ public double CriticalHeaveGradient
+ {
+ get
+ {
+ return data.GeneralInput.CriticalHeaveGradient;
+ }
+ }
+
+ #endregion
+
+ [DynamicVisibleValidationMethod]
+ public bool DynamicVisibleValidationMethod(string propertyName)
+ {
+ if (!data.IsRelevant && ShouldHidePropertyWhenFailureMechanismIrrelevant(propertyName))
+ {
+ return false;
+ }
+
+ return true;
+ }
+
+ private void ChangePropertyValueAndNotifyAffectedObjects(
+ SetFailureMechanismPropertyValueDelegate setPropertyValue,
+ TValue value)
+ {
+ IEnumerable affectedObjects = propertyChangeHandler.SetPropertyValueAfterConfirmation(
+ data,
+ value,
+ setPropertyValue);
+
+ NotifyAffectedObjects(affectedObjects);
+ }
+
+ private static void NotifyAffectedObjects(IEnumerable affectedObjects)
+ {
+ foreach (IObservable affectedObject in affectedObjects)
+ {
+ affectedObject.NotifyObservers();
+ }
+ }
+
+ private bool ShouldHidePropertyWhenFailureMechanismIrrelevant(string propertyName)
+ {
+ return nameof(CriticalHeaveGradient).Equals(propertyName)
+ || nameof(WaterVolumetricWeight).Equals(propertyName)
+ || nameof(A).Equals(propertyName)
+ || nameof(B).Equals(propertyName)
+ || nameof(SectionLength).Equals(propertyName)
+ || nameof(N).Equals(propertyName)
+ || nameof(SandParticlesVolumicWeight).Equals(propertyName)
+ || nameof(WhitesDragCoefficient).Equals(propertyName)
+ || nameof(BeddingAngle).Equals(propertyName)
+ || nameof(WaterKinematicViscosity).Equals(propertyName)
+ || nameof(Gravity).Equals(propertyName)
+ || nameof(MeanDiameter70).Equals(propertyName)
+ || nameof(SellmeijerReductionFactor).Equals(propertyName)
+ || nameof(UpliftModelFactor).Equals(propertyName)
+ || nameof(SellmeijerModelFactor).Equals(propertyName);
+ }
+
+ #region General
+
+ [PropertyOrder(1)]
+ [ResourcesCategory(typeof(RingtoetsCommonFormsResources), nameof(RingtoetsCommonFormsResources.Categories_General))]
+ [ResourcesDisplayName(typeof(RingtoetsCommonFormsResources), nameof(RingtoetsCommonFormsResources.FailureMechanism_Name_DisplayName))]
+ [ResourcesDescription(typeof(RingtoetsCommonFormsResources), nameof(RingtoetsCommonFormsResources.FailureMechanism_Name_Description))]
+ public string Name
+ {
+ get
+ {
+ return data.Name;
+ }
+ }
+
+ [PropertyOrder(2)]
+ [ResourcesCategory(typeof(RingtoetsCommonFormsResources), nameof(RingtoetsCommonFormsResources.Categories_General))]
+ [ResourcesDisplayName(typeof(RingtoetsCommonFormsResources), nameof(RingtoetsCommonFormsResources.FailureMechanism_Code_DisplayName))]
+ [ResourcesDescription(typeof(RingtoetsCommonFormsResources), nameof(RingtoetsCommonFormsResources.FailureMechanism_Code_Description))]
+ public string Code
+ {
+ get
+ {
+ return data.Code;
+ }
+ }
+
+ [PropertyOrder(3)]
+ [ResourcesCategory(typeof(RingtoetsCommonFormsResources), nameof(RingtoetsCommonFormsResources.Categories_General))]
+ [ResourcesDisplayName(typeof(RingtoetsCommonFormsResources), nameof(RingtoetsCommonFormsResources.FailureMechanism_IsRelevant_DisplayName))]
+ [ResourcesDescription(typeof(RingtoetsCommonFormsResources), nameof(RingtoetsCommonFormsResources.FailureMechanism_IsRelevant_Description))]
+ public bool IsRelevant
+ {
+ get
+ {
+ return data.IsRelevant;
+ }
+ }
+
+ [DynamicVisible]
+ [PropertyOrder(4)]
+ [ResourcesCategory(typeof(RingtoetsCommonFormsResources), nameof(RingtoetsCommonFormsResources.Categories_General))]
+ [ResourcesDisplayName(typeof(Resources), nameof(Resources.GeneralPipingInput_WaterVolumetricWeight_DisplayName))]
+ [ResourcesDescription(typeof(Resources), nameof(Resources.GeneralPipingInput_WaterVolumetricWeight_Description))]
+ public RoundedDouble WaterVolumetricWeight
+ {
+ get
+ {
+ return data.GeneralInput.WaterVolumetricWeight;
+ }
+ set
+ {
+ ChangePropertyValueAndNotifyAffectedObjects((f, v) => f.GeneralInput.WaterVolumetricWeight = v, value);
+ }
+ }
+
+ #endregion
+
+ #region Semi-probabilistic parameters
+
+ [DynamicVisible]
+ [PropertyOrder(21)]
+ [ResourcesCategory(typeof(RingtoetsCommonFormsResources), nameof(RingtoetsCommonFormsResources.Categories_LengthEffect))]
+ [ResourcesDisplayName(typeof(RingtoetsCommonFormsResources), nameof(RingtoetsCommonFormsResources.FailureMechanism_ProbabilityAssessmentInput_A_DisplayName))]
+ [ResourcesDescription(typeof(RingtoetsCommonFormsResources), nameof(RingtoetsCommonFormsResources.FailureMechanism_ProbabilityAssessmentInput_A_Description))]
+ public double A
+ {
+ get
+ {
+ return data.PipingProbabilityAssessmentInput.A;
+ }
+ set
+ {
+ ChangePropertyValueAndNotifyAffectedObjects((f, v) => f.PipingProbabilityAssessmentInput.A = v, value);
+ }
+ }
+
+ [DynamicVisible]
+ [PropertyOrder(22)]
+ [ResourcesCategory(typeof(RingtoetsCommonFormsResources), nameof(RingtoetsCommonFormsResources.Categories_LengthEffect))]
+ [ResourcesDisplayName(typeof(RingtoetsCommonFormsResources), nameof(RingtoetsCommonFormsResources.FailureMechanism_ProbabilityAssessmentInput_B_DisplayName))]
+ [ResourcesDescription(typeof(RingtoetsCommonFormsResources), nameof(RingtoetsCommonFormsResources.FailureMechanism_ProbabilityAssessmentInput_B_Description))]
+ public double B
+ {
+ get
+ {
+ return data.PipingProbabilityAssessmentInput.B;
+ }
+ }
+
+ [DynamicVisible]
+ [PropertyOrder(23)]
+ [ResourcesCategory(typeof(RingtoetsCommonFormsResources), nameof(RingtoetsCommonFormsResources.Categories_LengthEffect))]
+ [ResourcesDisplayName(typeof(RingtoetsCommonFormsResources), nameof(RingtoetsCommonFormsResources.ReferenceLine_Length_DisplayName))]
+ [ResourcesDescription(typeof(RingtoetsCommonFormsResources), nameof(RingtoetsCommonFormsResources.ReferenceLine_Length_Description))]
+ public RoundedDouble SectionLength
+ {
+ get
+ {
+ return new RoundedDouble(2, data.PipingProbabilityAssessmentInput.SectionLength);
+ }
+ }
+
+ [DynamicVisible]
+ [PropertyOrder(24)]
+ [ResourcesCategory(typeof(RingtoetsCommonFormsResources), nameof(RingtoetsCommonFormsResources.Categories_LengthEffect))]
+ [ResourcesDisplayName(typeof(RingtoetsCommonFormsResources), nameof(RingtoetsCommonFormsResources.FailureMechanism_N_Rounded_DisplayName))]
+ [ResourcesDescription(typeof(RingtoetsCommonFormsResources), nameof(RingtoetsCommonFormsResources.FailureMechanism_N_Rounded_Description))]
+ public RoundedDouble N
+ {
+ get
+ {
+ return new RoundedDouble(2, data.PipingProbabilityAssessmentInput.GetSectionSpecificN(
+ data.PipingProbabilityAssessmentInput.SectionLength));
+ }
+ }
+
+ #endregion
+
+ #region Sellmeijer
+
+ [DynamicVisible]
+ [PropertyOrder(51)]
+ [ResourcesCategory(typeof(Resources), nameof(Resources.Categories_Sellmeijer))]
+ [ResourcesDisplayName(typeof(Resources), nameof(Resources.GeneralPipingInput_SandParticlesVolumicWeight_DisplayName))]
+ [ResourcesDescription(typeof(Resources), nameof(Resources.GeneralPipingInput_SandParticlesVolumicWeight_Description))]
+ public RoundedDouble SandParticlesVolumicWeight
+ {
+ get
+ {
+ return data.GeneralInput.SandParticlesVolumicWeight;
+ }
+ }
+
+ [DynamicVisible]
+ [PropertyOrder(52)]
+ [ResourcesCategory(typeof(Resources), nameof(Resources.Categories_Sellmeijer))]
+ [ResourcesDisplayName(typeof(Resources), nameof(Resources.GeneralPipingInput_WhitesDragCoefficient_DisplayName))]
+ [ResourcesDescription(typeof(Resources), nameof(Resources.GeneralPipingInput_WhitesDragCoefficient_Description))]
+ public double WhitesDragCoefficient
+ {
+ get
+ {
+ return data.GeneralInput.WhitesDragCoefficient;
+ }
+ }
+
+ [DynamicVisible]
+ [PropertyOrder(53)]
+ [ResourcesCategory(typeof(Resources), nameof(Resources.Categories_Sellmeijer))]
+ [ResourcesDisplayName(typeof(Resources), nameof(Resources.GeneralPipingInput_BeddingAngle_DisplayName))]
+ [ResourcesDescription(typeof(Resources), nameof(Resources.GeneralPipingInput_BeddingAngle_Description))]
+ public double BeddingAngle
+ {
+ get
+ {
+ return data.GeneralInput.BeddingAngle;
+ }
+ }
+
+ [DynamicVisible]
+ [PropertyOrder(54)]
+ [ResourcesCategory(typeof(Resources), nameof(Resources.Categories_Sellmeijer))]
+ [ResourcesDisplayName(typeof(Resources), nameof(Resources.GeneralPipingInput_WaterKinematicViscosity_DisplayName))]
+ [ResourcesDescription(typeof(Resources), nameof(Resources.GeneralPipingInput_WaterKinematicViscosity_Description))]
+ public double WaterKinematicViscosity
+ {
+ get
+ {
+ return data.GeneralInput.WaterKinematicViscosity;
+ }
+ }
+
+ [DynamicVisible]
+ [PropertyOrder(55)]
+ [ResourcesCategory(typeof(Resources), nameof(Resources.Categories_Sellmeijer))]
+ [ResourcesDisplayName(typeof(RingtoetsCommonFormsResources), nameof(RingtoetsCommonFormsResources.GravitationalAcceleration_DisplayName))]
+ [ResourcesDescription(typeof(RingtoetsCommonFormsResources), nameof(RingtoetsCommonFormsResources.GravitationalAcceleration_Description))]
+ public double Gravity
+ {
+ get
+ {
+ return data.GeneralInput.Gravity;
+ }
+ }
+
+ [DynamicVisible]
+ [PropertyOrder(56)]
+ [ResourcesCategory(typeof(Resources), nameof(Resources.Categories_Sellmeijer))]
+ [ResourcesDisplayName(typeof(Resources), nameof(Resources.GeneralPipingInput_MeanDiameter70_DisplayName))]
+ [ResourcesDescription(typeof(Resources), nameof(Resources.GeneralPipingInput_MeanDiameter70_Description))]
+ public double MeanDiameter70
+ {
+ get
+ {
+ return data.GeneralInput.MeanDiameter70;
+ }
+ }
+
+ [DynamicVisible]
+ [PropertyOrder(57)]
+ [ResourcesCategory(typeof(Resources), nameof(Resources.Categories_Sellmeijer))]
+ [ResourcesDisplayName(typeof(Resources), nameof(Resources.GeneralPipingInput_SellmeijerReductionFactor_DisplayName))]
+ [ResourcesDescription(typeof(Resources), nameof(Resources.GeneralPipingInput_SellmeijerReductionFactor_Description))]
+ public double SellmeijerReductionFactor
+ {
+ get
+ {
+ return data.GeneralInput.SellmeijerReductionFactor;
+ }
+ }
+
+ #endregion
+
+ #region Model factors
+
+ [DynamicVisible]
+ [PropertyOrder(11)]
+ [ResourcesCategory(typeof(RingtoetsCommonFormsResources), nameof(RingtoetsCommonFormsResources.Categories_ModelSettings))]
+ [ResourcesDisplayName(typeof(Resources), nameof(Resources.GeneralPipingInput_UpliftModelFactor_DisplayName))]
+ [ResourcesDescription(typeof(Resources), nameof(Resources.GeneralPipingInput_UpliftModelFactor_Description))]
+ public double UpliftModelFactor
+ {
+ get
+ {
+ return data.GeneralInput.UpliftModelFactor;
+ }
+ }
+
+ [DynamicVisible]
+ [PropertyOrder(12)]
+ [ResourcesCategory(typeof(RingtoetsCommonFormsResources), nameof(RingtoetsCommonFormsResources.Categories_ModelSettings))]
+ [ResourcesDisplayName(typeof(Resources), nameof(Resources.GeneralPipingInput_SellmeijerModelFactor_DisplayName))]
+ [ResourcesDescription(typeof(Resources), nameof(Resources.GeneralPipingInput_SellmeijerModelFactor_Description))]
+ public double SellmeijerModelFactor
+ {
+ get
+ {
+ return data.GeneralInput.SellmeijerModelFactor;
+ }
+ }
+
+ #endregion
+ }
+}
\ No newline at end of file
Index: Ringtoets/Piping/src/Ringtoets.Piping.Forms/Ringtoets.Piping.Forms.csproj
===================================================================
diff -u -rf4c4fe2feedd73d2f45395017b77df2bb56d5c27 -rb9e7df65b2b31d7b0c9faf17926dde1efbbf4cb4
--- Ringtoets/Piping/src/Ringtoets.Piping.Forms/Ringtoets.Piping.Forms.csproj (.../Ringtoets.Piping.Forms.csproj) (revision f4c4fe2feedd73d2f45395017b77df2bb56d5c27)
+++ Ringtoets/Piping/src/Ringtoets.Piping.Forms/Ringtoets.Piping.Forms.csproj (.../Ringtoets.Piping.Forms.csproj) (revision b9e7df65b2b31d7b0c9faf17926dde1efbbf4cb4)
@@ -42,7 +42,7 @@
-
+
Index: Ringtoets/Piping/src/Ringtoets.Piping.Plugin/PipingPlugin.cs
===================================================================
diff -u -rf4c4fe2feedd73d2f45395017b77df2bb56d5c27 -rb9e7df65b2b31d7b0c9faf17926dde1efbbf4cb4
--- Ringtoets/Piping/src/Ringtoets.Piping.Plugin/PipingPlugin.cs (.../PipingPlugin.cs) (revision f4c4fe2feedd73d2f45395017b77df2bb56d5c27)
+++ Ringtoets/Piping/src/Ringtoets.Piping.Plugin/PipingPlugin.cs (.../PipingPlugin.cs) (revision b9e7df65b2b31d7b0c9faf17926dde1efbbf4cb4)
@@ -68,9 +68,9 @@
{
public override IEnumerable GetPropertyInfos()
{
- yield return new PropertyInfo
+ yield return new PropertyInfo
{
- CreateInstance = context => new PipingFailureMechanismContextProperties(context, new FailureMechanismPropertyChangeHandler())
+ CreateInstance = context => new PipingFailureMechanismProperties(context.WrappedData, new FailureMechanismPropertyChangeHandler())
};
yield return new PropertyInfo
{
Fisheye: Tag b9e7df65b2b31d7b0c9faf17926dde1efbbf4cb4 refers to a dead (removed) revision in file `Ringtoets/Piping/test/Ringtoets.Piping.Forms.Test/PropertyClasses/PipingFailureMechanismContextPropertiesTest.cs'.
Fisheye: No comparison available. Pass `N' to diff?
Index: Ringtoets/Piping/test/Ringtoets.Piping.Forms.Test/PropertyClasses/PipingFailureMechanismPropertiesTest.cs
===================================================================
diff -u
--- Ringtoets/Piping/test/Ringtoets.Piping.Forms.Test/PropertyClasses/PipingFailureMechanismPropertiesTest.cs (revision 0)
+++ Ringtoets/Piping/test/Ringtoets.Piping.Forms.Test/PropertyClasses/PipingFailureMechanismPropertiesTest.cs (revision b9e7df65b2b31d7b0c9faf17926dde1efbbf4cb4)
@@ -0,0 +1,527 @@
+// 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.ComponentModel;
+using Core.Common.Base;
+using Core.Common.Base.Data;
+using Core.Common.Gui.PropertyBag;
+using Core.Common.TestUtil;
+using NUnit.Framework;
+using Rhino.Mocks;
+using Ringtoets.Common.Data.Probability;
+using Ringtoets.Common.Data.TestUtil;
+using Ringtoets.Common.Forms.PropertyClasses;
+using Ringtoets.Common.Forms.TestUtil;
+using Ringtoets.Piping.Data;
+using Ringtoets.Piping.Forms.PresentationObjects;
+using Ringtoets.Piping.Forms.PropertyClasses;
+
+namespace Ringtoets.Piping.Forms.Test.PropertyClasses
+{
+ [TestFixture]
+ public class PipingFailureMechanismPropertiesTest
+ {
+ [Test]
+ public void Constructor_DataIsNull_ThrowArgumentNullException()
+ {
+ // Setup
+ var mocks = new MockRepository();
+ var handler = mocks.Stub>();
+ mocks.ReplayAll();
+
+ // Call
+ TestDelegate test = () => new PipingFailureMechanismProperties(null, handler);
+
+ // Assert
+ string paramName = Assert.Throws(test).ParamName;
+ Assert.AreEqual("data", paramName);
+ mocks.VerifyAll();
+ }
+
+ [Test]
+ public void Constructor_ChangeHandlerIsNull_ThrowArgumentNullException()
+ {
+ // Call
+ TestDelegate test = () => new PipingFailureMechanismProperties(
+ new PipingFailureMechanism(),
+ null);
+
+ // Assert
+ string paramName = Assert.Throws(test).ParamName;
+ Assert.AreEqual("handler", paramName);
+ }
+
+ [Test]
+ [TestCase(true)]
+ [TestCase(false)]
+ public void Constructor_ExpectedValues(bool isRelevant)
+ {
+ // Setup
+ var failureMechanism = new PipingFailureMechanism
+ {
+ IsRelevant = isRelevant
+ };
+
+ var mockRepository = new MockRepository();
+ var handler = mockRepository.Stub>();
+ mockRepository.ReplayAll();
+
+ // Call
+ var properties = new PipingFailureMechanismProperties(
+ failureMechanism,
+ handler);
+
+ // Assert
+ Assert.IsInstanceOf>(properties);
+ Assert.AreEqual(failureMechanism.Name, properties.Name);
+ Assert.AreEqual(failureMechanism.Code, properties.Code);
+ Assert.AreEqual(isRelevant, properties.IsRelevant);
+
+ Assert.AreEqual(failureMechanism.GeneralInput.UpliftModelFactor, properties.UpliftModelFactor);
+
+ Assert.AreEqual(failureMechanism.GeneralInput.SellmeijerModelFactor, properties.SellmeijerModelFactor);
+
+ Assert.AreEqual(failureMechanism.GeneralInput.WaterVolumetricWeight, properties.WaterVolumetricWeight);
+
+ Assert.AreEqual(failureMechanism.GeneralInput.CriticalHeaveGradient, properties.CriticalHeaveGradient);
+
+ Assert.AreEqual(failureMechanism.GeneralInput.SandParticlesVolumicWeight, properties.SandParticlesVolumicWeight);
+ Assert.AreEqual(failureMechanism.GeneralInput.WhitesDragCoefficient, properties.WhitesDragCoefficient);
+ Assert.AreEqual(failureMechanism.GeneralInput.BeddingAngle, properties.BeddingAngle);
+ Assert.AreEqual(failureMechanism.GeneralInput.WaterKinematicViscosity, properties.WaterKinematicViscosity);
+ Assert.AreEqual(failureMechanism.GeneralInput.Gravity, properties.Gravity);
+ Assert.AreEqual(failureMechanism.GeneralInput.MeanDiameter70, properties.MeanDiameter70);
+ Assert.AreEqual(failureMechanism.GeneralInput.SellmeijerReductionFactor, properties.SellmeijerReductionFactor);
+
+ Assert.AreEqual(failureMechanism.PipingProbabilityAssessmentInput.A, properties.A);
+ Assert.AreEqual(failureMechanism.PipingProbabilityAssessmentInput.B, properties.B);
+ Assert.AreEqual(2, properties.N.NumberOfDecimalPlaces);
+ Assert.AreEqual(failureMechanism.PipingProbabilityAssessmentInput.GetSectionSpecificN(
+ failureMechanism.PipingProbabilityAssessmentInput.SectionLength),
+ properties.N,
+ properties.N.GetAccuracy());
+ Assert.AreEqual(2, properties.SectionLength.NumberOfDecimalPlaces);
+ Assert.AreEqual(failureMechanism.PipingProbabilityAssessmentInput.SectionLength,
+ properties.SectionLength,
+ properties.SectionLength.GetAccuracy());
+ mockRepository.VerifyAll();
+ }
+
+ [Test]
+ public void Constructor_IsRelevantTrue_PropertiesHaveExpectedAttributesValues()
+ {
+ // Setup
+ var failureMechanism = new PipingFailureMechanism
+ {
+ IsRelevant = true
+ };
+
+ var mockRepository = new MockRepository();
+ var handler = mockRepository.Stub>();
+
+ mockRepository.ReplayAll();
+
+ // Call
+ var properties = new PipingFailureMechanismProperties(
+ failureMechanism,
+ handler);
+
+ // Assert
+ PropertyDescriptorCollection dynamicProperties = PropertiesTestHelper.GetAllVisiblePropertyDescriptors(properties);
+ Assert.AreEqual(18, dynamicProperties.Count);
+
+ const string generalCategory = "Algemeen";
+ const string heaveCategory = "Heave";
+ const string modelFactorCategory = "Modelinstellingen";
+ const string semiProbabilisticCategory = "Lengte-effect parameters";
+ const string sellmeijerCategory = "Terugschrijdende erosie (Sellmeijer)";
+
+ PropertyDescriptor nameProperty = dynamicProperties[0];
+ PropertiesTestHelper.AssertRequiredPropertyDescriptorProperties(nameProperty,
+ generalCategory,
+ "Naam",
+ "De naam van het toetsspoor.",
+ true);
+
+ PropertyDescriptor labelProperty = dynamicProperties[1];
+ PropertiesTestHelper.AssertRequiredPropertyDescriptorProperties(labelProperty,
+ generalCategory,
+ "Label",
+ "Het label van het toetsspoor.",
+ true);
+
+ PropertyDescriptor isRelevantProperty = dynamicProperties[2];
+ PropertiesTestHelper.AssertRequiredPropertyDescriptorProperties(isRelevantProperty,
+ generalCategory,
+ "Is relevant",
+ "Geeft aan of dit toetsspoor relevant is of niet.",
+ true);
+
+ PropertyDescriptor volumicWeightOfWaterProperty = dynamicProperties[3];
+ PropertiesTestHelper.AssertRequiredPropertyDescriptorProperties(volumicWeightOfWaterProperty,
+ generalCategory,
+ "Volumiek gewicht van water [kN/m³]",
+ "Volumiek gewicht van water.");
+
+ PropertyDescriptor upliftModelFactorProperty = dynamicProperties[4];
+ PropertiesTestHelper.AssertRequiredPropertyDescriptorProperties(upliftModelFactorProperty,
+ modelFactorCategory,
+ "Modelfactor opbarsten [-]",
+ "Rekenwaarde om de onzekerheid in het model van opbarsten in rekening te brengen.",
+ true);
+
+ PropertyDescriptor sellmeijerModelFactorProperty = dynamicProperties[5];
+ PropertiesTestHelper.AssertRequiredPropertyDescriptorProperties(sellmeijerModelFactorProperty,
+ modelFactorCategory,
+ "Modelfactor piping toegepast op het model van Sellmeijer [-]",
+ "Rekenwaarde om de onzekerheid in het model van Sellmeijer in rekening te brengen.",
+ true);
+
+ PropertyDescriptor aProperty = dynamicProperties[6];
+ PropertiesTestHelper.AssertRequiredPropertyDescriptorProperties(aProperty,
+ semiProbabilisticCategory,
+ "a [-]",
+ "De parameter 'a' die gebruikt wordt voor het lengte-effect in berekening van de maximaal toelaatbare faalkans.");
+
+ PropertyDescriptor bProperty = dynamicProperties[7];
+ PropertiesTestHelper.AssertRequiredPropertyDescriptorProperties(bProperty,
+ semiProbabilisticCategory,
+ "b [m]",
+ "De parameter 'b' die gebruikt wordt voor het lengte-effect in berekening van de maximaal toelaatbare faalkans.",
+ true);
+
+ PropertyDescriptor sectionLengthProperty = dynamicProperties[8];
+ PropertiesTestHelper.AssertRequiredPropertyDescriptorProperties(sectionLengthProperty,
+ semiProbabilisticCategory,
+ "Lengte* [m]",
+ "Totale lengte van het traject in meters (afgerond).",
+ true);
+
+ PropertyDescriptor NProperty = dynamicProperties[9];
+ PropertiesTestHelper.AssertRequiredPropertyDescriptorProperties(NProperty,
+ semiProbabilisticCategory,
+ "N* [-]",
+ "De parameter 'N' die gebruikt wordt om het lengte-effect mee te nemen in de beoordeling (afgerond).",
+ true);
+
+ PropertyDescriptor criticalHeaveGradientProperty = dynamicProperties[10];
+ PropertiesTestHelper.AssertRequiredPropertyDescriptorProperties(criticalHeaveGradientProperty,
+ heaveCategory,
+ "Kritiek verhang m.b.t. heave [-]",
+ "Kritiek verhang met betrekking tot heave.",
+ true);
+
+ PropertyDescriptor volumetricWeightSandParticlesProperty = dynamicProperties[11];
+ PropertiesTestHelper.AssertRequiredPropertyDescriptorProperties(volumetricWeightSandParticlesProperty,
+ sellmeijerCategory,
+ "Volumiek gewicht van de zandkorrels onder water [kN/m³]",
+ "Het (ondergedompelde) volumegewicht van zandkorrelmateriaal van een zandlaag.",
+ true);
+
+ PropertyDescriptor whitesDragCoefficientProperty = dynamicProperties[12];
+ PropertiesTestHelper.AssertRequiredPropertyDescriptorProperties(whitesDragCoefficientProperty,
+ sellmeijerCategory,
+ "Coëfficiënt van White [-]",
+ "Sleepkrachtfactor volgens White.",
+ true);
+
+ PropertyDescriptor beddingAngleProperty = dynamicProperties[13];
+ PropertiesTestHelper.AssertRequiredPropertyDescriptorProperties(beddingAngleProperty,
+ sellmeijerCategory,
+ "Rolweerstandshoek [°]",
+ "Hoek in het krachtenevenwicht die aangeeft hoeveel weerstand de korrels bieden tegen rollen; ook beddingshoek genoemd.",
+ true);
+
+ PropertyDescriptor waterKinematicViscosityProperty = dynamicProperties[14];
+ PropertiesTestHelper.AssertRequiredPropertyDescriptorProperties(waterKinematicViscosityProperty,
+ sellmeijerCategory,
+ "Kinematische viscositeit van water bij 10° C [m²/s]",
+ "Kinematische viscositeit van water bij 10° C.",
+ true);
+
+ PropertyDescriptor gravityProperty = dynamicProperties[15];
+ PropertiesTestHelper.AssertRequiredPropertyDescriptorProperties(gravityProperty,
+ sellmeijerCategory,
+ "Valversnelling [m/s²]",
+ "Valversnelling.",
+ true);
+
+ PropertyDescriptor meanDiameter70Property = dynamicProperties[16];
+ PropertiesTestHelper.AssertRequiredPropertyDescriptorProperties(meanDiameter70Property,
+ sellmeijerCategory,
+ "Referentiewaarde voor 70%-fraktiel in Sellmeijer regel [m]",
+ "Gemiddelde d70 van de in kleine schaalproeven toegepaste zandsoorten, waarop de formule van Sellmeijer is gefit.",
+ true);
+
+ PropertyDescriptor reductionFactorSellmeijerProperty = dynamicProperties[17];
+ PropertiesTestHelper.AssertRequiredPropertyDescriptorProperties(reductionFactorSellmeijerProperty,
+ sellmeijerCategory,
+ "Reductiefactor Sellmeijer [-]",
+ "Reductiefactor Sellmeijer.",
+ true);
+
+ mockRepository.VerifyAll();
+ }
+
+ [Test]
+ public void Constructor_IsRelevantFalse_PropertiesHaveExpectedAttributesValues()
+ {
+ // Setup
+ var failureMechanism = new PipingFailureMechanism
+ {
+ IsRelevant = false
+ };
+
+ var mockRepository = new MockRepository();
+ var handler = mockRepository.Stub>();
+
+ mockRepository.ReplayAll();
+
+ // Call
+ var properties = new PipingFailureMechanismProperties(
+ failureMechanism,
+ handler);
+
+ // Assert
+ PropertyDescriptorCollection dynamicProperties = PropertiesTestHelper.GetAllVisiblePropertyDescriptors(properties);
+ Assert.AreEqual(3, dynamicProperties.Count);
+
+ const string generalCategory = "Algemeen";
+
+ PropertyDescriptor nameProperty = dynamicProperties[0];
+ PropertiesTestHelper.AssertRequiredPropertyDescriptorProperties(nameProperty,
+ generalCategory,
+ "Naam",
+ "De naam van het toetsspoor.",
+ true);
+
+ PropertyDescriptor labelProperty = dynamicProperties[1];
+ PropertiesTestHelper.AssertRequiredPropertyDescriptorProperties(labelProperty,
+ generalCategory,
+ "Label",
+ "Het label van het toetsspoor.",
+ true);
+
+ PropertyDescriptor isRelevantProperty = dynamicProperties[2];
+ PropertiesTestHelper.AssertRequiredPropertyDescriptorProperties(isRelevantProperty,
+ generalCategory,
+ "Is relevant",
+ "Geeft aan of dit toetsspoor relevant is of niet.",
+ true);
+
+ mockRepository.VerifyAll();
+ }
+
+ [Test]
+ [SetCulture("nl-NL")]
+ [TestCase(-1)]
+ [TestCase(-0.1)]
+ [TestCase(1.1)]
+ [TestCase(8)]
+ public void A_SetInvalidValue_ThrowsArgumentOutOfRangeExceptionNoNotifications(double value)
+ {
+ // Setup
+ var failureMechanism = new PipingFailureMechanism();
+
+ var mocks = new MockRepository();
+ var observable = mocks.StrictMock();
+
+ var changeHandler = new FailureMechanismSetPropertyValueAfterConfirmationParameterTester(
+ failureMechanism,
+ value,
+ new[]
+ {
+ observable
+ });
+ mocks.ReplayAll();
+
+ var properties = new PipingFailureMechanismProperties(
+ failureMechanism,
+ changeHandler);
+
+ // Call
+ TestDelegate call = () => properties.A = value;
+
+ // Assert
+ var exception = Assert.Throws(call);
+ Assert.AreEqual("De waarde moet in het bereik [0,0, 1,0] liggen.", exception.Message);
+ Assert.IsTrue(changeHandler.Called);
+ mocks.VerifyAll();
+ }
+
+ [Test]
+ [TestCase(0)]
+ [TestCase(0.1)]
+ [TestCase(1)]
+ [TestCase(0.0000001)]
+ [TestCase(0.9999999)]
+ public void A_SetValidValue_SetsValueAndUpdatesObservers(double value)
+ {
+ // Setup
+ var failureMechanism = new PipingFailureMechanism();
+
+ var mocks = new MockRepository();
+ var observable = mocks.StrictMock();
+ observable.Expect(o => o.NotifyObservers());
+
+ var changeHandler = new FailureMechanismSetPropertyValueAfterConfirmationParameterTester(
+ failureMechanism,
+ value,
+ new[]
+ {
+ observable
+ });
+ mocks.ReplayAll();
+
+ var properties = new PipingFailureMechanismProperties(
+ failureMechanism,
+ changeHandler);
+
+ // Call
+ properties.A = value;
+
+ // Assert
+ Assert.AreEqual(value, failureMechanism.PipingProbabilityAssessmentInput.A);
+ Assert.IsTrue(changeHandler.Called);
+ mocks.VerifyAll();
+ }
+
+ [Test]
+ [SetCulture("nl-NL")]
+ [TestCase(double.NaN)]
+ [TestCase(double.NegativeInfinity)]
+ [TestCase(double.PositiveInfinity)]
+ [TestCase(-0.005)]
+ [TestCase(20.005)]
+ public void WaterVolumetricWeight_SetInvalidValue_ThrowArgumentExceptionAndDoesNotUpdateObservers(double value)
+ {
+ // Setup
+ var failureMechanism = new PipingFailureMechanism();
+ var roundedValue = (RoundedDouble) value;
+
+ var mocks = new MockRepository();
+ var observable = mocks.StrictMock();
+ var changeHandler = new FailureMechanismSetPropertyValueAfterConfirmationParameterTester(
+ failureMechanism,
+ roundedValue,
+ new[]
+ {
+ observable
+ });
+ mocks.ReplayAll();
+
+ var properties = new PipingFailureMechanismProperties(
+ failureMechanism,
+ changeHandler);
+
+ // Call
+ TestDelegate test = () => properties.WaterVolumetricWeight = roundedValue;
+
+ // Assert
+ TestHelper.AssertThrowsArgumentExceptionAndTestMessage(test, "De waarde moet binnen het bereik [0,00, 20,00] liggen.");
+ Assert.IsTrue(changeHandler.Called);
+ mocks.VerifyAll(); // Does not expect notify observers.
+ }
+
+ [Test]
+ [TestCase(5)]
+ [TestCase(-0.004)]
+ [TestCase(20.004)]
+ public void WaterVolumetricWeight_SetValidValue_SetsValueRoundedAndUpdatesObservers(double value)
+ {
+ // Setup
+ var failureMechanism = new PipingFailureMechanism();
+ var roundedValue = (RoundedDouble) value;
+
+ var mocks = new MockRepository();
+ var observable = mocks.StrictMock();
+ observable.Expect(o => o.NotifyObservers());
+
+ var changeHandler = new FailureMechanismSetPropertyValueAfterConfirmationParameterTester(
+ failureMechanism,
+ roundedValue,
+ new[]
+ {
+ observable
+ });
+
+ mocks.ReplayAll();
+
+ var properties = new PipingFailureMechanismProperties(
+ failureMechanism,
+ changeHandler);
+
+ // Call
+ properties.WaterVolumetricWeight = roundedValue;
+
+ // Assert
+ Assert.AreEqual(value, failureMechanism.GeneralInput.WaterVolumetricWeight,
+ failureMechanism.GeneralInput.WaterVolumetricWeight.GetAccuracy());
+ Assert.IsTrue(changeHandler.Called);
+ mocks.VerifyAll();
+ }
+
+ [Test]
+ [TestCase(true)]
+ [TestCase(false)]
+ public void DynamicVisibleValidationMethod_DependingOnRelevancy_ReturnExpectedVisibility(bool isRelevant)
+ {
+ // Setup
+ var mocks = new MockRepository();
+ var changeHandler = mocks.Stub>();
+ mocks.ReplayAll();
+
+ var pipingFailureMechanism = new PipingFailureMechanism
+ {
+ IsRelevant = isRelevant
+ };
+ var properties = new PipingFailureMechanismProperties(
+ pipingFailureMechanism,
+ changeHandler);
+
+ // Assert
+ Assert.IsTrue(properties.DynamicVisibleValidationMethod(nameof(properties.Name)));
+ Assert.IsTrue(properties.DynamicVisibleValidationMethod(nameof(properties.Code)));
+ Assert.IsTrue(properties.DynamicVisibleValidationMethod(nameof(properties.IsRelevant)));
+
+ Assert.AreEqual(isRelevant, properties.DynamicVisibleValidationMethod(nameof(properties.CriticalHeaveGradient)));
+ Assert.AreEqual(isRelevant, properties.DynamicVisibleValidationMethod(nameof(properties.WaterVolumetricWeight)));
+ Assert.AreEqual(isRelevant, properties.DynamicVisibleValidationMethod(nameof(properties.A)));
+ Assert.AreEqual(isRelevant, properties.DynamicVisibleValidationMethod(nameof(properties.B)));
+ Assert.AreEqual(isRelevant, properties.DynamicVisibleValidationMethod(nameof(properties.SectionLength)));
+ Assert.AreEqual(isRelevant, properties.DynamicVisibleValidationMethod(nameof(properties.N)));
+ Assert.AreEqual(isRelevant, properties.DynamicVisibleValidationMethod(nameof(properties.SandParticlesVolumicWeight)));
+ Assert.AreEqual(isRelevant, properties.DynamicVisibleValidationMethod(nameof(properties.WhitesDragCoefficient)));
+ Assert.AreEqual(isRelevant, properties.DynamicVisibleValidationMethod(nameof(properties.BeddingAngle)));
+ Assert.AreEqual(isRelevant, properties.DynamicVisibleValidationMethod(nameof(properties.WaterKinematicViscosity)));
+ Assert.AreEqual(isRelevant, properties.DynamicVisibleValidationMethod(nameof(properties.Gravity)));
+ Assert.AreEqual(isRelevant, properties.DynamicVisibleValidationMethod(nameof(properties.MeanDiameter70)));
+ Assert.AreEqual(isRelevant, properties.DynamicVisibleValidationMethod(nameof(properties.SellmeijerReductionFactor)));
+ Assert.AreEqual(isRelevant, properties.DynamicVisibleValidationMethod(nameof(properties.UpliftModelFactor)));
+ Assert.AreEqual(isRelevant, properties.DynamicVisibleValidationMethod(nameof(properties.SellmeijerModelFactor)));
+
+ Assert.IsTrue(properties.DynamicVisibleValidationMethod(null));
+
+ mocks.VerifyAll();
+ }
+ }
+}
\ No newline at end of file
Index: Ringtoets/Piping/test/Ringtoets.Piping.Forms.Test/Ringtoets.Piping.Forms.Test.csproj
===================================================================
diff -u -rf4c4fe2feedd73d2f45395017b77df2bb56d5c27 -rb9e7df65b2b31d7b0c9faf17926dde1efbbf4cb4
--- Ringtoets/Piping/test/Ringtoets.Piping.Forms.Test/Ringtoets.Piping.Forms.Test.csproj (.../Ringtoets.Piping.Forms.Test.csproj) (revision f4c4fe2feedd73d2f45395017b77df2bb56d5c27)
+++ Ringtoets/Piping/test/Ringtoets.Piping.Forms.Test/Ringtoets.Piping.Forms.Test.csproj (.../Ringtoets.Piping.Forms.Test.csproj) (revision b9e7df65b2b31d7b0c9faf17926dde1efbbf4cb4)
@@ -36,8 +36,8 @@
-
+
Index: Ringtoets/Piping/test/Ringtoets.Piping.Plugin.Test/PipingPluginTest.cs
===================================================================
diff -u -rdf44be36b5c375ff32cd94086af5e6610ec9fc3a -rb9e7df65b2b31d7b0c9faf17926dde1efbbf4cb4
--- Ringtoets/Piping/test/Ringtoets.Piping.Plugin.Test/PipingPluginTest.cs (.../PipingPluginTest.cs) (revision df44be36b5c375ff32cd94086af5e6610ec9fc3a)
+++ Ringtoets/Piping/test/Ringtoets.Piping.Plugin.Test/PipingPluginTest.cs (.../PipingPluginTest.cs) (revision b9e7df65b2b31d7b0c9faf17926dde1efbbf4cb4)
@@ -68,7 +68,7 @@
PluginTestHelper.AssertPropertyInfoDefined(
propertyInfos,
typeof(PipingFailureMechanismContext),
- typeof(PipingFailureMechanismContextProperties));
+ typeof(PipingFailureMechanismProperties));
PluginTestHelper.AssertPropertyInfoDefined(
propertyInfos,
Fisheye: Tag b9e7df65b2b31d7b0c9faf17926dde1efbbf4cb4 refers to a dead (removed) revision in file `Ringtoets/Piping/test/Ringtoets.Piping.Plugin.Test/PropertyInfos/PipingFailureMechanismContextPropertyInfoTest.cs'.
Fisheye: No comparison available. Pass `N' to diff?
Index: Ringtoets/Piping/test/Ringtoets.Piping.Plugin.Test/PropertyInfos/PipingFailureMechanismPropertyInfoTest.cs
===================================================================
diff -u
--- Ringtoets/Piping/test/Ringtoets.Piping.Plugin.Test/PropertyInfos/PipingFailureMechanismPropertyInfoTest.cs (revision 0)
+++ Ringtoets/Piping/test/Ringtoets.Piping.Plugin.Test/PropertyInfos/PipingFailureMechanismPropertyInfoTest.cs (revision b9e7df65b2b31d7b0c9faf17926dde1efbbf4cb4)
@@ -0,0 +1,82 @@
+// 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.Linq;
+using Core.Common.Gui.Plugin;
+using Core.Common.Gui.PropertyBag;
+using NUnit.Framework;
+using Rhino.Mocks;
+using Ringtoets.Common.Data.AssessmentSection;
+using Ringtoets.Piping.Data;
+using Ringtoets.Piping.Forms.PresentationObjects;
+using Ringtoets.Piping.Forms.PropertyClasses;
+
+namespace Ringtoets.Piping.Plugin.Test.PropertyInfos
+{
+ [TestFixture]
+ public class PipingFailureMechanismPropertyInfoTest
+ {
+ private PipingPlugin plugin;
+ private PropertyInfo info;
+
+ [SetUp]
+ public void SetUp()
+ {
+ plugin = new PipingPlugin();
+ info = plugin.GetPropertyInfos().First(tni => tni.PropertyObjectType == typeof(PipingFailureMechanismProperties));
+ }
+
+ [TearDown]
+ public void TearDown()
+ {
+ plugin.Dispose();
+ }
+
+ [Test]
+ public void Initialized_Always_ExpectedPropertiesSet()
+ {
+ // Assert
+ Assert.AreEqual(typeof(PipingFailureMechanismContext), info.DataType);
+ Assert.AreEqual(typeof(PipingFailureMechanismProperties), info.PropertyObjectType);
+ }
+
+ [Test]
+ public void CreateInstance_Always_NewPropertiesWithFailureMechanismContextAsData()
+ {
+ // Setup
+ var mocks = new MockRepository();
+ var assessmentSection = mocks.Stub();
+ mocks.ReplayAll();
+
+ var failureMechanism = new PipingFailureMechanism();
+ var context = new PipingFailureMechanismContext(failureMechanism, assessmentSection);
+
+ // Call
+ IObjectProperties objectProperties = info.CreateInstance(context);
+
+ // Assert
+ Assert.IsInstanceOf(objectProperties);
+ Assert.AreSame(failureMechanism, objectProperties.Data);
+
+ mocks.VerifyAll();
+ }
+ }
+}
\ No newline at end of file
Index: Ringtoets/Piping/test/Ringtoets.Piping.Plugin.Test/Ringtoets.Piping.Plugin.Test.csproj
===================================================================
diff -u -rdf44be36b5c375ff32cd94086af5e6610ec9fc3a -rb9e7df65b2b31d7b0c9faf17926dde1efbbf4cb4
--- Ringtoets/Piping/test/Ringtoets.Piping.Plugin.Test/Ringtoets.Piping.Plugin.Test.csproj (.../Ringtoets.Piping.Plugin.Test.csproj) (revision df44be36b5c375ff32cd94086af5e6610ec9fc3a)
+++ Ringtoets/Piping/test/Ringtoets.Piping.Plugin.Test/Ringtoets.Piping.Plugin.Test.csproj (.../Ringtoets.Piping.Plugin.Test.csproj) (revision b9e7df65b2b31d7b0c9faf17926dde1efbbf4cb4)
@@ -51,7 +51,7 @@
-
+