Index: Ringtoets/GrassCoverErosionOutwards/src/Ringtoets.GrassCoverErosionOutwards.IO/Configurations/GrassCoverErosionOutwardsWaveConditionsCalculationConfigurationImporter.cs =================================================================== diff -u -r359d817d69eec5e474ddc4404fb7b35b91b555ad -r649997fac0baeea92b9d625ca1e0f4828918f28c --- Ringtoets/GrassCoverErosionOutwards/src/Ringtoets.GrassCoverErosionOutwards.IO/Configurations/GrassCoverErosionOutwardsWaveConditionsCalculationConfigurationImporter.cs (.../GrassCoverErosionOutwardsWaveConditionsCalculationConfigurationImporter.cs) (revision 359d817d69eec5e474ddc4404fb7b35b91b555ad) +++ Ringtoets/GrassCoverErosionOutwards/src/Ringtoets.GrassCoverErosionOutwards.IO/Configurations/GrassCoverErosionOutwardsWaveConditionsCalculationConfigurationImporter.cs (.../GrassCoverErosionOutwardsWaveConditionsCalculationConfigurationImporter.cs) (revision 649997fac0baeea92b9d625ca1e0f4828918f28c) @@ -23,6 +23,7 @@ using System.Collections.Generic; using Ringtoets.Common.Data.Calculation; using Ringtoets.Common.Data.DikeProfiles; +using Ringtoets.Common.Data.FailureMechanism; using Ringtoets.Common.Data.Hydraulics; using Ringtoets.GrassCoverErosionOutwards.Data; using Ringtoets.Revetment.IO.Configurations; @@ -58,5 +59,14 @@ { return new GrassCoverErosionOutwardsWaveConditionsCalculationConfigurationReader(xmlFilePath); } + + protected override void SetCategoryType(GrassCoverErosionOutwardsWaveConditionsCalculationConfiguration calculationConfiguration, + GrassCoverErosionOutwardsWaveConditionsCalculation calculation) + { + if (calculationConfiguration.CategoryType.HasValue) + { + calculation.InputParameters.CategoryType = (FailureMechanismCategoryType) calculationConfiguration.CategoryType; + } + } } } Index: Ringtoets/GrassCoverErosionOutwards/test/Ringtoets.GrassCoverErosionOutwards.IO.Test/Configurations/GrassCoverErosionOutwardsWaveConditionsCalculationConfigurationImporterTest.cs =================================================================== diff -u -r359d817d69eec5e474ddc4404fb7b35b91b555ad -r649997fac0baeea92b9d625ca1e0f4828918f28c --- Ringtoets/GrassCoverErosionOutwards/test/Ringtoets.GrassCoverErosionOutwards.IO.Test/Configurations/GrassCoverErosionOutwardsWaveConditionsCalculationConfigurationImporterTest.cs (.../GrassCoverErosionOutwardsWaveConditionsCalculationConfigurationImporterTest.cs) (revision 359d817d69eec5e474ddc4404fb7b35b91b555ad) +++ Ringtoets/GrassCoverErosionOutwards/test/Ringtoets.GrassCoverErosionOutwards.IO.Test/Configurations/GrassCoverErosionOutwardsWaveConditionsCalculationConfigurationImporterTest.cs (.../GrassCoverErosionOutwardsWaveConditionsCalculationConfigurationImporterTest.cs) (revision 649997fac0baeea92b9d625ca1e0f4828918f28c) @@ -19,20 +19,29 @@ // Stichting Deltares and remain full property of Stichting Deltares at all times. // All rights reserved. +using System.IO; using System.Linq; +using Core.Common.Base.Data; +using Core.Common.Base.Geometry; +using Core.Common.TestUtil; using NUnit.Framework; using Ringtoets.Common.Data.Calculation; using Ringtoets.Common.Data.DikeProfiles; +using Ringtoets.Common.Data.FailureMechanism; using Ringtoets.Common.Data.Hydraulics; using Ringtoets.GrassCoverErosionOutwards.Data; using Ringtoets.GrassCoverErosionOutwards.IO.Configurations; +using Ringtoets.Revetment.Data; using Ringtoets.Revetment.IO.Configurations; namespace Ringtoets.GrassCoverErosionOutwards.IO.Test.Configurations { [TestFixture] public class GrassCoverErosionOutwardsWaveConditionsCalculationConfigurationImporterTest { + private readonly string path = TestHelper.GetTestDataPath(TestDataPath.Ringtoets.GrassCoverErosionOutwards.IO, + nameof(GrassCoverErosionOutwardsWaveConditionsCalculationConfigurationImporter)); + [Test] public void Constructor_ExpectedValues() { @@ -46,5 +55,89 @@ // Assert Assert.IsInstanceOf>(importer); } + + [Test] + public void Import_ValidConfigurationWithValidData_DataAddedToModel() + { + // Setup + string filePath = Path.Combine(path, "validConfigurationFullCalculation.xml"); + + var calculationGroup = new CalculationGroup(); + var hydraulicBoundaryLocation = new HydraulicBoundaryLocation(1, "HRlocatie", 10, 20); + var foreshoreProfile = new ForeshoreProfile(new Point2D(0, 0), new[] + { + new Point2D(0, 0), + new Point2D(1, 1), + new Point2D(2, 2) + }, new BreakWater(BreakWaterType.Caisson, 0), new ForeshoreProfile.ConstructionProperties + { + Id = "Voorlandprofiel", + Name = "VoorlandProfielName" + }); + + var importer = new GrassCoverErosionOutwardsWaveConditionsCalculationConfigurationImporter( + filePath, + calculationGroup, + new[] + { + hydraulicBoundaryLocation + }, + new[] + { + foreshoreProfile + }); + + // Call + bool successful = importer.Import(); + + // Assert + Assert.IsTrue(successful); + + var expectedCalculation = new GrassCoverErosionOutwardsWaveConditionsCalculation + { + Name = "Berekening 1", + InputParameters = + { + HydraulicBoundaryLocation = hydraulicBoundaryLocation, + UpperBoundaryRevetment = (RoundedDouble) 10, + LowerBoundaryRevetment = (RoundedDouble) 2, + UpperBoundaryWaterLevels = (RoundedDouble) 9, + LowerBoundaryWaterLevels = (RoundedDouble) 4, + StepSize = WaveConditionsInputStepSize.Half, + ForeshoreProfile = foreshoreProfile, + Orientation = (RoundedDouble) 5.5, + UseForeshore = false, + UseBreakWater = true, + BreakWater = + { + Height = (RoundedDouble) 6.6, + Type = BreakWaterType.Caisson + }, + CategoryType = FailureMechanismCategoryType.FactorizedLowerLimitNorm + } + }; + + Assert.AreEqual(1, calculationGroup.Children.Count); + AssertWaveConditionsCalculation(expectedCalculation, (ICalculation)calculationGroup.Children[0]); + } + + private static void AssertWaveConditionsCalculation(ICalculation expectedCalculation, + ICalculation actualCalculation) + { + Assert.AreEqual(expectedCalculation.Name, actualCalculation.Name); + Assert.AreSame(expectedCalculation.InputParameters.HydraulicBoundaryLocation, actualCalculation.InputParameters.HydraulicBoundaryLocation); + Assert.AreEqual(expectedCalculation.InputParameters.UpperBoundaryRevetment, actualCalculation.InputParameters.UpperBoundaryRevetment); + Assert.AreEqual(expectedCalculation.InputParameters.LowerBoundaryRevetment, actualCalculation.InputParameters.LowerBoundaryRevetment); + Assert.AreEqual(expectedCalculation.InputParameters.UpperBoundaryWaterLevels, actualCalculation.InputParameters.UpperBoundaryWaterLevels); + Assert.AreEqual(expectedCalculation.InputParameters.LowerBoundaryWaterLevels, actualCalculation.InputParameters.LowerBoundaryWaterLevels); + Assert.AreEqual(expectedCalculation.InputParameters.StepSize, actualCalculation.InputParameters.StepSize); + Assert.AreEqual(expectedCalculation.InputParameters.Orientation, actualCalculation.InputParameters.Orientation); + Assert.AreEqual(expectedCalculation.InputParameters.ForeshoreProfile, actualCalculation.InputParameters.ForeshoreProfile); + Assert.AreEqual(expectedCalculation.InputParameters.UseForeshore, actualCalculation.InputParameters.UseForeshore); + Assert.AreEqual(expectedCalculation.InputParameters.UseBreakWater, actualCalculation.InputParameters.UseBreakWater); + Assert.AreEqual(expectedCalculation.InputParameters.BreakWater.Height, actualCalculation.InputParameters.BreakWater.Height); + Assert.AreEqual(expectedCalculation.InputParameters.BreakWater.Type, actualCalculation.InputParameters.BreakWater.Type); + Assert.AreEqual(expectedCalculation.InputParameters.CategoryType, actualCalculation.InputParameters.CategoryType); + } } } \ No newline at end of file Index: Ringtoets/GrassCoverErosionOutwards/test/Ringtoets.GrassCoverErosionOutwards.IO.Test/test-data/GrassCoverErosionOutwardsWaveConditionsCalculationConfigurationImporter/validConfigurationFullCalculation.xml =================================================================== diff -u --- Ringtoets/GrassCoverErosionOutwards/test/Ringtoets.GrassCoverErosionOutwards.IO.Test/test-data/GrassCoverErosionOutwardsWaveConditionsCalculationConfigurationImporter/validConfigurationFullCalculation.xml (revision 0) +++ Ringtoets/GrassCoverErosionOutwards/test/Ringtoets.GrassCoverErosionOutwards.IO.Test/test-data/GrassCoverErosionOutwardsWaveConditionsCalculationConfigurationImporter/validConfigurationFullCalculation.xml (revision 649997fac0baeea92b9d625ca1e0f4828918f28c) @@ -0,0 +1,20 @@ + + + + HRlocatie + Vv-VIv + 10 + 2 + 9 + 4 + 0.5 + Voorlandprofiel + 5.5 + + true + caisson + 6.6 + false + + + Index: Ringtoets/Revetment/src/Ringtoets.Revetment.IO/Configurations/AssessmentSectionCategoryWaveConditionsCalculationConfigurationImporter.cs =================================================================== diff -u -r359d817d69eec5e474ddc4404fb7b35b91b555ad -r649997fac0baeea92b9d625ca1e0f4828918f28c --- Ringtoets/Revetment/src/Ringtoets.Revetment.IO/Configurations/AssessmentSectionCategoryWaveConditionsCalculationConfigurationImporter.cs (.../AssessmentSectionCategoryWaveConditionsCalculationConfigurationImporter.cs) (revision 359d817d69eec5e474ddc4404fb7b35b91b555ad) +++ Ringtoets/Revetment/src/Ringtoets.Revetment.IO/Configurations/AssessmentSectionCategoryWaveConditionsCalculationConfigurationImporter.cs (.../AssessmentSectionCategoryWaveConditionsCalculationConfigurationImporter.cs) (revision 649997fac0baeea92b9d625ca1e0f4828918f28c) @@ -21,6 +21,7 @@ using System; using System.Collections.Generic; +using Ringtoets.Common.Data.AssessmentSection; using Ringtoets.Common.Data.Calculation; using Ringtoets.Common.Data.DikeProfiles; using Ringtoets.Common.Data.Hydraulics; @@ -33,7 +34,7 @@ /// . /// /// The type of the calculation to import. - public class AssessmentSectionCategoryWaveConditionsCalculationConfigurationImporter + public class AssessmentSectionCategoryWaveConditionsCalculationConfigurationImporter : WaveConditionsCalculationConfigurationImporter where T : ICalculation, new() { @@ -58,5 +59,13 @@ { return new AssessmentSectionCategoryWaveConditionsCalculationConfigurationReader(xmlFilePath); } + + protected override void SetCategoryType(AssessmentSectionCategoryWaveConditionsCalculationConfiguration calculationConfiguration, T calculation) + { + if (calculationConfiguration.CategoryType.HasValue) + { + calculation.InputParameters.CategoryType = (AssessmentSectionCategoryType) calculationConfiguration.CategoryType; + } + } } } \ No newline at end of file Index: Ringtoets/Revetment/src/Ringtoets.Revetment.IO/Configurations/WaveConditionsCalculationConfigurationImporter.cs =================================================================== diff -u -r359d817d69eec5e474ddc4404fb7b35b91b555ad -r649997fac0baeea92b9d625ca1e0f4828918f28c --- Ringtoets/Revetment/src/Ringtoets.Revetment.IO/Configurations/WaveConditionsCalculationConfigurationImporter.cs (.../WaveConditionsCalculationConfigurationImporter.cs) (revision 359d817d69eec5e474ddc4404fb7b35b91b555ad) +++ Ringtoets/Revetment/src/Ringtoets.Revetment.IO/Configurations/WaveConditionsCalculationConfigurationImporter.cs (.../WaveConditionsCalculationConfigurationImporter.cs) (revision 649997fac0baeea92b9d625ca1e0f4828918f28c) @@ -61,19 +61,21 @@ /// Thrown when any parameter is /// null. protected WaveConditionsCalculationConfigurationImporter(string xmlFilePath, - CalculationGroup importTarget, - IEnumerable hydraulicBoundaryLocations, - IEnumerable foreshoreProfiles) + CalculationGroup importTarget, + IEnumerable hydraulicBoundaryLocations, + IEnumerable foreshoreProfiles) : base(xmlFilePath, importTarget) { if (hydraulicBoundaryLocations == null) { throw new ArgumentNullException(nameof(hydraulicBoundaryLocations)); } + if (foreshoreProfiles == null) { throw new ArgumentNullException(nameof(foreshoreProfiles)); } + availableHydraulicBoundaryLocations = hydraulicBoundaryLocations; availableForeshoreProfiles = foreshoreProfiles; } @@ -88,6 +90,7 @@ }; SetStepSize(calculationConfiguration, waveConditionsCalculation); + SetCategoryType(calculationConfiguration, waveConditionsCalculation); if (TrySetHydraulicBoundaryLocation(calculationConfiguration.HydraulicBoundaryLocationName, waveConditionsCalculation) && TrySetBoundaries(calculationConfiguration, waveConditionsCalculation) @@ -99,10 +102,18 @@ SetWaveReductionParameters(calculationConfiguration.WaveReduction, waveConditionsCalculation.InputParameters); return waveConditionsCalculation; } + return null; } /// + /// Assigns the category type of the calculation. + /// + /// The calculation read from the imported file. + /// The calculation to configure. + protected abstract void SetCategoryType(TCalculationConfiguration calculationConfiguration, TCalculation calculation); + + /// /// Assigns the boundaries of the calculation. /// /// The calculation read from the imported file. @@ -149,6 +160,7 @@ return false; } } + return true; } @@ -214,6 +226,7 @@ return false; } } + return true; } } Index: Ringtoets/Revetment/test/Ringtoets.Revetment.IO.Test/Configurations/AssessmentSectionCategoryWaveConditionsCalculationConfigurationImporterTest.cs =================================================================== diff -u -r359d817d69eec5e474ddc4404fb7b35b91b555ad -r649997fac0baeea92b9d625ca1e0f4828918f28c --- Ringtoets/Revetment/test/Ringtoets.Revetment.IO.Test/Configurations/AssessmentSectionCategoryWaveConditionsCalculationConfigurationImporterTest.cs (.../AssessmentSectionCategoryWaveConditionsCalculationConfigurationImporterTest.cs) (revision 359d817d69eec5e474ddc4404fb7b35b91b555ad) +++ Ringtoets/Revetment/test/Ringtoets.Revetment.IO.Test/Configurations/AssessmentSectionCategoryWaveConditionsCalculationConfigurationImporterTest.cs (.../AssessmentSectionCategoryWaveConditionsCalculationConfigurationImporterTest.cs) (revision 649997fac0baeea92b9d625ca1e0f4828918f28c) @@ -19,8 +19,13 @@ // Stichting Deltares and remain full property of Stichting Deltares at all times. // All rights reserved. +using System.IO; using System.Linq; +using Core.Common.Base.Data; +using Core.Common.Base.Geometry; +using Core.Common.TestUtil; using NUnit.Framework; +using Ringtoets.Common.Data.AssessmentSection; using Ringtoets.Common.Data.Calculation; using Ringtoets.Common.Data.DikeProfiles; using Ringtoets.Common.Data.Hydraulics; @@ -33,6 +38,9 @@ [TestFixture] public class AssessmentSectionCategoryWaveConditionsCalculationConfigurationImporterTest { + private readonly string path = TestHelper.GetTestDataPath(TestDataPath.Ringtoets.Revetment.IO, + nameof(AssessmentSectionCategoryWaveConditionsCalculationConfigurationImporter)); + [Test] public void Constructor_ExpectedValues() { @@ -47,10 +55,94 @@ Assert.IsInstanceOf>(importer); } + [Test] + public void Import_ValidConfigurationWithValidData_DataAddedToModel() + { + // Setup + string filePath = Path.Combine(path, "validConfigurationFullCalculation.xml"); + + var calculationGroup = new CalculationGroup(); + var hydraulicBoundaryLocation = new HydraulicBoundaryLocation(1, "HRlocatie", 10, 20); + var foreshoreProfile = new ForeshoreProfile(new Point2D(0, 0), new[] + { + new Point2D(0, 0), + new Point2D(1, 1), + new Point2D(2, 2) + }, new BreakWater(BreakWaterType.Caisson, 0), new ForeshoreProfile.ConstructionProperties + { + Id = "Voorlandprofiel", + Name = "VoorlandProfielName" + }); + + var importer = new AssessmentSectionCategoryWaveConditionsCalculationConfigurationImporter( + filePath, + calculationGroup, + new[] + { + hydraulicBoundaryLocation + }, + new[] + { + foreshoreProfile + }); + + // Call + bool successful = importer.Import(); + + // Assert + Assert.IsTrue(successful); + + var expectedCalculation = new TestTargetTestWaveConditionsCalculation + { + Name = "Berekening 1", + InputParameters = + { + HydraulicBoundaryLocation = hydraulicBoundaryLocation, + UpperBoundaryRevetment = (RoundedDouble) 10, + LowerBoundaryRevetment = (RoundedDouble) 2, + UpperBoundaryWaterLevels = (RoundedDouble) 9, + LowerBoundaryWaterLevels = (RoundedDouble) 4, + StepSize = WaveConditionsInputStepSize.Half, + ForeshoreProfile = foreshoreProfile, + Orientation = (RoundedDouble) 5.5, + UseForeshore = false, + UseBreakWater = true, + BreakWater = + { + Height = (RoundedDouble) 6.6, + Type = BreakWaterType.Caisson + }, + CategoryType = AssessmentSectionCategoryType.SignalingNorm + } + }; + + Assert.AreEqual(1, calculationGroup.Children.Count); + AssertWaveConditionsCalculation(expectedCalculation, (ICalculation) calculationGroup.Children[0]); + } + + private static void AssertWaveConditionsCalculation(ICalculation expectedCalculation, + ICalculation actualCalculation) + { + Assert.AreEqual(expectedCalculation.Name, actualCalculation.Name); + Assert.AreSame(expectedCalculation.InputParameters.HydraulicBoundaryLocation, actualCalculation.InputParameters.HydraulicBoundaryLocation); + Assert.AreEqual(expectedCalculation.InputParameters.UpperBoundaryRevetment, actualCalculation.InputParameters.UpperBoundaryRevetment); + Assert.AreEqual(expectedCalculation.InputParameters.LowerBoundaryRevetment, actualCalculation.InputParameters.LowerBoundaryRevetment); + Assert.AreEqual(expectedCalculation.InputParameters.UpperBoundaryWaterLevels, actualCalculation.InputParameters.UpperBoundaryWaterLevels); + Assert.AreEqual(expectedCalculation.InputParameters.LowerBoundaryWaterLevels, actualCalculation.InputParameters.LowerBoundaryWaterLevels); + Assert.AreEqual(expectedCalculation.InputParameters.StepSize, actualCalculation.InputParameters.StepSize); + Assert.AreEqual(expectedCalculation.InputParameters.Orientation, actualCalculation.InputParameters.Orientation); + Assert.AreEqual(expectedCalculation.InputParameters.ForeshoreProfile, actualCalculation.InputParameters.ForeshoreProfile); + Assert.AreEqual(expectedCalculation.InputParameters.UseForeshore, actualCalculation.InputParameters.UseForeshore); + Assert.AreEqual(expectedCalculation.InputParameters.UseBreakWater, actualCalculation.InputParameters.UseBreakWater); + Assert.AreEqual(expectedCalculation.InputParameters.BreakWater.Height, actualCalculation.InputParameters.BreakWater.Height); + Assert.AreEqual(expectedCalculation.InputParameters.BreakWater.Type, actualCalculation.InputParameters.BreakWater.Type); + Assert.AreEqual(expectedCalculation.InputParameters.CategoryType, actualCalculation.InputParameters.CategoryType); + } + private class TestTargetTestWaveConditionsCalculation : TestWaveConditionsCalculation { - public TestTargetTestWaveConditionsCalculation() - : base(new AssessmentSectionCategoryWaveConditionsInput()) { } + public TestTargetTestWaveConditionsCalculation() + : base(new AssessmentSectionCategoryWaveConditionsInput()) {} } } } \ No newline at end of file Index: Ringtoets/Revetment/test/Ringtoets.Revetment.IO.Test/Configurations/WaveConditionsCalculationConfigurationImporterTest.cs =================================================================== diff -u -r359d817d69eec5e474ddc4404fb7b35b91b555ad -r649997fac0baeea92b9d625ca1e0f4828918f28c --- Ringtoets/Revetment/test/Ringtoets.Revetment.IO.Test/Configurations/WaveConditionsCalculationConfigurationImporterTest.cs (.../WaveConditionsCalculationConfigurationImporterTest.cs) (revision 359d817d69eec5e474ddc4404fb7b35b91b555ad) +++ Ringtoets/Revetment/test/Ringtoets.Revetment.IO.Test/Configurations/WaveConditionsCalculationConfigurationImporterTest.cs (.../WaveConditionsCalculationConfigurationImporterTest.cs) (revision 649997fac0baeea92b9d625ca1e0f4828918f28c) @@ -352,6 +352,9 @@ { return new TestWaveConditionsCalculationConfigurationReader(xmlFilePath); } + + protected override void SetCategoryType(WaveConditionsCalculationConfiguration calculationConfiguration, + TestTargetTestWaveConditionsCalculation calculation) {} } private class TestTargetTestWaveConditionsCalculation : TestWaveConditionsCalculation Index: Ringtoets/Revetment/test/Ringtoets.Revetment.IO.Test/test-data/AssessmentSectionCategoryWaveConditionsCalculationConfigurationImporter/validConfigurationFullCalculation.xml =================================================================== diff -u --- Ringtoets/Revetment/test/Ringtoets.Revetment.IO.Test/test-data/AssessmentSectionCategoryWaveConditionsCalculationConfigurationImporter/validConfigurationFullCalculation.xml (revision 0) +++ Ringtoets/Revetment/test/Ringtoets.Revetment.IO.Test/test-data/AssessmentSectionCategoryWaveConditionsCalculationConfigurationImporter/validConfigurationFullCalculation.xml (revision 649997fac0baeea92b9d625ca1e0f4828918f28c) @@ -0,0 +1,20 @@ + + + + HRlocatie + A-B + 10 + 2 + 9 + 4 + 0.5 + Voorlandprofiel + 5.5 + + true + caisson + 6.6 + false + + +