Index: src/Plugins/Wti/Wti.Forms/NodePresenters/PipingDataNodePresenter.cs =================================================================== diff -u -ra3b93c36c2051bd6112327bff0d836ae7883737d -r1689206627a4343d07fafcebb0a931b7a0e9e2d2 --- src/Plugins/Wti/Wti.Forms/NodePresenters/PipingDataNodePresenter.cs (.../PipingDataNodePresenter.cs) (revision a3b93c36c2051bd6112327bff0d836ae7883737d) +++ src/Plugins/Wti/Wti.Forms/NodePresenters/PipingDataNodePresenter.cs (.../PipingDataNodePresenter.cs) (revision 1689206627a4343d07fafcebb0a931b7a0e9e2d2) @@ -88,14 +88,12 @@ private void PerformPipingCalculation(PipingData pipingData) { - try + var calculationErrorMessages = PipingCalculationService.PerfromValidatedCalculation(pipingData); + + foreach(var errorMessage in calculationErrorMessages) { - PipingCalculationService.Calculate(pipingData); + LogManager.GetLogger(typeof(PipingData)).Error(String.Format(Resources.ErrorInPipingCalculation_0, errorMessage)); } - catch (PipingCalculationException e) - { - LogManager.GetLogger(typeof(PipingData)).Error(String.Format(Resources.ErrorInPipingCalculation_0, e.Message)); - } pipingData.NotifyObservers(); } Index: src/Plugins/Wti/Wti.Service/PipingCalculationService.cs =================================================================== diff -u -r82e08784e174b6b2799fc19cc04e7d7aeb7b84e9 -r1689206627a4343d07fafcebb0a931b7a0e9e2d2 --- src/Plugins/Wti/Wti.Service/PipingCalculationService.cs (.../PipingCalculationService.cs) (revision 82e08784e174b6b2799fc19cc04e7d7aeb7b84e9) +++ src/Plugins/Wti/Wti.Service/PipingCalculationService.cs (.../PipingCalculationService.cs) (revision 1689206627a4343d07fafcebb0a931b7a0e9e2d2) @@ -15,10 +15,55 @@ /// to the if the calculation was successful. /// /// The to base the input for the calculation upon. - /// Thrown when calling would return a non empty . - public static void Calculate(PipingData pipingData) + /// 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) { - var input = new PipingCalculationInput( + var validationResults = Validate(pipingData); + if (validationResults.Count > 0) + { + ClearOutput(pipingData); + return validationResults; + } + try + { + Calculate(pipingData); + } + 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) + { + var input = CreateInputFromData(pipingData); + var pipingCalculation = new PipingCalculation(input); + + var pipingResult = pipingCalculation.Calculate(); + + pipingData.Output = new PipingOutput(pipingResult.UpliftZValue, + pipingResult.UpliftFactorOfSafety, + pipingResult.HeaveZValue, pipingResult.HeaveFactorOfSafety, pipingResult.SellmeijerZValue, pipingResult.SellmeijerFactorOfSafety); + } + + public static List Validate(PipingData pipingData) + { + var input = CreateInputFromData(pipingData); + + return new PipingCalculation(input).Validate(); + } + + private static PipingCalculationInput CreateInputFromData(PipingData pipingData) + { + return new PipingCalculationInput( pipingData.WaterVolumetricWeight, pipingData.UpliftModelFactor, pipingData.AssessmentLevel, @@ -42,17 +87,6 @@ pipingData.BeddingAngle, pipingData.ExitPointXCoordinate ); - var pipingCalculation = new PipingCalculation(input); - var pipingResult = pipingCalculation.Calculate(); - - pipingData.Output = new PipingOutput(pipingResult.UpliftZValue, - pipingResult.UpliftFactorOfSafety, - pipingResult.HeaveZValue, pipingResult.HeaveFactorOfSafety, pipingResult.SellmeijerZValue, pipingResult.SellmeijerFactorOfSafety); } - - public static List Validate(PipingData pipingData) - { - return null; - } } } \ No newline at end of file Index: test/Plugins/Wti/Wti.Forms.Test/NodePresenters/PipingDataNodePresenterTest.cs =================================================================== diff -u -ra3b93c36c2051bd6112327bff0d836ae7883737d -r1689206627a4343d07fafcebb0a931b7a0e9e2d2 --- test/Plugins/Wti/Wti.Forms.Test/NodePresenters/PipingDataNodePresenterTest.cs (.../PipingDataNodePresenterTest.cs) (revision a3b93c36c2051bd6112327bff0d836ae7883737d) +++ test/Plugins/Wti/Wti.Forms.Test/NodePresenters/PipingDataNodePresenterTest.cs (.../PipingDataNodePresenterTest.cs) (revision 1689206627a4343d07fafcebb0a931b7a0e9e2d2) @@ -365,13 +365,12 @@ mockRepository.ReplayAll(); var contextMenuAdapter = nodePresenter.GetContextMenu(null, pipingData) as MenuItemContextMenuStripAdapter; - var expectedMessage = "Piping berekening niet gelukt: Dtotal (total thickness) may not be 0." + Environment.NewLine + "Exception of type HeaveCalculator"; // When Action action = () => contextMenuAdapter.ContextMenuStrip.Items[0].PerformClick(); // Then - TestHelper.AssertLogMessageIsGenerated(action, expectedMessage, 1); + TestHelper.AssertLogMessagesCount(action, 6); Assert.IsNull(pipingData.Output); mockRepository.VerifyAll(); } Index: test/Plugins/Wti/Wti.Service.Test/PipingCalculationServiceTest.cs =================================================================== diff -u -rcf31268a74ee4557e6ef9ccdcde7e5c48540ab8b -r1689206627a4343d07fafcebb0a931b7a0e9e2d2 --- test/Plugins/Wti/Wti.Service.Test/PipingCalculationServiceTest.cs (.../PipingCalculationServiceTest.cs) (revision cf31268a74ee4557e6ef9ccdcde7e5c48540ab8b) +++ test/Plugins/Wti/Wti.Service.Test/PipingCalculationServiceTest.cs (.../PipingCalculationServiceTest.cs) (revision 1689206627a4343d07fafcebb0a931b7a0e9e2d2) @@ -36,23 +36,23 @@ public void Calculate_ValidPipingData_ShouldSetOutput() { // Call - PipingCalculationService.Calculate(validPipingData); + PipingCalculationService.PerfromValidatedCalculation(validPipingData); // Assert Assert.NotNull(validPipingData.Output); } [Test] - public void Calculate_InValidPipingData_ThrowsException() + public void Calculate_InValidPipingData_ReturnsErrorMessages() { // Setup var invalidPipingData = new PipingData(); // Call - TestDelegate testDelegate = () => PipingCalculationService.Calculate(invalidPipingData); + var results = PipingCalculationService.PerfromValidatedCalculation(invalidPipingData); // Assert - Assert.Throws(testDelegate); + CollectionAssert.IsNotEmpty(results); } } } \ No newline at end of file