Index: src/Plugins/Wti/Wti.Service/PipingCalculationService.cs =================================================================== diff -u -r1689206627a4343d07fafcebb0a931b7a0e9e2d2 -r49b7320ad56bfa60788e8792b79dd537318f68ff --- src/Plugins/Wti/Wti.Service/PipingCalculationService.cs (.../PipingCalculationService.cs) (revision 1689206627a4343d07fafcebb0a931b7a0e9e2d2) +++ src/Plugins/Wti/Wti.Service/PipingCalculationService.cs (.../PipingCalculationService.cs) (revision 49b7320ad56bfa60788e8792b79dd537318f68ff) @@ -1,66 +1,101 @@ -using System.Collections.Generic; +using System; +using log4net; using Wti.Calculation.Piping; using Wti.Data; +using Wti.Service.Properties; namespace Wti.Service { /// - /// This class controls the and its PipingDataNodePresenter. - /// Interactions from the PipingDataNodePresenter are handles by this class. + /// This class is responsible for invoking operations on the . Error and status information is + /// logged during the execution of the operation. At the end of an operation, a is returned, + /// representing the result of the operation. /// public static class PipingCalculationService { + private static readonly ILog PipingDataLogger = LogManager.GetLogger(typeof(PipingData)); + /// /// Performs a piping calculation based on the supplied and sets - /// to the if the calculation was successful. + /// to the if the calculation was successful. Error and status information is logged during + /// the execution of the operation. /// /// The to base the input for the calculation upon. - /// A with all the messages that were returned due to validation errors in the given - /// or error message that occurred when performing the calculation. - public static List PerfromValidatedCalculation(PipingData pipingData) + /// If contains validation errors, then is returned. + /// If problems were encountered during the calculation, is returned. + /// Otherwise, is returned. + public static PipingCalculationResult PerfromValidatedCalculation(PipingData pipingData) { - var validationResults = Validate(pipingData); - if (validationResults.Count > 0) + PipingCalculationResult validationResult = Validate(pipingData); + + if (validationResult == PipingCalculationResult.Successful) { ClearOutput(pipingData); - return validationResults; + return Calculate(pipingData); } - try + + return validationResult; + } + + /// + /// Performs validation over the values on the given . Error and status information is logged during + /// the execution of the operation. + /// + /// The for which to validate the values. + /// If contains validation errors, then is returned. + /// Otherwise, is returned. + public static PipingCalculationResult Validate(PipingData pipingData) + { + PipingDataLogger.Info(String.Format(Resources.ValidationStarted_0, DateTimeService.CurrentTimeAsString)); + + var validationResults = new PipingCalculation(CreateInputFromData(pipingData)).Validate(); + LogMessagesAsError(validationResults.ToArray()); + + PipingDataLogger.Info(String.Format(Resources.ValidationEnded_0, DateTimeService.CurrentTimeAsString)); + + return validationResults.Count > 0 ? PipingCalculationResult.ValidationErrors : PipingCalculationResult.Successful; + } + + private static void LogMessagesAsError(params string[] errorMessages) + { + foreach (var errorMessage in errorMessages) { - Calculate(pipingData); + PipingDataLogger.Error(string.Format(Resources.ErrorInPipingCalculation_0, errorMessage)); } - catch (PipingCalculationException e) - { - ClearOutput(pipingData); - return new List{ e.Message }; - } - return new List(); } private static void ClearOutput(PipingData pipingData) { pipingData.Output = null; } - private static void Calculate(PipingData pipingData) + private static PipingCalculationResult Calculate(PipingData pipingData) { - var input = CreateInputFromData(pipingData); - var pipingCalculation = new PipingCalculation(input); + PipingDataLogger.Info(String.Format(Resources.CalculationStarted_0, DateTimeService.CurrentTimeAsString)); - var pipingResult = pipingCalculation.Calculate(); + try + { + var pipingResult = new PipingCalculation(CreateInputFromData(pipingData)).Calculate(); - pipingData.Output = new PipingOutput(pipingResult.UpliftZValue, - pipingResult.UpliftFactorOfSafety, - pipingResult.HeaveZValue, pipingResult.HeaveFactorOfSafety, pipingResult.SellmeijerZValue, pipingResult.SellmeijerFactorOfSafety); + pipingData.Output = new PipingOutput(pipingResult.UpliftZValue, + pipingResult.UpliftFactorOfSafety, + pipingResult.HeaveZValue, + pipingResult.HeaveFactorOfSafety, + pipingResult.SellmeijerZValue, + pipingResult.SellmeijerFactorOfSafety); + } + catch (PipingCalculationException e) + { + LogMessagesAsError(e.Message); + return PipingCalculationResult.CalculationErrors; + } + finally + { + PipingDataLogger.Info(String.Format(Resources.CalculationEnded_0, DateTimeService.CurrentTimeAsString)); + } + return PipingCalculationResult.Successful; } - public static List Validate(PipingData pipingData) - { - var input = CreateInputFromData(pipingData); - - return new PipingCalculation(input).Validate(); - } - private static PipingCalculationInput CreateInputFromData(PipingData pipingData) { return new PipingCalculationInput(