Index: Ringtoets/MacroStabilityInwards/src/Ringtoets.MacroStabilityInwards.KernelWrapper/Kernels/Waternet/IWaternetKernel.cs
===================================================================
diff -u -rdfa159a984ea89b9e80109b2e55235a7ee09dfe4 -re2978d1198c3af45bda6e6ec14e26561fc992d71
--- Ringtoets/MacroStabilityInwards/src/Ringtoets.MacroStabilityInwards.KernelWrapper/Kernels/Waternet/IWaternetKernel.cs (.../IWaternetKernel.cs) (revision dfa159a984ea89b9e80109b2e55235a7ee09dfe4)
+++ Ringtoets/MacroStabilityInwards/src/Ringtoets.MacroStabilityInwards.KernelWrapper/Kernels/Waternet/IWaternetKernel.cs (.../IWaternetKernel.cs) (revision e2978d1198c3af45bda6e6ec14e26561fc992d71)
@@ -22,6 +22,7 @@
using Deltares.WTIStability;
using Deltares.WTIStability.Data.Geo;
using Ringtoets.MacroStabilityInwards.KernelWrapper.Calculators.Waternet;
+using WtiStabilityWaternet = Deltares.WTIStability.Data.Geo.Waternet;
namespace Ringtoets.MacroStabilityInwards.KernelWrapper.Kernels.Waternet
{
@@ -58,6 +59,11 @@
SurfaceLine2 SurfaceLine { set; }
///
+ /// Gets the waternet result.
+ ///
+ WtiStabilityWaternet Waternet { get; }
+
+ ///
/// Performs the Waternet calculation.
///
/// Thrown when
Index: Ringtoets/MacroStabilityInwards/src/Ringtoets.MacroStabilityInwards.KernelWrapper/Kernels/Waternet/WaternetKernelWrapper.cs
===================================================================
diff -u -r5859430bf93fa658cdceb8c2731de08f0a1c1ab7 -re2978d1198c3af45bda6e6ec14e26561fc992d71
--- Ringtoets/MacroStabilityInwards/src/Ringtoets.MacroStabilityInwards.KernelWrapper/Kernels/Waternet/WaternetKernelWrapper.cs (.../WaternetKernelWrapper.cs) (revision 5859430bf93fa658cdceb8c2731de08f0a1c1ab7)
+++ Ringtoets/MacroStabilityInwards/src/Ringtoets.MacroStabilityInwards.KernelWrapper/Kernels/Waternet/WaternetKernelWrapper.cs (.../WaternetKernelWrapper.cs) (revision e2978d1198c3af45bda6e6ec14e26561fc992d71)
@@ -20,10 +20,14 @@
// All rights reserved.
using System;
+using System.Collections.Generic;
+using System.Linq;
using Deltares.WTIStability;
using Deltares.WTIStability.Calculation.Wrapper;
using Deltares.WTIStability.Data.Geo;
+using Deltares.WTIStability.Data.Standard;
using Deltares.WTIStability.IO;
+using WtiStabilityWaternet = Deltares.WTIStability.Data.Geo.Waternet;
namespace Ringtoets.MacroStabilityInwards.KernelWrapper.Kernels.Waternet
{
@@ -71,21 +75,49 @@
}
}
+ public WtiStabilityWaternet Waternet { get; private set; }
+
public void Calculate()
{
try
{
var waternetCalculation = new WTIStabilityCalculation();
waternetCalculation.InitializeForDeterministic(WTISerializer.Serialize(stabilityModel));
- string s = waternetCalculation.CreateWaternet(false);
-
- Console.WriteLine(s);
+ string waternetXmlResult = waternetCalculation.CreateWaternet(false);
+ ReadValidationResult(waternetXmlResult);
+ ReadResult(waternetXmlResult);
}
- catch (Exception e)
+ catch (Exception e) when (!(e is WaternetKernelWrapperException))
{
throw new WaternetKernelWrapperException(e.Message, e);
}
}
+
+ private void ReadResult(string waternetXmlResult)
+ {
+ Waternet = WTIDeserializer.DeserializeWaternetUsedDuringCalculation(waternetXmlResult, false);
+ }
+
+ ///
+ /// Reads the validation results of the calculation.
+ ///
+ /// The result to read.
+ /// Thrown when there
+ /// are validation results of the type .
+ private static void ReadValidationResult(string waternetXmlResult)
+ {
+ List validationResults = WTIDeserializer.DeserializeValidationMessagesForWaternet(waternetXmlResult);
+ ValidationResult[] errorMessages = validationResults.Where(vr => vr.MessageType == ValidationResultType.Error).ToArray();
+
+ if (errorMessages.Any())
+ {
+ string message = errorMessages.Aggregate(string.Empty,
+ (current, validationResult) => current + $"{validationResult.Text}{Environment.NewLine}")
+ .Trim();
+
+ throw new WaternetKernelWrapperException(message);
+ }
+ }
}
}
\ No newline at end of file
Index: Ringtoets/MacroStabilityInwards/test/Ringtoets.MacroStabilityInwards.KernelWrapper.Test/Kernels/UpliftVan/UpliftVanKernelWrapperTest.cs
===================================================================
diff -u -rcf7e0b124334ae558a5d8dee4fc515577d5f6f25 -re2978d1198c3af45bda6e6ec14e26561fc992d71
--- Ringtoets/MacroStabilityInwards/test/Ringtoets.MacroStabilityInwards.KernelWrapper.Test/Kernels/UpliftVan/UpliftVanKernelWrapperTest.cs (.../UpliftVanKernelWrapperTest.cs) (revision cf7e0b124334ae558a5d8dee4fc515577d5f6f25)
+++ Ringtoets/MacroStabilityInwards/test/Ringtoets.MacroStabilityInwards.KernelWrapper.Test/Kernels/UpliftVan/UpliftVanKernelWrapperTest.cs (.../UpliftVanKernelWrapperTest.cs) (revision e2978d1198c3af45bda6e6ec14e26561fc992d71)
@@ -138,9 +138,9 @@
// Assert
var exception = Assert.Throws(test);
- CollectionAssert.AreEqual($"Index was out of range. Must be non-negative and less than the size of the collection.{Environment.NewLine}" +
- $"Parameter name: index{Environment.NewLine}" +
- "Fatale fout in Uplift-Van berekening", exception.Message);
+ Assert.AreEqual($"Index was out of range. Must be non-negative and less than the size of the collection.{Environment.NewLine}" +
+ $"Parameter name: index{Environment.NewLine}" +
+ "Fatale fout in Uplift-Van berekening", exception.Message);
}
[Test]
Index: Ringtoets/MacroStabilityInwards/test/Ringtoets.MacroStabilityInwards.KernelWrapper.Test/Kernels/Waternet/WaternetKernelWrapperTest.cs
===================================================================
diff -u -r5859430bf93fa658cdceb8c2731de08f0a1c1ab7 -re2978d1198c3af45bda6e6ec14e26561fc992d71
--- Ringtoets/MacroStabilityInwards/test/Ringtoets.MacroStabilityInwards.KernelWrapper.Test/Kernels/Waternet/WaternetKernelWrapperTest.cs (.../WaternetKernelWrapperTest.cs) (revision 5859430bf93fa658cdceb8c2731de08f0a1c1ab7)
+++ Ringtoets/MacroStabilityInwards/test/Ringtoets.MacroStabilityInwards.KernelWrapper.Test/Kernels/Waternet/WaternetKernelWrapperTest.cs (.../WaternetKernelWrapperTest.cs) (revision e2978d1198c3af45bda6e6ec14e26561fc992d71)
@@ -85,6 +85,109 @@
Assert.AreEqual(exception.InnerException.Message, exception.Message);
}
+ [Test]
+ public void Calculate_ExceptionDuringCalculation_OutputPropertiesNotSet()
+ {
+ // Setup
+ var kernel = new WaternetKernelWrapper();
+
+ // Call
+ TestDelegate test = () => kernel.Calculate();
+
+ // Assert
+ Assert.Throws(test);
+ Assert.IsNull(kernel.Waternet);
+ }
+
+ [Test]
+ public void Calculate_ValidationErrorInCalculation_ThrowsWaternetKernelWrapperException()
+ {
+ // Setup
+ WaternetKernelWrapper kernel = CreateInvalidKernel();
+
+ // Call
+ TestDelegate test = () => kernel.Calculate();
+
+ // Assert
+ var exception = Assert.Throws(test);
+ Assert.AreEqual("Waternet-Beoordeling: De punten in de hoogtegeometrie zijn niet oplopend. (x-waarde)", exception.Message);
+ }
+
+ private static WaternetKernelWrapper CreateInvalidKernel()
+ {
+ var point1 = new Point2D(0, 0);
+ var point2 = new Point2D(1, 1);
+ var point3 = new Point2D(2, 2);
+ var point4 = new Point2D(3, 3);
+ var curve1 = new GeometryCurve(point1, point2);
+ var curve2 = new GeometryCurve(point2, point3);
+ var curve3 = new GeometryCurve(point3, point4);
+ var curve4 = new GeometryCurve(point4, point1);
+ var loop = new GeometryLoop
+ {
+ CurveList =
+ {
+ curve1,
+ curve2,
+ curve3,
+ curve4
+ }
+ };
+ var geometrySurface = new GeometrySurface
+ {
+ OuterLoop = loop
+ };
+ var soil = new Soil();
+ return new WaternetKernelWrapper
+ {
+ SurfaceLine = new SurfaceLine2(),
+ Location = new StabilityLocation(),
+ SoilProfile = new SoilProfile2D
+ {
+ Geometry = new GeometryData
+ {
+ Points =
+ {
+ point1,
+ point2,
+ point3,
+ point4
+ },
+ Curves =
+ {
+ curve1,
+ curve2,
+ curve3,
+ curve4
+ },
+ Loops =
+ {
+ loop
+ },
+ Surfaces =
+ {
+ geometrySurface
+ }
+ },
+ Surfaces =
+ {
+ new SoilLayer2D
+ {
+ GeometrySurface = geometrySurface,
+ Soil = soil
+ }
+ }
+ },
+ SoilModel = new SoilModel
+ {
+ Soils =
+ {
+ soil
+ }
+ }
+ };
+ }
+
private static void AssertIrrelevantValues(StabilityModel stabilityModel)
{
Assert.IsNaN(stabilityModel.SlipPlaneConstraints.XEntryMin); // Not applicable for Waternet calculation
Index: Ringtoets/MacroStabilityInwards/test/Ringtoets.MacroStabilityInwards.KernelWrapper.TestUtil/Kernels/Waternet/WaternetKernelStub.cs
===================================================================
diff -u -r5859430bf93fa658cdceb8c2731de08f0a1c1ab7 -re2978d1198c3af45bda6e6ec14e26561fc992d71
--- Ringtoets/MacroStabilityInwards/test/Ringtoets.MacroStabilityInwards.KernelWrapper.TestUtil/Kernels/Waternet/WaternetKernelStub.cs (.../WaternetKernelStub.cs) (revision 5859430bf93fa658cdceb8c2731de08f0a1c1ab7)
+++ Ringtoets/MacroStabilityInwards/test/Ringtoets.MacroStabilityInwards.KernelWrapper.TestUtil/Kernels/Waternet/WaternetKernelStub.cs (.../WaternetKernelStub.cs) (revision e2978d1198c3af45bda6e6ec14e26561fc992d71)
@@ -23,6 +23,7 @@
using Deltares.WTIStability;
using Deltares.WTIStability.Data.Geo;
using Ringtoets.MacroStabilityInwards.KernelWrapper.Kernels.Waternet;
+using WtiStabilityWaternet = Deltares.WTIStability.Data.Geo.Waternet;
namespace Ringtoets.MacroStabilityInwards.KernelWrapper.TestUtil.Kernels.Waternet
{
@@ -49,6 +50,8 @@
public SurfaceLine2 SurfaceLine { get; set; }
+ public WtiStabilityWaternet Waternet { get; set; }
+
public void Calculate()
{
if (ThrowExceptionOnCalculate)