Index: Ringtoets/StabilityPointStructures/src/Ringtoets.StabilityPointStructures.Data/StabilityPointStructuresInput.cs
===================================================================
diff -u -rcd72075e69264b38c0df17a11e7de9096fcf6932 -r3ca074d78bf75ff67c19539c04be91196a0659b0
--- Ringtoets/StabilityPointStructures/src/Ringtoets.StabilityPointStructures.Data/StabilityPointStructuresInput.cs (.../StabilityPointStructuresInput.cs) (revision cd72075e69264b38c0df17a11e7de9096fcf6932)
+++ Ringtoets/StabilityPointStructures/src/Ringtoets.StabilityPointStructures.Data/StabilityPointStructuresInput.cs (.../StabilityPointStructuresInput.cs) (revision 3ca074d78bf75ff67c19539c04be91196a0659b0)
@@ -479,7 +479,7 @@
}
set
{
- ProbabilityHelper.ValidateProbability(value, nameof(value), RingtoetsDataCommonResources.FailureProbability_Value_needs_to_be_in_Range_0_);
+ ProbabilityHelper.ValidateProbability(value, null, RingtoetsDataCommonResources.FailureProbability_Value_needs_to_be_in_Range_0_);
failureProbabilityRepairClosure = value;
}
}
Index: Ringtoets/StabilityPointStructures/src/Ringtoets.StabilityPointStructures.IO/Configurations/StabilityPointStructuresCalculationConfigurationImporter.cs
===================================================================
diff -u
--- Ringtoets/StabilityPointStructures/src/Ringtoets.StabilityPointStructures.IO/Configurations/StabilityPointStructuresCalculationConfigurationImporter.cs (revision 0)
+++ Ringtoets/StabilityPointStructures/src/Ringtoets.StabilityPointStructures.IO/Configurations/StabilityPointStructuresCalculationConfigurationImporter.cs (revision 3ca074d78bf75ff67c19539c04be91196a0659b0)
@@ -0,0 +1,378 @@
+// Copyright (C) Stichting Deltares 2016. 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.Data;
+using Ringtoets.Common.Data.Calculation;
+using Ringtoets.Common.Data.DikeProfiles;
+using Ringtoets.Common.Data.Hydraulics;
+using Ringtoets.Common.Data.Structures;
+using Ringtoets.Common.IO.Configurations;
+using Ringtoets.Common.IO.Configurations.Helpers;
+using Ringtoets.Common.IO.Configurations.Import;
+using Ringtoets.StabilityPointStructures.Data;
+using Ringtoets.StabilityPointStructures.IO.Configurations.Helpers;
+using Ringtoets.StabilityPointStructures.IO.Properties;
+using RingtoetsCommonIOResources = Ringtoets.Common.IO.Properties.Resources;
+
+namespace Ringtoets.StabilityPointStructures.IO.Configurations
+{
+ ///
+ /// Class for importing a configuration of from an XML file and storing
+ /// it on a .
+ ///
+ public class StabilityPointStructuresCalculationConfigurationImporter
+ : CalculationConfigurationImporter<
+ StabilityPointStructuresCalculationConfigurationReader,
+ StabilityPointStructuresCalculationConfiguration>
+ {
+ private readonly IEnumerable availableHydraulicBoundaryLocations;
+ private readonly IEnumerable availableForeshoreProfiles;
+ private readonly IEnumerable availableStructures;
+
+ ///
+ /// Create new instance of
+ ///
+ /// The path to the XML file to import from.
+ /// The calculation group to update.
+ /// The hydraulic boundary locations
+ /// used to check if the imported objects contain the right location.
+ /// The foreshore profiles used to check if
+ /// the imported objects contain the right foreshore profile.
+ /// The structures used to check if
+ /// the imported objects contain the right structure.
+ /// Thrown when any input parameter is null.
+ public StabilityPointStructuresCalculationConfigurationImporter(
+ string xmlFilePath,
+ CalculationGroup importTarget,
+ IEnumerable hydraulicBoundaryLocations,
+ IEnumerable foreshoreProfiles,
+ IEnumerable structures)
+ : base(xmlFilePath, importTarget)
+ {
+ if (hydraulicBoundaryLocations == null)
+ {
+ throw new ArgumentNullException(nameof(hydraulicBoundaryLocations));
+ }
+ if (foreshoreProfiles == null)
+ {
+ throw new ArgumentNullException(nameof(foreshoreProfiles));
+ }
+ if (structures == null)
+ {
+ throw new ArgumentNullException(nameof(structures));
+ }
+ availableHydraulicBoundaryLocations = hydraulicBoundaryLocations;
+ availableForeshoreProfiles = foreshoreProfiles;
+ availableStructures = structures;
+ }
+
+ protected override StabilityPointStructuresCalculationConfigurationReader CreateCalculationConfigurationReader(
+ string xmlFilePath)
+ {
+ return new StabilityPointStructuresCalculationConfigurationReader(xmlFilePath);
+ }
+
+ protected override ICalculation ParseReadCalculation(StabilityPointStructuresCalculationConfiguration readCalculation)
+ {
+ var calculation = new StructuresCalculation
+ {
+ Name = readCalculation.Name
+ };
+
+ if (TrySetStructure(readCalculation.StructureName, calculation)
+ && TrySetHydraulicBoundaryLocation(readCalculation.HydraulicBoundaryLocationName, calculation)
+ && TrySetForeshoreProfile(readCalculation.ForeshoreProfileName, calculation)
+ && TryReadFailureProbabilityRepairClosure(readCalculation, calculation)
+ && TryReadStochasts(readCalculation, calculation)
+ && TryReadOrientation(readCalculation, calculation)
+ && TryReadFailureProbabilityStructureWithErosion(readCalculation, calculation)
+ && TryReadInflowModelType(readCalculation, calculation)
+ && readCalculation.WaveReduction.ValidateWaveReduction(calculation.InputParameters.ForeshoreProfile, calculation.Name, Log))
+ {
+ ReadFactorStormDurationOpenStructure(readCalculation, calculation);
+ ReadWaveReductionParameters(readCalculation.WaveReduction, calculation.InputParameters);
+ return calculation;
+ }
+ return null;
+ }
+
+ private bool TryReadStochasts(StabilityPointStructuresCalculationConfiguration readCalculation, StructuresCalculation calculation)
+ {
+ if (!readCalculation.ValidateStructureBaseStochasts(Log))
+ {
+ return false;
+ }
+ if (!ValidateStochasts(readCalculation))
+ {
+ return false;
+ }
+
+ return TryReadStandardDeviationStochast(
+ ConfigurationSchemaIdentifiers.AllowedLevelIncreaseStorageStochastName,
+ calculation.Name,
+ calculation.InputParameters,
+ readCalculation.AllowedLevelIncreaseStorage,
+ i => i.AllowedLevelIncreaseStorage, (i, d) => i.AllowedLevelIncreaseStorage = d)
+ && TryReadStandardDeviationStochast(
+ ConfigurationSchemaIdentifiers.FlowWidthAtBottomProtectionStochastName,
+ calculation.Name,
+ calculation.InputParameters,
+ readCalculation.FlowWidthAtBottomProtection,
+ i => i.FlowWidthAtBottomProtection, (i, d) => i.FlowWidthAtBottomProtection = d)
+ && TryReadStandardDeviationStochast(
+ ConfigurationSchemaIdentifiers.ModelFactorSuperCriticalFlowStochastName,
+ calculation.Name,
+ calculation.InputParameters,
+ readCalculation.ModelFactorSuperCriticalFlow,
+ i => i.ModelFactorSuperCriticalFlow, (i, d) => i.ModelFactorSuperCriticalFlow = d)
+ && TryReadStandardDeviationStochast(
+ ConfigurationSchemaIdentifiers.WidthFlowAperturesStochastName,
+ calculation.Name,
+ calculation.InputParameters,
+ readCalculation.WidthFlowApertures, i => i.WidthFlowApertures, (i, d) => i.WidthFlowApertures = d)
+ && TryReadVariationCoefficientStochast(
+ ConfigurationSchemaIdentifiers.CriticalOvertoppingDischargeStochastName,
+ calculation.Name,
+ calculation.InputParameters,
+ readCalculation.CriticalOvertoppingDischarge,
+ i => i.CriticalOvertoppingDischarge, (i, d) => i.CriticalOvertoppingDischarge = d)
+ && TryReadVariationCoefficientStochast(
+ ConfigurationSchemaIdentifiers.StorageStructureAreaStochastName,
+ calculation.Name,
+ calculation.InputParameters,
+ readCalculation.StorageStructureArea,
+ i => i.StorageStructureArea, (i, d) => i.StorageStructureArea = d)
+ && TryReadVariationCoefficientStochast(
+ ConfigurationSchemaIdentifiers.StormDurationStochastName,
+ calculation.Name,
+ calculation.InputParameters,
+ readCalculation.StormDuration,
+ i => i.StormDuration, (i, d) => i.StormDuration = d);
+ }
+
+ private bool ValidateStochasts(StabilityPointStructuresCalculationConfiguration configuration)
+ {
+ if (configuration.DrainCoefficient?.StandardDeviation != null
+ || configuration.DrainCoefficient?.VariationCoefficient != null)
+ {
+ Log.LogCalculationConversionError("Er kan geen spreiding voor stochast 'afvoercoefficient' opgegeven worden.",
+ configuration.Name);
+ return false;
+ }
+ return true;
+ }
+
+ ///
+ /// Reads the orientation.
+ ///
+ /// The calculation read from the imported file.
+ /// The calculation to configure.
+ /// false when the orientation is invalid or when there is an orientation but
+ /// no structure defined, true otherwise.
+ private bool TryReadOrientation(StructuresCalculationConfiguration readCalculation, StructuresCalculation calculation)
+ {
+ if (!readCalculation.StructureNormalOrientation.HasValue)
+ {
+ return true;
+ }
+
+ if (calculation.InputParameters.Structure == null)
+ {
+ Log.LogCalculationConversionError(string.Format(RingtoetsCommonIOResources.CalculationConfigurationImporter_TryParameter_No_Structure_to_assign_Parameter_0_,
+ RingtoetsCommonIOResources.CalculationConfigurationImporter_Orientation_DisplayName),
+ calculation.Name);
+
+ return false;
+ }
+
+ double orientation = readCalculation.StructureNormalOrientation.Value;
+
+ try
+ {
+ calculation.InputParameters.StructureNormalOrientation = (RoundedDouble) orientation;
+ }
+ catch (ArgumentOutOfRangeException e)
+ {
+ Log.LogOutOfRangeException(string.Format(RingtoetsCommonIOResources.TryReadParameter_Value_0_ParameterName_1_is_invalid,
+ orientation,
+ RingtoetsCommonIOResources.CalculationConfigurationImporter_Orientation_DisplayName),
+ calculation.Name,
+ e);
+
+ return false;
+ }
+
+ return true;
+ }
+
+ private bool TryReadFailureProbabilityRepairClosure(StabilityPointStructuresCalculationConfiguration readCalculation,
+ StructuresCalculation calculation)
+ {
+ if (!readCalculation.FailureProbabilityRepairClosure.HasValue)
+ {
+ return true;
+ }
+
+ if (calculation.InputParameters.Structure == null)
+ {
+ Log.LogCalculationConversionError(string.Format(RingtoetsCommonIOResources.CalculationConfigurationImporter_TryParameter_No_Structure_to_assign_Parameter_0_,
+ Resources.CalculationConfigurationImporter_FailureProbabilityRepairClosure_DisplayName),
+ calculation.Name);
+
+ return false;
+ }
+
+ double failureProbabilityRepairClosure = readCalculation.FailureProbabilityRepairClosure.Value;
+
+ try
+ {
+ calculation.InputParameters.FailureProbabilityRepairClosure = (RoundedDouble) failureProbabilityRepairClosure;
+ }
+ catch (ArgumentOutOfRangeException e)
+ {
+ Log.LogOutOfRangeException(string.Format(RingtoetsCommonIOResources.TryReadParameter_Value_0_ParameterName_1_is_invalid,
+ failureProbabilityRepairClosure,
+ Resources.CalculationConfigurationImporter_FailureProbabilityRepairClosure_DisplayName),
+ calculation.Name,
+ e);
+
+ return false;
+ }
+
+ return true;
+ }
+
+ ///
+ /// Reads the failure probability structure with erosion.
+ ///
+ /// The calculation read from the imported file.
+ /// The calculation to configure.
+ /// false when the orientation is invalid or when there is a failure probability
+ /// structure with erosion but no structure defined, true otherwise.
+ private bool TryReadFailureProbabilityStructureWithErosion(StructuresCalculationConfiguration readCalculation, StructuresCalculation calculation)
+ {
+ if (readCalculation.FailureProbabilityStructureWithErosion.HasValue)
+ {
+ double failureProbability = readCalculation.FailureProbabilityStructureWithErosion.Value;
+
+ try
+ {
+ calculation.InputParameters.FailureProbabilityStructureWithErosion = (RoundedDouble) failureProbability;
+ }
+ catch (ArgumentOutOfRangeException e)
+ {
+ Log.LogOutOfRangeException(string.Format(
+ RingtoetsCommonIOResources.TryReadParameter_Value_0_ParameterName_1_is_invalid,
+ failureProbability,
+ RingtoetsCommonIOResources.CalculationConfigurationImporter_FailureProbabilityStructureWithErosion_DisplayName),
+ calculation.Name,
+ e);
+
+ return false;
+ }
+ }
+
+ return true;
+ }
+
+ ///
+ /// Reads the factor storm duration.
+ ///
+ /// The calculation read from the imported file.
+ /// The calculation to configure.
+ private void ReadFactorStormDurationOpenStructure(StabilityPointStructuresCalculationConfiguration readCalculation, StructuresCalculation calculation)
+ {
+ if (readCalculation.FactorStormDurationOpenStructure.HasValue)
+ {
+ calculation.InputParameters.FactorStormDurationOpenStructure = (RoundedDouble) readCalculation.FactorStormDurationOpenStructure.Value;
+ }
+ }
+
+ ///
+ /// Reads the inflow model type.
+ ///
+ /// The calculation read from the imported file.
+ /// The calculation to configure.
+ /// false when the inflow model type is invalid or when there is a
+ /// inflow model type but no structure defined, true otherwise.
+ private bool TryReadInflowModelType(StabilityPointStructuresCalculationConfiguration readCalculation, StructuresCalculation calculation)
+ {
+ if (readCalculation.InflowModelType.HasValue)
+ {
+ if (calculation.InputParameters.Structure == null)
+ {
+ Log.LogCalculationConversionError(string.Format(RingtoetsCommonIOResources.CalculationConfigurationImporter_TryParameter_No_Structure_to_assign_Parameter_0_,
+ RingtoetsCommonIOResources.CalculationConfigurationImporter_InflowModelType_DisplayName),
+ calculation.Name);
+
+ return false;
+ }
+
+ calculation.InputParameters.InflowModelType = (StabilityPointStructureInflowModelType)
+ new ConfigurationStabilityPointStructuresInflowModelTypeConverter()
+ .ConvertTo(readCalculation.InflowModelType.Value, typeof(StabilityPointStructureInflowModelType));
+ }
+
+ return true;
+ }
+
+ private bool TrySetHydraulicBoundaryLocation(string locationName, StructuresCalculation calculation)
+ {
+ HydraulicBoundaryLocation location;
+
+ if (TryReadHydraulicBoundaryLocation(locationName, calculation.Name, availableHydraulicBoundaryLocations, out location))
+ {
+ calculation.InputParameters.HydraulicBoundaryLocation = location;
+ return true;
+ }
+
+ return false;
+ }
+
+ private bool TrySetStructure(string structureName, StructuresCalculation calculation)
+ {
+ StabilityPointStructure structure;
+
+ if (TryReadStructure(structureName, calculation.Name, availableStructures, out structure))
+ {
+ calculation.InputParameters.Structure = structure;
+ return true;
+ }
+
+ return false;
+ }
+
+ private bool TrySetForeshoreProfile(string foreshoreProfileName, StructuresCalculation calculation)
+ {
+ ForeshoreProfile foreshoreProfile;
+
+ if (TryReadForeshoreProfile(foreshoreProfileName, calculation.Name, availableForeshoreProfiles, out foreshoreProfile))
+ {
+ calculation.InputParameters.ForeshoreProfile = foreshoreProfile;
+ return true;
+ }
+
+ return false;
+ }
+ }
+}
\ No newline at end of file
Index: Ringtoets/StabilityPointStructures/src/Ringtoets.StabilityPointStructures.IO/Properties/Resources.Designer.cs
===================================================================
diff -u -rff3bf86946b3c76d494d5ca885464e4afb617788 -r3ca074d78bf75ff67c19539c04be91196a0659b0
--- Ringtoets/StabilityPointStructures/src/Ringtoets.StabilityPointStructures.IO/Properties/Resources.Designer.cs (.../Resources.Designer.cs) (revision ff3bf86946b3c76d494d5ca885464e4afb617788)
+++ Ringtoets/StabilityPointStructures/src/Ringtoets.StabilityPointStructures.IO/Properties/Resources.Designer.cs (.../Resources.Designer.cs) (revision 3ca074d78bf75ff67c19539c04be91196a0659b0)
@@ -82,6 +82,15 @@
}
///
+ /// Looks up a localized string similar to faalkans herstel van gefaalde situatie.
+ ///
+ internal static string CalculationConfigurationImporter_FailureProbabilityRepairClosure_DisplayName {
+ get {
+ return ResourceManager.GetString("CalculationConfigurationImporter_FailureProbabilityRepairClosure_DisplayName", resourceCulture);
+ }
+ }
+
+ ///
/// Looks up a localized string similar to <?xml version="1.0" encoding="UTF-8"?>
///<!--
///Copyright (C) Stichting Deltares 2016. All rights reserved.
Index: Ringtoets/StabilityPointStructures/src/Ringtoets.StabilityPointStructures.IO/Properties/Resources.resx
===================================================================
diff -u -rff3bf86946b3c76d494d5ca885464e4afb617788 -r3ca074d78bf75ff67c19539c04be91196a0659b0
--- Ringtoets/StabilityPointStructures/src/Ringtoets.StabilityPointStructures.IO/Properties/Resources.resx (.../Resources.resx) (revision ff3bf86946b3c76d494d5ca885464e4afb617788)
+++ Ringtoets/StabilityPointStructures/src/Ringtoets.StabilityPointStructures.IO/Properties/Resources.resx (.../Resources.resx) (revision 3ca074d78bf75ff67c19539c04be91196a0659b0)
@@ -117,6 +117,9 @@
System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+ faalkans herstel van gefaalde situatie
+
..\Resources\KunstwerkenConstructiefFalenSchema.xsd;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;Windows-1252
Index: Ringtoets/StabilityPointStructures/src/Ringtoets.StabilityPointStructures.IO/Ringtoets.StabilityPointStructures.IO.csproj
===================================================================
diff -u -r48eac104ea815699b299e93b512b6498e8cb92ec -r3ca074d78bf75ff67c19539c04be91196a0659b0
--- Ringtoets/StabilityPointStructures/src/Ringtoets.StabilityPointStructures.IO/Ringtoets.StabilityPointStructures.IO.csproj (.../Ringtoets.StabilityPointStructures.IO.csproj) (revision 48eac104ea815699b299e93b512b6498e8cb92ec)
+++ Ringtoets/StabilityPointStructures/src/Ringtoets.StabilityPointStructures.IO/Ringtoets.StabilityPointStructures.IO.csproj (.../Ringtoets.StabilityPointStructures.IO.csproj) (revision 3ca074d78bf75ff67c19539c04be91196a0659b0)
@@ -50,6 +50,7 @@
+
True
True
Index: Ringtoets/StabilityPointStructures/test/Ringtoets.StabilityPointStructures.IO.Test/Configurations/StabilityPointStructuresCalculationConfigurationImporterTest.cs
===================================================================
diff -u
--- Ringtoets/StabilityPointStructures/test/Ringtoets.StabilityPointStructures.IO.Test/Configurations/StabilityPointStructuresCalculationConfigurationImporterTest.cs (revision 0)
+++ Ringtoets/StabilityPointStructures/test/Ringtoets.StabilityPointStructures.IO.Test/Configurations/StabilityPointStructuresCalculationConfigurationImporterTest.cs (revision 3ca074d78bf75ff67c19539c04be91196a0659b0)
@@ -0,0 +1,274 @@
+// Copyright (C) Stichting Deltares 2016. All rights reserved.
+//
+// This file is part of Ringtoets.
+//
+// Ringtoets is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this program. If not, see .
+//
+// All names, logos, and references to "Deltares" are registered trademarks of
+// Stichting Deltares and remain full property of Stichting Deltares at all times.
+// All rights reserved.
+
+using System;
+using System.Collections.Generic;
+using System.IO;
+using System.Linq;
+using Core.Common.TestUtil;
+using NUnit.Framework;
+using Ringtoets.Common.Data.Calculation;
+using Ringtoets.Common.Data.DikeProfiles;
+using Ringtoets.Common.Data.Hydraulics;
+using Ringtoets.Common.Data.Structures;
+using Ringtoets.Common.Data.TestUtil;
+using Ringtoets.Common.IO.Configurations.Import;
+using Ringtoets.StabilityPointStructures.Data;
+using Ringtoets.StabilityPointStructures.Data.TestUtil;
+using Ringtoets.StabilityPointStructures.IO.Configurations;
+
+namespace Ringtoets.StabilityPointStructures.IO.Test.Configurations
+{
+ [TestFixture]
+ public class StabilityPointStructuresCalculationConfigurationImporterTest
+ {
+ private readonly string importerPath = TestHelper.GetTestDataPath(TestDataPath.Ringtoets.StabilityPointStructures.IO,
+ nameof(StabilityPointStructuresCalculationConfigurationImporter));
+
+ private static IEnumerable ValidConfigurationInvalidData
+ {
+ get
+ {
+ yield return new TestCaseData(
+ "validConfigurationInvalidFailureProbabilityStructureErosion.xml",
+ "Een waarde van '1,1' als faalkans gegeven erosie bodem is ongeldig. De waarde voor de faalkans moet in het bereik [0,0, 1,0] liggen.");
+ yield return new TestCaseData(
+ "validConfigurationInvalidFailureProbabilityRepairClosureElement.xml",
+ "Een waarde van '1,1' als faalkans herstel van gefaalde situatie is ongeldig. De waarde voor de faalkans moet in het bereik [0,0, 1,0] liggen.");
+ }
+ }
+
+ [Test]
+ public void Constructor_ExpectedValues()
+ {
+ // Call
+ var importer = new StabilityPointStructuresCalculationConfigurationImporter("",
+ new CalculationGroup(),
+ Enumerable.Empty(),
+ Enumerable.Empty(),
+ Enumerable.Empty());
+
+ // Assert
+ Assert.IsInstanceOf>(importer);
+ }
+
+ [Test]
+ public void Constructor_HydraulicBoundaryLocationsNull_ThrowArgumentNullException()
+ {
+ // Call
+ TestDelegate test = () => new StabilityPointStructuresCalculationConfigurationImporter("",
+ new CalculationGroup(),
+ null,
+ Enumerable.Empty(),
+ Enumerable.Empty());
+
+ // Assert
+ var exception = Assert.Throws(test);
+ Assert.AreEqual("hydraulicBoundaryLocations", exception.ParamName);
+ }
+
+ [Test]
+ public void Constructor_ForeshoreProfilesNull_ThrowArgumentNullException()
+ {
+ // Call
+ TestDelegate test = () => new StabilityPointStructuresCalculationConfigurationImporter("",
+ new CalculationGroup(),
+ Enumerable.Empty(),
+ null,
+ Enumerable.Empty());
+
+ // Assert
+ var exception = Assert.Throws(test);
+ Assert.AreEqual("foreshoreProfiles", exception.ParamName);
+ }
+
+ [Test]
+ public void Constructor_StructuresNull_ThrowArgumentNullException()
+ {
+ // Call
+ TestDelegate test = () => new StabilityPointStructuresCalculationConfigurationImporter("",
+ new CalculationGroup(),
+ Enumerable.Empty(),
+ Enumerable.Empty(),
+ null);
+
+ // Assert
+ var exception = Assert.Throws(test);
+ Assert.AreEqual("structures", exception.ParamName);
+ }
+
+ [Test]
+ [SetCulture("nl-NL")]
+ [TestCaseSource(nameof(ValidConfigurationInvalidData))]
+ public void Import_ValidConfigurationInvalidData_LogMessageAndContinueImport(string file, string expectedErrorMessage)
+ {
+ // Setup
+ string filePath = Path.Combine(importerPath, file);
+
+ var calculationGroup = new CalculationGroup();
+ var structure = new TestStabilityPointStructure("kunstwerk1");
+ var foreshoreProfile = new TestForeshoreProfile("profiel 1");
+
+ var importer = new StabilityPointStructuresCalculationConfigurationImporter(filePath,
+ calculationGroup,
+ Enumerable.Empty(),
+ new ForeshoreProfile[]
+ {
+ foreshoreProfile
+ },
+ new StabilityPointStructure[]
+ {
+ structure
+ });
+ var successful = false;
+
+ // Call
+ Action call = () => successful = importer.Import();
+
+ // Assert
+ string expectedMessage = $"{expectedErrorMessage} Berekening 'Berekening 1' is overgeslagen.";
+ TestHelper.AssertLogMessageWithLevelIsGenerated(call, Tuple.Create(expectedMessage, LogLevelConstant.Error), 1);
+ Assert.IsTrue(successful);
+ CollectionAssert.IsEmpty(calculationGroup.Children);
+ }
+
+ [Test]
+ [TestCase("validConfigurationEmptyCalculation.xml")]
+ [TestCase("validConfigurationEmptyStochasts.xml")]
+ [TestCase("validConfigurationEmptyStochastElements.xml")]
+ [TestCase("validConfigurationEmptyWaveReduction.xml")]
+ public void Import_EmptyConfigurations_DataAddedToModel(string file)
+ {
+ // Setup
+ string filePath = Path.Combine(importerPath, file);
+
+ var calculationGroup = new CalculationGroup();
+ var structure = new TestStabilityPointStructure("kunstwerk1");
+ var importer = new StabilityPointStructuresCalculationConfigurationImporter(
+ filePath,
+ calculationGroup,
+ Enumerable.Empty(),
+ Enumerable.Empty(),
+ new[]
+ {
+ structure
+ });
+
+ var expectedCalculation = new StructuresCalculation
+ {
+ Name = "Berekening 1"
+ };
+
+ // Call
+ bool successful = importer.Import();
+
+ // Assert
+ Assert.IsTrue(successful);
+ Assert.AreEqual(1, calculationGroup.Children.Count);
+ AssertCalculation(expectedCalculation, (StructuresCalculation) calculationGroup.Children[0]);
+ }
+
+ [TestCase("validConfigurationUnknownForeshoreProfile.xml",
+ "Het voorlandprofiel 'unknown' bestaat niet.")]
+ [TestCase("validConfigurationUnknownHydraulicBoundaryLocation.xml",
+ "De locatie met hydraulische randvoorwaarden 'unknown' bestaat niet.")]
+ [TestCase("validConfigurationUnknownStructure.xml",
+ "Het kunstwerk 'unknown' bestaat niet.")]
+ public void Import_ValidConfigurationUnknownData_LogMessageAndContinueImport(string file, string expectedErrorMessage)
+ {
+ // Setup
+ string filePath = Path.Combine(importerPath, file);
+
+ var calculationGroup = new CalculationGroup();
+
+ var importer = new StabilityPointStructuresCalculationConfigurationImporter(filePath,
+ calculationGroup,
+ Enumerable.Empty(),
+ Enumerable.Empty(),
+ Enumerable.Empty());
+ var successful = false;
+
+ // Call
+ Action call = () => successful = importer.Import();
+
+ // Assert
+ string expectedMessage = $"{expectedErrorMessage} Berekening 'Berekening 1' is overgeslagen.";
+ TestHelper.AssertLogMessageWithLevelIsGenerated(call, Tuple.Create(expectedMessage, LogLevelConstant.Error), 1);
+ Assert.IsTrue(successful);
+ CollectionAssert.IsEmpty(calculationGroup.Children);
+ }
+
+ private static void AssertCalculation(StructuresCalculation expectedCalculation,
+ StructuresCalculation actualCalculation)
+ {
+ Assert.AreEqual(expectedCalculation.Name, actualCalculation.Name);
+ Assert.AreEqual(expectedCalculation.InputParameters.BreakWater.Height, actualCalculation.InputParameters.BreakWater.Height);
+ Assert.AreEqual(expectedCalculation.InputParameters.BreakWater.Type, actualCalculation.InputParameters.BreakWater.Type);
+ Assert.AreEqual(expectedCalculation.InputParameters.EvaluationLevel, actualCalculation.InputParameters.EvaluationLevel);
+
+ Assert.AreEqual(expectedCalculation.InputParameters.FactorStormDurationOpenStructure, actualCalculation.InputParameters.FactorStormDurationOpenStructure);
+ Assert.AreEqual(expectedCalculation.InputParameters.FailureProbabilityRepairClosure, actualCalculation.InputParameters.FailureProbabilityRepairClosure);
+ Assert.AreEqual(expectedCalculation.InputParameters.FailureProbabilityStructureWithErosion, actualCalculation.InputParameters.FailureProbabilityStructureWithErosion);
+ Assert.AreSame(expectedCalculation.InputParameters.ForeshoreProfile, actualCalculation.InputParameters.ForeshoreProfile);
+
+ Assert.AreEqual(expectedCalculation.InputParameters.InflowModelType, actualCalculation.InputParameters.InflowModelType);
+ Assert.AreEqual(expectedCalculation.InputParameters.LevellingCount, actualCalculation.InputParameters.LevellingCount);
+ Assert.AreEqual(expectedCalculation.InputParameters.LoadSchematizationType, actualCalculation.InputParameters.LoadSchematizationType);
+ Assert.AreEqual(expectedCalculation.InputParameters.ProbabilityCollisionSecondaryStructure, actualCalculation.InputParameters.ProbabilityCollisionSecondaryStructure);
+
+ Assert.AreSame(expectedCalculation.InputParameters.Structure, actualCalculation.InputParameters.Structure);
+ Assert.AreEqual(expectedCalculation.InputParameters.StructureNormalOrientation, actualCalculation.InputParameters.StructureNormalOrientation);
+ Assert.AreEqual(expectedCalculation.InputParameters.UseForeshore, actualCalculation.InputParameters.UseForeshore);
+ Assert.AreEqual(expectedCalculation.InputParameters.UseBreakWater, actualCalculation.InputParameters.UseBreakWater);
+
+ Assert.AreEqual(expectedCalculation.InputParameters.VerticalDistance, actualCalculation.InputParameters.VerticalDistance);
+ Assert.AreEqual(expectedCalculation.InputParameters.VolumicWeightWater, actualCalculation.InputParameters.VolumicWeightWater);
+ DistributionAssert.AreEqual(expectedCalculation.InputParameters.AllowedLevelIncreaseStorage, actualCalculation.InputParameters.AllowedLevelIncreaseStorage);
+ DistributionAssert.AreEqual(expectedCalculation.InputParameters.AreaFlowApertures, actualCalculation.InputParameters.AreaFlowApertures);
+
+ DistributionAssert.AreEqual(expectedCalculation.InputParameters.BankWidth, actualCalculation.InputParameters.BankWidth);
+ DistributionAssert.AreEqual(expectedCalculation.InputParameters.ConstructiveStrengthLinearLoadModel, actualCalculation.InputParameters.ConstructiveStrengthLinearLoadModel);
+ DistributionAssert.AreEqual(expectedCalculation.InputParameters.ConstructiveStrengthQuadraticLoadModel, actualCalculation.InputParameters.ConstructiveStrengthQuadraticLoadModel);
+ DistributionAssert.AreEqual(expectedCalculation.InputParameters.CriticalOvertoppingDischarge, actualCalculation.InputParameters.CriticalOvertoppingDischarge);
+
+ DistributionAssert.AreEqual(expectedCalculation.InputParameters.DrainCoefficient, actualCalculation.InputParameters.DrainCoefficient);
+ DistributionAssert.AreEqual(expectedCalculation.InputParameters.FailureCollisionEnergy, actualCalculation.InputParameters.FailureCollisionEnergy);
+ DistributionAssert.AreEqual(expectedCalculation.InputParameters.FlowVelocityStructureClosable, actualCalculation.InputParameters.FlowVelocityStructureClosable);
+ DistributionAssert.AreEqual(expectedCalculation.InputParameters.FlowWidthAtBottomProtection, actualCalculation.InputParameters.FlowWidthAtBottomProtection);
+
+ DistributionAssert.AreEqual(expectedCalculation.InputParameters.InsideWaterLevel, actualCalculation.InputParameters.InsideWaterLevel);
+ DistributionAssert.AreEqual(expectedCalculation.InputParameters.InsideWaterLevelFailureConstruction, actualCalculation.InputParameters.InsideWaterLevelFailureConstruction);
+ DistributionAssert.AreEqual(expectedCalculation.InputParameters.LevelCrestStructure, actualCalculation.InputParameters.LevelCrestStructure);
+ DistributionAssert.AreEqual(expectedCalculation.InputParameters.ModelFactorSuperCriticalFlow, actualCalculation.InputParameters.ModelFactorSuperCriticalFlow);
+
+ DistributionAssert.AreEqual(expectedCalculation.InputParameters.ShipMass, actualCalculation.InputParameters.ShipMass);
+ DistributionAssert.AreEqual(expectedCalculation.InputParameters.ShipVelocity, actualCalculation.InputParameters.ShipVelocity);
+ DistributionAssert.AreEqual(expectedCalculation.InputParameters.StabilityLinearLoadModel, actualCalculation.InputParameters.StabilityLinearLoadModel);
+ DistributionAssert.AreEqual(expectedCalculation.InputParameters.StabilityQuadraticLoadModel, actualCalculation.InputParameters.StabilityQuadraticLoadModel);
+
+ DistributionAssert.AreEqual(expectedCalculation.InputParameters.StorageStructureArea, actualCalculation.InputParameters.StorageStructureArea);
+ DistributionAssert.AreEqual(expectedCalculation.InputParameters.StormDuration, actualCalculation.InputParameters.StormDuration);
+ DistributionAssert.AreEqual(expectedCalculation.InputParameters.WidthFlowApertures, actualCalculation.InputParameters.WidthFlowApertures);
+ DistributionAssert.AreEqual(expectedCalculation.InputParameters.ThresholdHeightOpenWeir, actualCalculation.InputParameters.ThresholdHeightOpenWeir);
+ }
+ }
+}
\ No newline at end of file
Index: Ringtoets/StabilityPointStructures/test/Ringtoets.StabilityPointStructures.IO.Test/Ringtoets.StabilityPointStructures.IO.Test.csproj
===================================================================
diff -u -r48eac104ea815699b299e93b512b6498e8cb92ec -r3ca074d78bf75ff67c19539c04be91196a0659b0
--- Ringtoets/StabilityPointStructures/test/Ringtoets.StabilityPointStructures.IO.Test/Ringtoets.StabilityPointStructures.IO.Test.csproj (.../Ringtoets.StabilityPointStructures.IO.Test.csproj) (revision 48eac104ea815699b299e93b512b6498e8cb92ec)
+++ Ringtoets/StabilityPointStructures/test/Ringtoets.StabilityPointStructures.IO.Test/Ringtoets.StabilityPointStructures.IO.Test.csproj (.../Ringtoets.StabilityPointStructures.IO.Test.csproj) (revision 3ca074d78bf75ff67c19539c04be91196a0659b0)
@@ -51,6 +51,7 @@
+
Index: Ringtoets/StabilityPointStructures/test/Ringtoets.StabilityPointStructures.IO.Test/test-data/StabilityPointStructuresCalculationConfigurationImporter/validConfigurationEmptyCalculation.xml
===================================================================
diff -u
--- Ringtoets/StabilityPointStructures/test/Ringtoets.StabilityPointStructures.IO.Test/test-data/StabilityPointStructuresCalculationConfigurationImporter/validConfigurationEmptyCalculation.xml (revision 0)
+++ Ringtoets/StabilityPointStructures/test/Ringtoets.StabilityPointStructures.IO.Test/test-data/StabilityPointStructuresCalculationConfigurationImporter/validConfigurationEmptyCalculation.xml (revision 3ca074d78bf75ff67c19539c04be91196a0659b0)
@@ -0,0 +1,4 @@
+
+
+
+
Index: Ringtoets/StabilityPointStructures/test/Ringtoets.StabilityPointStructures.IO.Test/test-data/StabilityPointStructuresCalculationConfigurationImporter/validConfigurationEmptyStochastElements.xml
===================================================================
diff -u
--- Ringtoets/StabilityPointStructures/test/Ringtoets.StabilityPointStructures.IO.Test/test-data/StabilityPointStructuresCalculationConfigurationImporter/validConfigurationEmptyStochastElements.xml (revision 0)
+++ Ringtoets/StabilityPointStructures/test/Ringtoets.StabilityPointStructures.IO.Test/test-data/StabilityPointStructuresCalculationConfigurationImporter/validConfigurationEmptyStochastElements.xml (revision 3ca074d78bf75ff67c19539c04be91196a0659b0)
@@ -0,0 +1,29 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
Index: Ringtoets/StabilityPointStructures/test/Ringtoets.StabilityPointStructures.IO.Test/test-data/StabilityPointStructuresCalculationConfigurationImporter/validConfigurationEmptyStochasts.xml
===================================================================
diff -u
--- Ringtoets/StabilityPointStructures/test/Ringtoets.StabilityPointStructures.IO.Test/test-data/StabilityPointStructuresCalculationConfigurationImporter/validConfigurationEmptyStochasts.xml (revision 0)
+++ Ringtoets/StabilityPointStructures/test/Ringtoets.StabilityPointStructures.IO.Test/test-data/StabilityPointStructuresCalculationConfigurationImporter/validConfigurationEmptyStochasts.xml (revision 3ca074d78bf75ff67c19539c04be91196a0659b0)
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
Index: Ringtoets/StabilityPointStructures/test/Ringtoets.StabilityPointStructures.IO.Test/test-data/StabilityPointStructuresCalculationConfigurationImporter/validConfigurationEmptyWaveReduction.xml
===================================================================
diff -u
--- Ringtoets/StabilityPointStructures/test/Ringtoets.StabilityPointStructures.IO.Test/test-data/StabilityPointStructuresCalculationConfigurationImporter/validConfigurationEmptyWaveReduction.xml (revision 0)
+++ Ringtoets/StabilityPointStructures/test/Ringtoets.StabilityPointStructures.IO.Test/test-data/StabilityPointStructuresCalculationConfigurationImporter/validConfigurationEmptyWaveReduction.xml (revision 3ca074d78bf75ff67c19539c04be91196a0659b0)
@@ -0,0 +1,6 @@
+
+
+
+
+
+
Index: Ringtoets/StabilityPointStructures/test/Ringtoets.StabilityPointStructures.IO.Test/test-data/StabilityPointStructuresCalculationConfigurationImporter/validConfigurationInvalidFailureProbabilityRepairClosureElement.xml
===================================================================
diff -u
--- Ringtoets/StabilityPointStructures/test/Ringtoets.StabilityPointStructures.IO.Test/test-data/StabilityPointStructuresCalculationConfigurationImporter/validConfigurationInvalidFailureProbabilityRepairClosureElement.xml (revision 0)
+++ Ringtoets/StabilityPointStructures/test/Ringtoets.StabilityPointStructures.IO.Test/test-data/StabilityPointStructuresCalculationConfigurationImporter/validConfigurationInvalidFailureProbabilityRepairClosureElement.xml (revision 3ca074d78bf75ff67c19539c04be91196a0659b0)
@@ -0,0 +1,7 @@
+
+
+
+ kunstwerk1
+ 1.1
+
+
Index: Ringtoets/StabilityPointStructures/test/Ringtoets.StabilityPointStructures.IO.Test/test-data/StabilityPointStructuresCalculationConfigurationImporter/validConfigurationInvalidFailureProbabilityStructureErosion.xml
===================================================================
diff -u
--- Ringtoets/StabilityPointStructures/test/Ringtoets.StabilityPointStructures.IO.Test/test-data/StabilityPointStructuresCalculationConfigurationImporter/validConfigurationInvalidFailureProbabilityStructureErosion.xml (revision 0)
+++ Ringtoets/StabilityPointStructures/test/Ringtoets.StabilityPointStructures.IO.Test/test-data/StabilityPointStructuresCalculationConfigurationImporter/validConfigurationInvalidFailureProbabilityStructureErosion.xml (revision 3ca074d78bf75ff67c19539c04be91196a0659b0)
@@ -0,0 +1,7 @@
+
+
+
+ kunstwerk1
+ 1.1
+
+
Index: Ringtoets/StabilityPointStructures/test/Ringtoets.StabilityPointStructures.IO.Test/test-data/StabilityPointStructuresCalculationConfigurationImporter/validConfigurationStochastStandardDeviationVariationCoefficientOnly.xml
===================================================================
diff -u
--- Ringtoets/StabilityPointStructures/test/Ringtoets.StabilityPointStructures.IO.Test/test-data/StabilityPointStructuresCalculationConfigurationImporter/validConfigurationStochastStandardDeviationVariationCoefficientOnly.xml (revision 0)
+++ Ringtoets/StabilityPointStructures/test/Ringtoets.StabilityPointStructures.IO.Test/test-data/StabilityPointStructuresCalculationConfigurationImporter/validConfigurationStochastStandardDeviationVariationCoefficientOnly.xml (revision 3ca074d78bf75ff67c19539c04be91196a0659b0)
@@ -0,0 +1,93 @@
+
+
+
+ kunstwerk1
+
+
+
+ 0.5
+ 0.1
+
+
+ 0.7
+ 0.1
+
+
+ 0.1
+ 0.12
+
+
+ 0.1
+ 0.12
+
+
+ 15.2
+ 0.1
+
+
+ 80.5
+ 1
+
+
+ 15.2
+ 0.1
+
+
+ 15000
+ 0.01
+
+
+ 0.2
+ 0.01
+
+
+ 4.3
+ 0.1
+
+
+ 1.2
+ 0.1
+
+
+ 2
+ 0.1
+
+
+ 1.1
+ 0.12
+
+
+ 2
+ 0.1
+
+
+ 2
+ 0.1
+
+
+ 1.2
+ 0.1
+
+
+ 1.2
+ 0.1
+
+
+ 16000
+ 0.1
+
+
+ 1.2
+ 0.1
+
+
+ 1.2
+ 0.1
+
+
+ 1.2
+ 0.1
+
+
+
+
\ No newline at end of file
Index: Ringtoets/StabilityPointStructures/test/Ringtoets.StabilityPointStructures.IO.Test/test-data/StabilityPointStructuresCalculationConfigurationImporter/validConfigurationUnknownForeshoreProfile.xml
===================================================================
diff -u
--- Ringtoets/StabilityPointStructures/test/Ringtoets.StabilityPointStructures.IO.Test/test-data/StabilityPointStructuresCalculationConfigurationImporter/validConfigurationUnknownForeshoreProfile.xml (revision 0)
+++ Ringtoets/StabilityPointStructures/test/Ringtoets.StabilityPointStructures.IO.Test/test-data/StabilityPointStructuresCalculationConfigurationImporter/validConfigurationUnknownForeshoreProfile.xml (revision 3ca074d78bf75ff67c19539c04be91196a0659b0)
@@ -0,0 +1,6 @@
+
+
+
+ unknown
+
+
Index: Ringtoets/StabilityPointStructures/test/Ringtoets.StabilityPointStructures.IO.Test/test-data/StabilityPointStructuresCalculationConfigurationImporter/validConfigurationUnknownHydraulicBoundaryLocation.xml
===================================================================
diff -u
--- Ringtoets/StabilityPointStructures/test/Ringtoets.StabilityPointStructures.IO.Test/test-data/StabilityPointStructuresCalculationConfigurationImporter/validConfigurationUnknownHydraulicBoundaryLocation.xml (revision 0)
+++ Ringtoets/StabilityPointStructures/test/Ringtoets.StabilityPointStructures.IO.Test/test-data/StabilityPointStructuresCalculationConfigurationImporter/validConfigurationUnknownHydraulicBoundaryLocation.xml (revision 3ca074d78bf75ff67c19539c04be91196a0659b0)
@@ -0,0 +1,6 @@
+
+
+
+ unknown
+
+
Index: Ringtoets/StabilityPointStructures/test/Ringtoets.StabilityPointStructures.IO.Test/test-data/StabilityPointStructuresCalculationConfigurationImporter/validConfigurationUnknownStructure.xml
===================================================================
diff -u
--- Ringtoets/StabilityPointStructures/test/Ringtoets.StabilityPointStructures.IO.Test/test-data/StabilityPointStructuresCalculationConfigurationImporter/validConfigurationUnknownStructure.xml (revision 0)
+++ Ringtoets/StabilityPointStructures/test/Ringtoets.StabilityPointStructures.IO.Test/test-data/StabilityPointStructuresCalculationConfigurationImporter/validConfigurationUnknownStructure.xml (revision 3ca074d78bf75ff67c19539c04be91196a0659b0)
@@ -0,0 +1,6 @@
+
+
+
+ unknown
+
+