Index: Riskeer/Piping/src/Riskeer.Piping.Service/Probabilistic/ProbabilisticPipingCalculationService.cs
===================================================================
diff -u -rcf29688172754dfc3c2ff94c4ac05fc2f6f17963 -r1d1743fbce08093c724d0d180e41943e93633a8f
--- Riskeer/Piping/src/Riskeer.Piping.Service/Probabilistic/ProbabilisticPipingCalculationService.cs (.../ProbabilisticPipingCalculationService.cs) (revision cf29688172754dfc3c2ff94c4ac05fc2f6f17963)
+++ Riskeer/Piping/src/Riskeer.Piping.Service/Probabilistic/ProbabilisticPipingCalculationService.cs (.../ProbabilisticPipingCalculationService.cs) (revision 1d1743fbce08093c724d0d180e41943e93633a8f)
@@ -19,13 +19,74 @@
// Stichting Deltares and remain full property of Stichting Deltares at all times.
// All rights reserved.
+using System.Collections.Generic;
+using System.Linq;
+using Riskeer.Common.Data.AssessmentSection;
+using Riskeer.Common.Data.Hydraulics;
+using Riskeer.Common.IO.HydraRing;
+using Riskeer.Common.Service;
+using Riskeer.Piping.Data.Probabilistic;
+using RiskeerCommonServiceResources = Riskeer.Common.Service.Properties.Resources;
+
namespace Riskeer.Piping.Service.Probabilistic
{
///
/// Service that provides methods for performing Hydra-ring calculations for piping probabilistic.
///
public class ProbabilisticPipingCalculationService
{
+ ///
+ /// 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.
+ /// The for which to validate the values.
+ /// true if has no validation errors; false otherwise.
+ public static bool Validate(ProbabilisticPipingCalculation calculation, IAssessmentSection assessmentSection)
+ {
+ CalculationServiceHelper.LogValidationBegin();
+
+ string[] hydraulicBoundaryDatabaseMessages = ValidateHydraulicBoundaryDatabase(assessmentSection).ToArray();
+ CalculationServiceHelper.LogMessagesAsError(hydraulicBoundaryDatabaseMessages);
+ if (hydraulicBoundaryDatabaseMessages.Any())
+ {
+ CalculationServiceHelper.LogValidationEnd();
+ return false;
+ }
+
+ string[] messages = ValidateInput(calculation.InputParameters).ToArray();
+ CalculationServiceHelper.LogMessagesAsError(messages);
+
+ CalculationServiceHelper.LogValidationEnd();
+ return !messages.Any();
+ }
+
+ private static IEnumerable ValidateHydraulicBoundaryDatabase(IAssessmentSection assessmentSection)
+ {
+ string preprocessorDirectory = assessmentSection.HydraulicBoundaryDatabase.EffectivePreprocessorDirectory();
+ string databaseValidationProblem = HydraulicBoundaryDatabaseConnectionValidator.Validate(assessmentSection.HydraulicBoundaryDatabase);
+ if (!string.IsNullOrEmpty(databaseValidationProblem))
+ {
+ yield return databaseValidationProblem;
+ }
+
+ string preprocessorDirectoryValidationProblem = HydraulicBoundaryDatabaseHelper.ValidatePreprocessorDirectory(preprocessorDirectory);
+ if (!string.IsNullOrEmpty(preprocessorDirectoryValidationProblem))
+ {
+ yield return preprocessorDirectoryValidationProblem;
+ }
+ }
+ private static IEnumerable ValidateInput(ProbabilisticPipingInput input)
+ {
+ var validationResults = new List();
+
+ if (input.HydraulicBoundaryLocation == null)
+ {
+ validationResults.Add(RiskeerCommonServiceResources.CalculationService_ValidateInput_No_hydraulic_boundary_location_selected);
+ }
+
+ return validationResults;
+ }
}
}
\ No newline at end of file
Index: Riskeer/Piping/test/Riskeer.Piping.Service.Test/Probabilistic/ProbabilisticPipingCalculationServiceTest.cs
===================================================================
diff -u -rcf29688172754dfc3c2ff94c4ac05fc2f6f17963 -r1d1743fbce08093c724d0d180e41943e93633a8f
--- Riskeer/Piping/test/Riskeer.Piping.Service.Test/Probabilistic/ProbabilisticPipingCalculationServiceTest.cs (.../ProbabilisticPipingCalculationServiceTest.cs) (revision cf29688172754dfc3c2ff94c4ac05fc2f6f17963)
+++ Riskeer/Piping/test/Riskeer.Piping.Service.Test/Probabilistic/ProbabilisticPipingCalculationServiceTest.cs (.../ProbabilisticPipingCalculationServiceTest.cs) (revision 1d1743fbce08093c724d0d180e41943e93633a8f)
@@ -19,13 +19,216 @@
// Stichting Deltares and remain full property of Stichting Deltares at all times.
// All rights reserved.
+using System.IO;
+using System.Linq;
+using Core.Common.TestUtil;
using NUnit.Framework;
+using Rhino.Mocks;
+using Riskeer.Common.Data.AssessmentSection;
+using Riskeer.Common.Data.Hydraulics;
+using Riskeer.Common.Data.TestUtil;
+using Riskeer.Common.Service.TestUtil;
+using Riskeer.Piping.Data;
+using Riskeer.Piping.Data.TestUtil;
+using Riskeer.Piping.Service.Probabilistic;
namespace Riskeer.Piping.Service.Test.Probabilistic
{
[TestFixture]
public class ProbabilisticPipingCalculationServiceTest
{
+ private static readonly string testDataPath = TestHelper.GetTestDataPath(TestDataPath.Riskeer.Integration.Service, "HydraRingCalculation");
+ private static readonly string validFilePath = Path.Combine(testDataPath, "HRD dutch coast south.sqlite");
+ [Test]
+ public void Validate_NoHydraulicBoundaryLocation_LogsMessageAndReturnFalse()
+ {
+ // Setup
+ var failureMechanism = new PipingFailureMechanism();
+
+ var mockRepository = new MockRepository();
+ IAssessmentSection assessmentSection = AssessmentSectionTestHelper.CreateAssessmentSectionStub(
+ failureMechanism, mockRepository, validFilePath);
+ mockRepository.ReplayAll();
+
+ var calculation = new TestProbabilisticPipingCalculation();
+
+ // Call
+ var isValid = false;
+ void Call() => isValid = ProbabilisticPipingCalculationService.Validate(calculation, assessmentSection);
+
+ // Assert
+ TestHelper.AssertLogMessages(Call, messages =>
+ {
+ string[] msgs = messages.ToArray();
+ Assert.AreEqual(3, msgs.Length);
+ CalculationServiceTestHelper.AssertValidationStartMessage(msgs[0]);
+ StringAssert.StartsWith("Er is geen hydraulische belastingenlocatie geselecteerd.", msgs[1]);
+ CalculationServiceTestHelper.AssertValidationEndMessage(msgs[2]);
+ });
+ Assert.IsFalse(isValid);
+
+ mockRepository.VerifyAll();
+ }
+
+ [Test]
+ public void Validate_InvalidHydraulicBoundaryDatabase_LogsMessageAndReturnFalse()
+ {
+ // Setup
+ var failureMechanism = new PipingFailureMechanism();
+
+ string invalidFilePath = Path.Combine(testDataPath, "notexisting.sqlite");
+
+ var mockRepository = new MockRepository();
+ IAssessmentSection assessmentSection = AssessmentSectionTestHelper.CreateAssessmentSectionStub(failureMechanism,
+ mockRepository,
+ invalidFilePath);
+ mockRepository.ReplayAll();
+
+ var calculation = new TestProbabilisticPipingCalculation
+ {
+ InputParameters =
+ {
+ HydraulicBoundaryLocation = new HydraulicBoundaryLocation(1, "name", 2, 2),
+ }
+ };
+
+ // Call
+ var isValid = true;
+ void Call() => isValid = ProbabilisticPipingCalculationService.Validate(calculation, assessmentSection);
+
+ // Assert
+ TestHelper.AssertLogMessages(Call, messages =>
+ {
+ string[] msgs = messages.ToArray();
+ Assert.AreEqual(3, msgs.Length);
+ CalculationServiceTestHelper.AssertValidationStartMessage(msgs[0]);
+ StringAssert.StartsWith("Herstellen van de verbinding met de hydraulische belastingendatabase is mislukt. Fout bij het lezen van bestand", msgs[1]);
+ CalculationServiceTestHelper.AssertValidationEndMessage(msgs[2]);
+ });
+ Assert.IsFalse(isValid);
+
+ mockRepository.VerifyAll();
+ }
+
+ [Test]
+ public void Validate_InvalidPreprocessorDirectory_LogsMessageAndReturnFalse()
+ {
+ // Setup
+ var failureMechanism = new PipingFailureMechanism();
+
+ var mockRepository = new MockRepository();
+ IAssessmentSection assessmentSection = AssessmentSectionTestHelper.CreateAssessmentSectionStub(failureMechanism,
+ mockRepository,
+ validFilePath);
+
+ assessmentSection.HydraulicBoundaryDatabase.HydraulicLocationConfigurationSettings.CanUsePreprocessor = true;
+ assessmentSection.HydraulicBoundaryDatabase.HydraulicLocationConfigurationSettings.UsePreprocessor = true;
+ assessmentSection.HydraulicBoundaryDatabase.HydraulicLocationConfigurationSettings.PreprocessorDirectory = "NonExistingPreprocessorDirectory";
+
+ mockRepository.ReplayAll();
+
+ var calculation = new TestProbabilisticPipingCalculation
+ {
+ InputParameters =
+ {
+ HydraulicBoundaryLocation = new HydraulicBoundaryLocation(1, "name", 2, 2),
+ }
+ };
+
+ // Call
+ var isValid = true;
+ void Call() => isValid = ProbabilisticPipingCalculationService.Validate(calculation, assessmentSection);
+
+ // Assert
+ TestHelper.AssertLogMessages(Call, messages =>
+ {
+ string[] msgs = messages.ToArray();
+ Assert.AreEqual(3, msgs.Length);
+ CalculationServiceTestHelper.AssertValidationStartMessage(msgs[0]);
+ Assert.AreEqual("De bestandsmap waar de preprocessor bestanden opslaat is ongeldig. De bestandsmap bestaat niet.", msgs[1]);
+ CalculationServiceTestHelper.AssertValidationEndMessage(msgs[2]);
+ });
+ Assert.IsFalse(isValid);
+
+ mockRepository.VerifyAll();
+ }
+
+ [Test]
+ public void Validate_ValidHydraulicBoundaryDatabaseWithoutSettings_LogsMessageAndReturnFalse()
+ {
+ // Setup
+ var failureMechanism = new PipingFailureMechanism();
+
+ string invalidFilePath = Path.Combine(testDataPath, "HRD nosettings.sqlite");
+
+ var mockRepository = new MockRepository();
+ IAssessmentSection assessmentSection = AssessmentSectionTestHelper.CreateAssessmentSectionStub(failureMechanism,
+ mockRepository,
+ invalidFilePath);
+ mockRepository.ReplayAll();
+
+ var calculation = new TestProbabilisticPipingCalculation
+ {
+ InputParameters =
+ {
+ HydraulicBoundaryLocation = new HydraulicBoundaryLocation(1, "name", 2, 2),
+ }
+ };
+
+ // Call
+ var isValid = false;
+ void Call() => isValid = ProbabilisticPipingCalculationService.Validate(calculation, assessmentSection);
+
+ // Assert
+ TestHelper.AssertLogMessages(Call, messages =>
+ {
+ string[] msgs = messages.ToArray();
+ Assert.AreEqual(3, msgs.Length);
+ CalculationServiceTestHelper.AssertValidationStartMessage(msgs[0]);
+ StringAssert.StartsWith("Herstellen van de verbinding met de hydraulische belastingendatabase is mislukt. Fout bij het lezen van bestand", msgs[1]);
+ CalculationServiceTestHelper.AssertValidationEndMessage(msgs[2]);
+ });
+ Assert.IsFalse(isValid);
+
+ mockRepository.VerifyAll();
+ }
+
+ [Test]
+ public void Validate_WithoutImportedHydraulicBoundaryDatabase_LogsMessageAndReturnFalse()
+ {
+ // Setup
+ var failureMechanism = new PipingFailureMechanism();
+
+ var mockRepository = new MockRepository();
+ IAssessmentSection assessmentSection = AssessmentSectionTestHelper.CreateAssessmentSectionStub(failureMechanism,
+ mockRepository);
+ mockRepository.ReplayAll();
+
+ var calculation = new TestProbabilisticPipingCalculation
+ {
+ InputParameters =
+ {
+ HydraulicBoundaryLocation = new HydraulicBoundaryLocation(1, "name", 2, 2),
+ }
+ };
+
+ // Call
+ var isValid = false;
+ void Call() => isValid = ProbabilisticPipingCalculationService.Validate(calculation, assessmentSection);
+
+ // Assert
+ TestHelper.AssertLogMessages(Call, messages =>
+ {
+ string[] msgs = messages.ToArray();
+ Assert.AreEqual(3, msgs.Length);
+ CalculationServiceTestHelper.AssertValidationStartMessage(msgs[0]);
+ Assert.AreEqual("Er is geen hydraulische belastingendatabase geïmporteerd.", msgs[1]);
+ CalculationServiceTestHelper.AssertValidationEndMessage(msgs[2]);
+ });
+ Assert.IsFalse(isValid);
+
+ mockRepository.VerifyAll();
+ }
}
}
\ No newline at end of file