Index: Ringtoets/Piping/src/Ringtoets.Piping.IO/Importers/PipingCalculationConfigurationImporter.cs =================================================================== diff -u -rcc8b9d8e93577a236afec4dd16a25f89996241fa -rf7a31f0e8db5d1dcb2b08fb9d4fbeb91863ebd82 --- Ringtoets/Piping/src/Ringtoets.Piping.IO/Importers/PipingCalculationConfigurationImporter.cs (.../PipingCalculationConfigurationImporter.cs) (revision cc8b9d8e93577a236afec4dd16a25f89996241fa) +++ Ringtoets/Piping/src/Ringtoets.Piping.IO/Importers/PipingCalculationConfigurationImporter.cs (.../PipingCalculationConfigurationImporter.cs) (revision f7a31f0e8db5d1dcb2b08fb9d4fbeb91863ebd82) @@ -26,7 +26,6 @@ using Ringtoets.Common.Data.Calculation; using Ringtoets.Common.Data.Hydraulics; using Ringtoets.Common.Data.Probabilistics; -using Ringtoets.Common.IO.Exceptions; using Ringtoets.Common.IO.FileImporters; using Ringtoets.Piping.Data; using Ringtoets.Piping.IO.Properties; @@ -43,35 +42,35 @@ /// public class PipingCalculationConfigurationImporter : CalculationConfigurationImporter { - private readonly IEnumerable hydraulicBoundaryLocations; + private readonly IEnumerable availableHydraulicBoundaryLocations; private readonly PipingFailureMechanism failureMechanism; /// /// Creates a new instance of . /// /// The path to the XML file to import from. /// The calculation group to update. - /// The hydraulic boundary locations + /// The hydraulic boundary locations /// used to check if the imported objects contain the right location. /// The piping failure mechanism used to check /// if the imported objects contain the right data. /// Thrown when any parameter is /// null. public PipingCalculationConfigurationImporter(string xmlFilePath, CalculationGroup importTarget, - IEnumerable hydraulicBoundaryLocations, + IEnumerable availableHydraulicBoundaryLocations, PipingFailureMechanism failureMechanism) : base(xmlFilePath, importTarget) { - if (hydraulicBoundaryLocations == null) + if (availableHydraulicBoundaryLocations == null) { - throw new ArgumentNullException(nameof(hydraulicBoundaryLocations)); + throw new ArgumentNullException(nameof(availableHydraulicBoundaryLocations)); } if (failureMechanism == null) { throw new ArgumentNullException(nameof(failureMechanism)); } - this.hydraulicBoundaryLocations = hydraulicBoundaryLocations; + this.availableHydraulicBoundaryLocations = availableHydraulicBoundaryLocations; this.failureMechanism = failureMechanism; } @@ -87,12 +86,30 @@ Name = readCalculation.Name }; - ReadHydraulicBoundaryData(readCalculation, pipingCalculation); - ReadSurfaceLine(readCalculation, pipingCalculation); - ReadEntryExitPoint(readCalculation, pipingCalculation); - ReadStochasticSoilModel(readCalculation, pipingCalculation); - ReadStochasticSoilProfile(readCalculation, pipingCalculation); - ReadStochasts(readCalculation, pipingCalculation); + if (!ReadHydraulicBoundaryData(readCalculation, pipingCalculation)) + { + return null; + } + if (!ReadSurfaceLine(readCalculation, pipingCalculation)) + { + return null; + } + if (!ReadEntryExitPoint(readCalculation, pipingCalculation)) + { + return null; + } + if (!ReadStochasticSoilModel(readCalculation, pipingCalculation)) + { + return null; + } + if (!ReadStochasticSoilProfile(readCalculation, pipingCalculation)) + { + return null; + } + if (!ReadStochasts(readCalculation, pipingCalculation)) + { + return null; + } return pipingCalculation; } @@ -102,19 +119,23 @@ /// /// The calculation read from the imported file. /// The calculation to configure. - /// Thrown when the - /// has a set which is not available in . - private void ReadHydraulicBoundaryData(ReadPipingCalculation readCalculation, PipingCalculationScenario pipingCalculation) + /// false when the has a + /// set which is not available in , true otherwise. + private bool ReadHydraulicBoundaryData(ReadPipingCalculation readCalculation, PipingCalculationScenario pipingCalculation) { if (readCalculation.HydraulicBoundaryLocation != null) { - HydraulicBoundaryLocation location = hydraulicBoundaryLocations + HydraulicBoundaryLocation location = availableHydraulicBoundaryLocations .FirstOrDefault(l => l.Name == readCalculation.HydraulicBoundaryLocation); if (location == null) { - throw new CriticalFileValidationException(string.Format(RingtoetsCommonIOResources.CalculationConfigurationImporter_ReadHydraulicBoundaryLocation_Hydraulic_boundary_location_0_does_not_exist, - readCalculation.HydraulicBoundaryLocation)); + LogReadCalculationConversionError( + string.Format( + RingtoetsCommonIOResources.CalculationConfigurationImporter_ReadHydraulicBoundaryLocation_Hydraulic_boundary_location_0_does_not_exist, + readCalculation.HydraulicBoundaryLocation), + pipingCalculation.Name); + return false; } pipingCalculation.InputParameters.HydraulicBoundaryLocation = location; @@ -124,16 +145,18 @@ pipingCalculation.InputParameters.UseAssessmentLevelManualInput = true; pipingCalculation.InputParameters.AssessmentLevel = (RoundedDouble) readCalculation.AssessmentLevel; } + + return true; } /// /// Reads the surface line. /// /// The calculation read from the imported file. /// The calculation to configure. - /// Thrown when the - /// has a set which is not available in the failure mechanism. - private void ReadSurfaceLine(ReadPipingCalculation readCalculation, PipingCalculationScenario pipingCalculation) + /// false when the has a + /// set which is not available in , true otherwise. + private bool ReadSurfaceLine(ReadPipingCalculation readCalculation, PipingCalculationScenario pipingCalculation) { if (readCalculation.SurfaceLine != null) { @@ -142,63 +165,86 @@ if (surfaceLine == null) { - throw new CriticalFileValidationException(string.Format(Resources.PipingCalculationConfigurationImporter_ReadSurfaceLine_SurfaceLine_0_does_not_exist, - readCalculation.SurfaceLine)); + LogReadCalculationConversionError(string.Format( + Resources.PipingCalculationConfigurationImporter_ReadSurfaceLine_SurfaceLine_0_does_not_exist, + readCalculation.SurfaceLine), + pipingCalculation.Name); + return false; } pipingCalculation.InputParameters.SurfaceLine = surfaceLine; } + return true; } /// /// Reads the entry point and exit point. /// /// The calculation read from the imported file. /// The calculation to configure. - /// Thrown when the entry point or exit point is invalid. - private static void ReadEntryExitPoint(ReadPipingCalculation readCalculation, PipingCalculationScenario pipingCalculation) + /// false when entry or exit point is set without , + /// or when entry or exit point is invalid, true otherwise. + private bool ReadEntryExitPoint(ReadPipingCalculation readCalculation, PipingCalculationScenario pipingCalculation) { bool hasEntryPoint = readCalculation.EntryPointL.HasValue; bool hasExitPoint = readCalculation.ExitPointL.HasValue; if (readCalculation.SurfaceLine == null && (hasEntryPoint || hasExitPoint)) { - throw new CriticalFileValidationException(Resources.PipingCalculationConfigurationImporter_ReadSurfaceLine_EntryPointL_or_ExitPointL_defined_without_SurfaceLine); + LogReadCalculationConversionError(Resources.PipingCalculationConfigurationImporter_ReadSurfaceLine_EntryPointL_or_ExitPointL_defined_without_SurfaceLine, + pipingCalculation.Name); + return false; } if (hasEntryPoint) { var entryPoint = (double) readCalculation.EntryPointL; - PerformActionHandlingAnyArgumentOutOfRangeException( - () => pipingCalculation.InputParameters.EntryPointL = (RoundedDouble) entryPoint, - string.Format(Resources.PipingCalculationConfigurationImporter_ReadEntryExitPoint_Entry_point_invalid, entryPoint)); + try + { + pipingCalculation.InputParameters.EntryPointL = (RoundedDouble) entryPoint; + } + catch (ArgumentOutOfRangeException e) + { + LogOutOfRangeException(string.Format(Resources.PipingCalculationConfigurationImporter_ReadEntryExitPoint_Entry_point_invalid, entryPoint), + pipingCalculation.Name, e); + return false; + } } if (hasExitPoint) { var exitPoint = (double) readCalculation.ExitPointL; - PerformActionHandlingAnyArgumentOutOfRangeException( - () => pipingCalculation.InputParameters.ExitPointL = (RoundedDouble) exitPoint, - string.Format(Resources.PipingCalculationConfigurationImporter_ReadEntryExitPoint_Exit_point_invalid, exitPoint)); + try + { + pipingCalculation.InputParameters.ExitPointL = (RoundedDouble)exitPoint; + } + catch (ArgumentOutOfRangeException e) + { + LogOutOfRangeException(string.Format(Resources.PipingCalculationConfigurationImporter_ReadEntryExitPoint_Exit_point_invalid, exitPoint), + pipingCalculation.Name, e); + return false; + } } + + return true; } /// /// Reads the stochastic soil model. /// /// The calculation read from the imported file. /// The calculation to configure. - /// Thrown when + /// false when /// /// the has a set /// which is not available in the failure mechanism. /// The does not intersect with the /// when this is set. /// - /// - private void ReadStochasticSoilModel(ReadPipingCalculation readCalculation, PipingCalculationScenario pipingCalculation) + /// true otherwise. + private bool ReadStochasticSoilModel(ReadPipingCalculation readCalculation, PipingCalculationScenario pipingCalculation) { if (readCalculation.StochasticSoilModel != null) { @@ -207,101 +253,156 @@ if (soilModel == null) { - throw new CriticalFileValidationException(string.Format(Resources.PipingCalculationConfigurationImporter_ReadStochasticSoilModel_Stochastische_soil_model_0_does_not_exist, - readCalculation.StochasticSoilModel)); + LogReadCalculationConversionError(string.Format( + Resources.PipingCalculationConfigurationImporter_ReadStochasticSoilModel_Stochastische_soil_model_0_does_not_exist, + readCalculation.StochasticSoilModel), + pipingCalculation.Name); + return false; } if (pipingCalculation.InputParameters.SurfaceLine != null && !soilModel.IntersectsWithSurfaceLineGeometry(pipingCalculation.InputParameters.SurfaceLine)) { - throw new CriticalFileValidationException(string.Format(Resources.PipingCalculationConfigurationImporter_ReadStochasticSoilModel_Stochastische_soil_model_0_does_not_intersect_with_surfaceLine_1, - readCalculation.StochasticSoilModel, - readCalculation.SurfaceLine)); + LogReadCalculationConversionError(string.Format( + Resources.PipingCalculationConfigurationImporter_ReadStochasticSoilModel_Stochastische_soil_model_0_does_not_intersect_with_surfaceLine_1, + readCalculation.StochasticSoilModel, + readCalculation.SurfaceLine), + pipingCalculation.Name); + return false; } pipingCalculation.InputParameters.StochasticSoilModel = soilModel; } + return true; } /// /// Reads the stochastic soil profile. /// /// The calculation read from the imported file. /// The calculation to configure. - /// Thrown when the has: + /// false when the has: /// /// a set but no is specified; /// a set which is not available in the . /// - /// - private static void ReadStochasticSoilProfile(ReadPipingCalculation readCalculation, PipingCalculationScenario pipingCalculation) + /// true otherwise. + private bool ReadStochasticSoilProfile(ReadPipingCalculation readCalculation, PipingCalculationScenario pipingCalculation) { if (readCalculation.StochasticSoilProfile != null) { if (pipingCalculation.InputParameters.StochasticSoilModel == null) { - throw new CriticalFileValidationException(string.Format(Resources.PipingCalculationConfigurationImporter_ReadStochasticSoilProfile_No_soil_model_provided_for_soil_profile_with_name_0, - readCalculation.StochasticSoilProfile)); + LogReadCalculationConversionError(string.Format( + Resources.PipingCalculationConfigurationImporter_ReadStochasticSoilProfile_No_soil_model_provided_for_soil_profile_with_name_0, + readCalculation.StochasticSoilProfile), + pipingCalculation.Name); + return false; } StochasticSoilProfile soilProfile = pipingCalculation.InputParameters.StochasticSoilModel.StochasticSoilProfiles .FirstOrDefault(ssp => ssp.SoilProfile.Name == readCalculation.StochasticSoilProfile); if (soilProfile == null) { - throw new CriticalFileValidationException(string.Format(Resources.PipingCalculationConfigurationImporter_ReadStochasticSoilProfile_Stochastic_soil_profile_0_does_not_exist_within_soil_model_1, - readCalculation.StochasticSoilProfile, readCalculation.StochasticSoilModel)); + LogReadCalculationConversionError(string.Format( + Resources.PipingCalculationConfigurationImporter_ReadStochasticSoilProfile_Stochastic_soil_profile_0_does_not_exist_within_soil_model_1, + readCalculation.StochasticSoilProfile, readCalculation.StochasticSoilModel), + pipingCalculation.Name); + return false; } pipingCalculation.InputParameters.StochasticSoilProfile = soilProfile; } + return true; } /// /// Reads the stochasts. /// /// The calculation read from the imported file. /// The calculation to configure. - /// Thrown when a stochast value (mean or standard deviation) is invalid. - private static void ReadStochasts(ReadPipingCalculation readCalculation, PipingCalculationScenario pipingCalculation) + /// false when a stochast value (mean or standard deviation) is invalid, true otherwise. + private bool ReadStochasts(ReadPipingCalculation readCalculation, PipingCalculationScenario pipingCalculation) { if (readCalculation.PhreaticLevelExitMean.HasValue && readCalculation.PhreaticLevelExitStandardDeviation.HasValue) { var normalDistribution = new NormalDistribution(); var mean = (double) readCalculation.PhreaticLevelExitMean; - PerformActionHandlingAnyArgumentOutOfRangeException( - () => normalDistribution.Mean = (RoundedDouble) mean, - string.Format(Resources.PipingCalculationConfigurationImporter_ReadStochasts_Invalid_mean_0_for_stochast_with_name_1, mean, - PipingCalculationConfigurationSchemaIdentifiers.PhreaticLevelExitStochastName)); - var standardDeviation = (double) readCalculation.PhreaticLevelExitStandardDeviation; - PerformActionHandlingAnyArgumentOutOfRangeException( - () => normalDistribution.StandardDeviation = (RoundedDouble) standardDeviation, - string.Format(Resources.PipingCalculationConfigurationImporter_ReadStochasts_Invalid_standard_deviation_0_for_stochast_with_name_1, standardDeviation, - PipingCalculationConfigurationSchemaIdentifiers.PhreaticLevelExitStochastName)); + try + { + normalDistribution.Mean = (RoundedDouble) mean; + } + catch (ArgumentOutOfRangeException e) + { + LogOutOfRangeException(string.Format( + Resources.PipingCalculationConfigurationImporter_ReadStochasts_Invalid_mean_0_for_stochast_with_name_1, + mean, + PipingCalculationConfigurationSchemaIdentifiers.PhreaticLevelExitStochastName), + pipingCalculation.Name, e); + return false; + } + var standardDeviation = (double)readCalculation.PhreaticLevelExitStandardDeviation; + + try + { + normalDistribution.StandardDeviation = (RoundedDouble) standardDeviation; + } + catch (ArgumentOutOfRangeException e) + { + LogOutOfRangeException(string.Format( + Resources.PipingCalculationConfigurationImporter_ReadStochasts_Invalid_standard_deviation_0_for_stochast_with_name_1, + standardDeviation, + PipingCalculationConfigurationSchemaIdentifiers.PhreaticLevelExitStochastName), + pipingCalculation.Name, e); + return false; + } + pipingCalculation.InputParameters.PhreaticLevelExit = normalDistribution; } if (readCalculation.DampingFactorExitMean.HasValue && readCalculation.DampingFactorExitStandardDeviation.HasValue) { var logNormalDistribution = new LogNormalDistribution(); + var mean = (double)readCalculation.DampingFactorExitMean; - var mean = (double) readCalculation.DampingFactorExitMean; - PerformActionHandlingAnyArgumentOutOfRangeException( - () => logNormalDistribution.Mean = (RoundedDouble) mean, - string.Format(Resources.PipingCalculationConfigurationImporter_ReadStochasts_Invalid_mean_0_for_stochast_with_name_1, mean, - PipingCalculationConfigurationSchemaIdentifiers.DampingFactorExitStochastName)); + try + { + logNormalDistribution.Mean = (RoundedDouble)mean; + } + catch (ArgumentOutOfRangeException e) + { + LogOutOfRangeException(string.Format( + Resources.PipingCalculationConfigurationImporter_ReadStochasts_Invalid_mean_0_for_stochast_with_name_1, + mean, + PipingCalculationConfigurationSchemaIdentifiers.DampingFactorExitStochastName), + pipingCalculation.Name, e); + return false; + } - var standardDeviation = (double) readCalculation.DampingFactorExitStandardDeviation; - PerformActionHandlingAnyArgumentOutOfRangeException( - () => logNormalDistribution.StandardDeviation = (RoundedDouble) standardDeviation, - string.Format(Resources.PipingCalculationConfigurationImporter_ReadStochasts_Invalid_standard_deviation_0_for_stochast_with_name_1, standardDeviation, - PipingCalculationConfigurationSchemaIdentifiers.DampingFactorExitStochastName)); + var standardDeviation = (double)readCalculation.DampingFactorExitStandardDeviation; + try + { + logNormalDistribution.StandardDeviation = (RoundedDouble)standardDeviation; + } + catch (ArgumentOutOfRangeException e) + { + LogOutOfRangeException(string.Format( + Resources.PipingCalculationConfigurationImporter_ReadStochasts_Invalid_standard_deviation_0_for_stochast_with_name_1, + standardDeviation, + PipingCalculationConfigurationSchemaIdentifiers.DampingFactorExitStochastName), + pipingCalculation.Name, e); + return false; + } + pipingCalculation.InputParameters.DampingFactorExit = logNormalDistribution; } + + return true; } } } \ No newline at end of file