Index: Ringtoets/ClosingStructures/src/Ringtoets.ClosingStructures.IO/Configurations/ClosingStructuresCalculationConfigurationImporter.cs =================================================================== diff -u -r335523a40d190e19b1061804de21c28f74140f52 -r3307edf9e893dd67926dffaac019185b32bbbe86 --- Ringtoets/ClosingStructures/src/Ringtoets.ClosingStructures.IO/Configurations/ClosingStructuresCalculationConfigurationImporter.cs (.../ClosingStructuresCalculationConfigurationImporter.cs) (revision 335523a40d190e19b1061804de21c28f74140f52) +++ Ringtoets/ClosingStructures/src/Ringtoets.ClosingStructures.IO/Configurations/ClosingStructuresCalculationConfigurationImporter.cs (.../ClosingStructuresCalculationConfigurationImporter.cs) (revision 3307edf9e893dd67926dffaac019185b32bbbe86) @@ -23,6 +23,7 @@ using System.Collections.Generic; using Core.Common.Base.Data; using Ringtoets.ClosingStructures.Data; +using Ringtoets.ClosingStructures.IO.Configurations.Helpers; using Ringtoets.Common.Data.Calculation; using Ringtoets.Common.Data.DikeProfiles; using Ringtoets.Common.Data.Hydraulics; @@ -101,6 +102,11 @@ && TryReadStochasts(readCalculation, calculation) && TryReadOrientation(readCalculation, calculation) && TryReadFailureProbabilityStructureWithErosion(readCalculation, calculation) + && TryReadFailureProbabilityOpenStructure(readCalculation, calculation) + && TryReadFailureProbabilityReparation(readCalculation, calculation) + && TryReadProbabilityOrFrequencyOpenStructureBeforeFlooding(readCalculation, calculation) + && TryReadInflowModelType(readCalculation, calculation) + && TryReadIdenticalApertures(readCalculation, calculation) && readCalculation.WaveReduction.ValidateWaveReduction(calculation.InputParameters.ForeshoreProfile, calculation.Name, Log)) { ReadWaveReductionParameters(readCalculation.WaveReduction, calculation.InputParameters); @@ -244,27 +250,60 @@ { 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 failure probability open structure. + /// + /// The calculation read from the imported file. + /// The calculation to configure. + /// false when the failure probability open structure is invalid or when there is a failure probability + /// open structure but no structure defined, true otherwise. + private bool TryReadFailureProbabilityOpenStructure(ClosingStructuresCalculationConfiguration readCalculation, StructuresCalculation calculation) + { + if (readCalculation.FailureProbabilityOpenStructure.HasValue) + { if (calculation.InputParameters.Structure == null) { Log.LogCalculationConversionError(string.Format(RingtoetsCommonIOResources.CalculationConfigurationImporter_TryParameter_No_Structure_to_assign_Parameter_0_, - RingtoetsCommonIOResources.CalculationConfigurationImporter_FailureProbabilityStructureWithErosion_DisplayName), + RingtoetsCommonIOResources.CalculationConfigurationImporter_FailureProbabilityOpenStructure_DisplayName), calculation.Name); return false; } - double failureProbability = readCalculation.FailureProbabilityStructureWithErosion.Value; + double failureProbability = readCalculation.FailureProbabilityOpenStructure.Value; try { - calculation.InputParameters.FailureProbabilityStructureWithErosion = (RoundedDouble) failureProbability; + calculation.InputParameters.FailureProbabilityOpenStructure = (RoundedDouble) failureProbability; } catch (ArgumentOutOfRangeException e) { Log.LogOutOfRangeException(string.Format( RingtoetsCommonIOResources.TryReadParameter_Value_0_ParameterName_1_is_invalid, failureProbability, - RingtoetsCommonIOResources.CalculationConfigurationImporter_FailureProbabilityStructureWithErosion_DisplayName), + RingtoetsCommonIOResources.CalculationConfigurationImporter_FailureProbabilityOpenStructure_DisplayName), calculation.Name, e); @@ -275,6 +314,144 @@ return true; } + /// + /// Reads the failure probability reparation. + /// + /// The calculation read from the imported file. + /// The calculation to configure. + /// false when the failure probability reparation is invalid or when there is a failure probability + /// reparation but no structure defined, true otherwise. + private bool TryReadFailureProbabilityReparation(ClosingStructuresCalculationConfiguration readCalculation, StructuresCalculation calculation) + { + if (readCalculation.FailureProbabilityReparation.HasValue) + { + if (calculation.InputParameters.Structure == null) + { + Log.LogCalculationConversionError(string.Format(RingtoetsCommonIOResources.CalculationConfigurationImporter_TryParameter_No_Structure_to_assign_Parameter_0_, + RingtoetsCommonIOResources.CalculationConfigurationImporter_FailureProbabilityReparation_DisplayName), + calculation.Name); + + return false; + } + + double failureProbability = readCalculation.FailureProbabilityReparation.Value; + + try + { + calculation.InputParameters.FailureProbabilityReparation = (RoundedDouble) failureProbability; + } + catch (ArgumentOutOfRangeException e) + { + Log.LogOutOfRangeException(string.Format( + RingtoetsCommonIOResources.TryReadParameter_Value_0_ParameterName_1_is_invalid, + failureProbability, + RingtoetsCommonIOResources.CalculationConfigurationImporter_FailureProbabilityReparation_DisplayName), + calculation.Name, + e); + + return false; + } + } + + return true; + } + + /// + /// Reads the probability or frequency open structure before flooding. + /// + /// The calculation read from the imported file. + /// The calculation to configure. + /// false when the probability or frequency open structure before flooding is invalid or when there is a + /// probability or frequency open structure before flooding but no structure defined, true otherwise. + private bool TryReadProbabilityOrFrequencyOpenStructureBeforeFlooding(ClosingStructuresCalculationConfiguration readCalculation, StructuresCalculation calculation) + { + if (readCalculation.ProbabilityOrFrequencyOpenStructureBeforeFlooding.HasValue) + { + if (calculation.InputParameters.Structure == null) + { + Log.LogCalculationConversionError(string.Format(RingtoetsCommonIOResources.CalculationConfigurationImporter_TryParameter_No_Structure_to_assign_Parameter_0_, + RingtoetsCommonIOResources.CalculationConfigurationImporter_ProbabilityOrFrequencyOpenStructureBeforeFlooding_DisplayName), + calculation.Name); + + return false; + } + + double failureProbability = readCalculation.ProbabilityOrFrequencyOpenStructureBeforeFlooding.Value; + + try + { + calculation.InputParameters.ProbabilityOrFrequencyOpenStructureBeforeFlooding = (RoundedDouble) failureProbability; + } + catch (ArgumentOutOfRangeException e) + { + Log.LogOutOfRangeException(string.Format( + RingtoetsCommonIOResources.TryReadParameter_Value_0_ParameterName_1_is_invalid, + failureProbability, + RingtoetsCommonIOResources.CalculationConfigurationImporter_ProbabilityOrFrequencyOpenStructureBeforeFlooding_DisplayName), + calculation.Name, + e); + + return false; + } + } + + return true; + } + + /// + /// 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(ClosingStructuresCalculationConfiguration 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 = + (ClosingStructureInflowModelType) new ConfigurationClosingStructureInflowModelTypeConverter() + .ConvertTo(readCalculation.InflowModelType.Value, typeof(ClosingStructureInflowModelType)); + } + + return true; + } + + /// + /// Reads the number of identical apertures. + /// + /// The calculation read from the imported file. + /// The calculation to configure. + /// false when the number of identical apertures is invalid or when there is a + /// number of identical apertures but no structure defined, true otherwise. + private bool TryReadIdenticalApertures(ClosingStructuresCalculationConfiguration readCalculation, StructuresCalculation calculation) + { + if (readCalculation.IdenticalApertures.HasValue) + { + if (calculation.InputParameters.Structure == null) + { + Log.LogCalculationConversionError(string.Format(RingtoetsCommonIOResources.CalculationConfigurationImporter_TryParameter_No_Structure_to_assign_Parameter_0_, + RingtoetsCommonIOResources.CalculationConfigurationImporter_IdenticalApertures_DisplayName), + calculation.Name); + + return false; + } + + calculation.InputParameters.IdenticalApertures = readCalculation.IdenticalApertures.Value; + } + + return true; + } + private bool TryReadHydraulicBoundaryLocation(string locationName, StructuresCalculation calculation) { HydraulicBoundaryLocation location;