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)