Index: Ringtoets/HeightStructures/src/Ringtoets.HeightStructures.Service/HeightStructuresCalculationService.cs =================================================================== diff -u -r45762d43270b997ca89d8f8ec73f7b895b52bd6a -rfa05755175660f1738a1c3bf82fb4505b93ffa1f --- Ringtoets/HeightStructures/src/Ringtoets.HeightStructures.Service/HeightStructuresCalculationService.cs (.../HeightStructuresCalculationService.cs) (revision 45762d43270b997ca89d8f8ec73f7b895b52bd6a) +++ Ringtoets/HeightStructures/src/Ringtoets.HeightStructures.Service/HeightStructuresCalculationService.cs (.../HeightStructuresCalculationService.cs) (revision fa05755175660f1738a1c3bf82fb4505b93ffa1f) @@ -19,9 +19,6 @@ // Stichting Deltares and remain full property of Stichting Deltares at all times. // All rights reserved. -using System; -using System.IO; -using Core.Common.Base.IO; using log4net; using Ringtoets.Common.Data.AssessmentSection; using Ringtoets.Common.Data.Probability; @@ -31,7 +28,6 @@ using Ringtoets.HeightStructures.Data; using Ringtoets.HeightStructures.Service.Properties; using Ringtoets.HydraRing.Calculation.Calculator; -using Ringtoets.HydraRing.Calculation.Calculator.Factory; using Ringtoets.HydraRing.Calculation.Data.Input.Structures; using Ringtoets.HydraRing.Calculation.Exceptions; @@ -45,62 +41,51 @@ { private static readonly ILog log = LogManager.GetLogger(typeof(HeightStructuresCalculationService)); - private IStructuresCalculator calculator; - private bool canceled; - - /// - /// Cancels any currently running height structures calculation. - /// - public void Cancel() + protected override StructuresOvertoppingCalculationInput CreateInput(StructuresCalculation calculation, + HeightStructuresFailureMechanism failureMechanism, + string hydraulicBoundaryDatabaseFilePath) { - calculator?.Cancel(); - canceled = true; - } + GeneralHeightStructuresInput generalInput = failureMechanism.GeneralInput; - /// - /// Performs a height structures calculation based on the supplied and sets - /// if the calculation was successful. Error and status information is logged during the execution of the operation. - /// - /// The that holds all the information required to perform the calculation. - /// The that holds information about the norm used in the calculation. - /// The that holds the information about the contribution - /// and the general inputs used in the calculation. - /// The path which points to the hydraulic boundary database file. - /// Thrown when , - /// or is null. - /// Thrown when the - /// contains invalid characters. - /// Thrown when: - /// - /// No settings database file could be found at the location of - /// with the same name. - /// Unable to open settings database file. - /// Unable to read required data from database file. - /// - /// Thrown when an error occurs while performing the calculation. - public override void Calculate(StructuresCalculation calculation, - IAssessmentSection assessmentSection, - HeightStructuresFailureMechanism failureMechanism, - string hydraulicBoundaryDatabaseFilePath) - { - base.Calculate(calculation, assessmentSection, failureMechanism, hydraulicBoundaryDatabaseFilePath); + var structuresOvertoppingCalculationInput = new StructuresOvertoppingCalculationInput( + calculation.InputParameters.HydraulicBoundaryLocation.Id, + calculation.InputParameters.StructureNormalOrientation, + HydraRingInputParser.ParseForeshore(calculation.InputParameters), + HydraRingInputParser.ParseBreakWater(calculation.InputParameters), + generalInput.GravitationalAcceleration, + generalInput.ModelFactorOvertoppingFlow.Mean, generalInput.ModelFactorOvertoppingFlow.StandardDeviation, + calculation.InputParameters.LevelCrestStructure.Mean, calculation.InputParameters.LevelCrestStructure.StandardDeviation, + calculation.InputParameters.StructureNormalOrientation, + calculation.InputParameters.ModelFactorSuperCriticalFlow.Mean, calculation.InputParameters.ModelFactorSuperCriticalFlow.StandardDeviation, + calculation.InputParameters.AllowedLevelIncreaseStorage.Mean, calculation.InputParameters.AllowedLevelIncreaseStorage.StandardDeviation, + generalInput.ModelFactorStorageVolume.Mean, generalInput.ModelFactorStorageVolume.StandardDeviation, + calculation.InputParameters.StorageStructureArea.Mean, calculation.InputParameters.StorageStructureArea.CoefficientOfVariation, + generalInput.ModelFactorInflowVolume, + calculation.InputParameters.FlowWidthAtBottomProtection.Mean, calculation.InputParameters.FlowWidthAtBottomProtection.StandardDeviation, + calculation.InputParameters.CriticalOvertoppingDischarge.Mean, calculation.InputParameters.CriticalOvertoppingDischarge.CoefficientOfVariation, + calculation.InputParameters.FailureProbabilityStructureWithErosion, + calculation.InputParameters.WidthFlowApertures.Mean, calculation.InputParameters.WidthFlowApertures.StandardDeviation, + calculation.InputParameters.DeviationWaveDirection, + calculation.InputParameters.StormDuration.Mean, calculation.InputParameters.StormDuration.CoefficientOfVariation); - string calculationName = calculation.Name; + HydraRingSettingsDatabaseHelper.AssignSettingsFromDatabase(structuresOvertoppingCalculationInput, hydraulicBoundaryDatabaseFilePath); - StructuresOvertoppingCalculationInput input = CreateInput(calculation, failureMechanism, hydraulicBoundaryDatabaseFilePath); + return structuresOvertoppingCalculationInput; + } - string hlcdDirectory = Path.GetDirectoryName(hydraulicBoundaryDatabaseFilePath); - calculator = HydraRingCalculatorFactory.Instance.CreateStructuresCalculator(hlcdDirectory); - - CalculationServiceHelper.LogCalculationBegin(); - + protected override void PerformCalculation(IStructuresCalculator calculator, + StructuresOvertoppingCalculationInput input, + StructuresCalculation calculation, + IAssessmentSection assessmentSection, + HeightStructuresFailureMechanism failureMechanism) + { var exceptionThrown = false; try { calculator.Calculate(input); - if (!canceled && string.IsNullOrEmpty(calculator.LastErrorFileContent)) + if (!Canceled && string.IsNullOrEmpty(calculator.LastErrorFileContent)) { ProbabilityAssessmentOutput probabilityAssessmentOutput = ProbabilityAssessmentService.Calculate(assessmentSection.FailureMechanismContribution.Norm, @@ -112,18 +97,18 @@ } catch (HydraRingCalculationException) { - if (!canceled) + if (!Canceled) { string lastErrorContent = calculator.LastErrorFileContent; if (string.IsNullOrEmpty(lastErrorContent)) { log.ErrorFormat(Resources.HeightStructuresCalculationService_Calculate_Error_in_HeightStructuresCalculation_0_no_error_report, - calculationName); + calculation.Name); } else { log.ErrorFormat(Resources.HeightStructuresCalculationService_Calculate_Error_in_HeightStructuresCalculation_0_click_details_for_last_error_report_1, - calculationName, lastErrorContent); + calculation.Name, lastErrorContent); } exceptionThrown = true; @@ -133,11 +118,11 @@ finally { string lastErrorFileContent = calculator.LastErrorFileContent; - bool errorOccurred = CalculationServiceHelper.HasErrorOccurred(canceled, exceptionThrown, lastErrorFileContent); + bool errorOccurred = CalculationServiceHelper.HasErrorOccurred(Canceled, exceptionThrown, lastErrorFileContent); if (errorOccurred) { log.ErrorFormat(Resources.HeightStructuresCalculationService_Calculate_Error_in_HeightStructuresCalculation_0_click_details_for_last_error_report_1, - calculationName, lastErrorFileContent); + calculation.Name, lastErrorFileContent); } log.InfoFormat(Resources.HeightStructuresCalculationService_Calculate_Calculation_temporary_directory_can_be_found_on_location_0, calculator.OutputDirectory); @@ -149,37 +134,5 @@ } } } - - protected override StructuresOvertoppingCalculationInput CreateInput(StructuresCalculation calculation, - HeightStructuresFailureMechanism failureMechanism, - string hydraulicBoundaryDatabaseFilePath) - { - GeneralHeightStructuresInput generalInput = failureMechanism.GeneralInput; - - var structuresOvertoppingCalculationInput = new StructuresOvertoppingCalculationInput( - calculation.InputParameters.HydraulicBoundaryLocation.Id, - calculation.InputParameters.StructureNormalOrientation, - HydraRingInputParser.ParseForeshore(calculation.InputParameters), - HydraRingInputParser.ParseBreakWater(calculation.InputParameters), - generalInput.GravitationalAcceleration, - generalInput.ModelFactorOvertoppingFlow.Mean, generalInput.ModelFactorOvertoppingFlow.StandardDeviation, - calculation.InputParameters.LevelCrestStructure.Mean, calculation.InputParameters.LevelCrestStructure.StandardDeviation, - calculation.InputParameters.StructureNormalOrientation, - calculation.InputParameters.ModelFactorSuperCriticalFlow.Mean, calculation.InputParameters.ModelFactorSuperCriticalFlow.StandardDeviation, - calculation.InputParameters.AllowedLevelIncreaseStorage.Mean, calculation.InputParameters.AllowedLevelIncreaseStorage.StandardDeviation, - generalInput.ModelFactorStorageVolume.Mean, generalInput.ModelFactorStorageVolume.StandardDeviation, - calculation.InputParameters.StorageStructureArea.Mean, calculation.InputParameters.StorageStructureArea.CoefficientOfVariation, - generalInput.ModelFactorInflowVolume, - calculation.InputParameters.FlowWidthAtBottomProtection.Mean, calculation.InputParameters.FlowWidthAtBottomProtection.StandardDeviation, - calculation.InputParameters.CriticalOvertoppingDischarge.Mean, calculation.InputParameters.CriticalOvertoppingDischarge.CoefficientOfVariation, - calculation.InputParameters.FailureProbabilityStructureWithErosion, - calculation.InputParameters.WidthFlowApertures.Mean, calculation.InputParameters.WidthFlowApertures.StandardDeviation, - calculation.InputParameters.DeviationWaveDirection, - calculation.InputParameters.StormDuration.Mean, calculation.InputParameters.StormDuration.CoefficientOfVariation); - - HydraRingSettingsDatabaseHelper.AssignSettingsFromDatabase(structuresOvertoppingCalculationInput, hydraulicBoundaryDatabaseFilePath); - - return structuresOvertoppingCalculationInput; - } } } \ No newline at end of file