Index: Ringtoets/MacroStabilityInwards/src/Ringtoets.MacroStabilityInwards.KernelWrapper/Calculators/Waternet/Output/WaternetCalculatorResult.cs =================================================================== diff -u -rfc7a77a30ababe1d51f8fd39fa0fa599eb8011cd -r262e5ee967e56798894d0ea3167d110d0aea9684 --- Ringtoets/MacroStabilityInwards/src/Ringtoets.MacroStabilityInwards.KernelWrapper/Calculators/Waternet/Output/WaternetCalculatorResult.cs (.../WaternetCalculatorResult.cs) (revision fc7a77a30ababe1d51f8fd39fa0fa599eb8011cd) +++ Ringtoets/MacroStabilityInwards/src/Ringtoets.MacroStabilityInwards.KernelWrapper/Calculators/Waternet/Output/WaternetCalculatorResult.cs (.../WaternetCalculatorResult.cs) (revision 262e5ee967e56798894d0ea3167d110d0aea9684) @@ -36,7 +36,7 @@ /// The waternet lines. /// Thrown when /// or is null. - internal WaternetCalculatorResult(WaternetPhreaticLineResult[] phreaticLines, WaternetLineResult[] waternetLines) + internal WaternetCalculatorResult(IEnumerable phreaticLines, IEnumerable waternetLines) { if (phreaticLines == null) { Index: Ringtoets/MacroStabilityInwards/src/Ringtoets.MacroStabilityInwards.KernelWrapper/Creators/Output/WaternetCalculatorResultCreator.cs =================================================================== diff -u --- Ringtoets/MacroStabilityInwards/src/Ringtoets.MacroStabilityInwards.KernelWrapper/Creators/Output/WaternetCalculatorResultCreator.cs (revision 0) +++ Ringtoets/MacroStabilityInwards/src/Ringtoets.MacroStabilityInwards.KernelWrapper/Creators/Output/WaternetCalculatorResultCreator.cs (revision 262e5ee967e56798894d0ea3167d110d0aea9684) @@ -0,0 +1,81 @@ +// Copyright (C) Stichting Deltares 2017. All rights reserved. +// +// This file is part of Ringtoets. +// +// Ringtoets is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program. If not, see . +// +// All names, logos, and references to "Deltares" are registered trademarks of +// Stichting Deltares and remain full property of Stichting Deltares at all times. +// All rights reserved. + +using System; +using System.Collections.Generic; +using System.Linq; +using Deltares.WTIStability.Data.Geo; +using Ringtoets.MacroStabilityInwards.KernelWrapper.Calculators.Waternet.Output; +using Point2D = Core.Common.Base.Geometry.Point2D; + +namespace Ringtoets.MacroStabilityInwards.KernelWrapper.Creators.Output +{ + /// + /// Creates instances. + /// + internal static class WaternetCalculatorResultCreator + { + /// + /// Creates a based on the information + /// given in the . + /// + /// The output to create the result for. + /// A new with information + /// taken from the . + /// Thrown when + /// is null. + public static WaternetCalculatorResult Create(Waternet waternet) + { + if (waternet == null) + { + throw new ArgumentNullException(nameof(waternet)); + } + + var phreaticLineLookup = new Dictionary + { + { + waternet.PhreaticLine, CreatePhreaticLine(waternet.PhreaticLine) + } + }; + foreach (HeadLine headLine in waternet.HeadLineList) + { + phreaticLineLookup.Add(headLine, CreatePhreaticLine(headLine)); + } + + return new WaternetCalculatorResult(phreaticLineLookup.Values, + waternet.WaternetLineList.Select(wl => CreateWaternetLine(wl, phreaticLineLookup))); + } + + private static WaternetLineResult CreateWaternetLine(WaternetLine waternetLine, + IDictionary phreaticLines) + { + return new WaternetLineResult(waternetLine.Name, + waternetLine.Points.Select(p => new Point2D(p.X, p.Z)).ToArray(), + phreaticLines[waternetLine.HeadLine]); + } + + private static WaternetPhreaticLineResult CreatePhreaticLine(GeometryPointString phreaticLine) + { + return new WaternetPhreaticLineResult(phreaticLine.Name, + phreaticLine.Points.Select(p => new Point2D(p.X, p.Z)).ToArray()); + } + } +} \ No newline at end of file Index: Ringtoets/MacroStabilityInwards/src/Ringtoets.MacroStabilityInwards.KernelWrapper/Ringtoets.MacroStabilityInwards.KernelWrapper.csproj =================================================================== diff -u -rfc7a77a30ababe1d51f8fd39fa0fa599eb8011cd -r262e5ee967e56798894d0ea3167d110d0aea9684 --- Ringtoets/MacroStabilityInwards/src/Ringtoets.MacroStabilityInwards.KernelWrapper/Ringtoets.MacroStabilityInwards.KernelWrapper.csproj (.../Ringtoets.MacroStabilityInwards.KernelWrapper.csproj) (revision fc7a77a30ababe1d51f8fd39fa0fa599eb8011cd) +++ Ringtoets/MacroStabilityInwards/src/Ringtoets.MacroStabilityInwards.KernelWrapper/Ringtoets.MacroStabilityInwards.KernelWrapper.csproj (.../Ringtoets.MacroStabilityInwards.KernelWrapper.csproj) (revision 262e5ee967e56798894d0ea3167d110d0aea9684) @@ -83,6 +83,7 @@ + Index: Ringtoets/MacroStabilityInwards/test/Ringtoets.MacroStabilityInwards.KernelWrapper.Test/Creators/Output/WaternetCalculatorResultCreatorTest.cs =================================================================== diff -u --- Ringtoets/MacroStabilityInwards/test/Ringtoets.MacroStabilityInwards.KernelWrapper.Test/Creators/Output/WaternetCalculatorResultCreatorTest.cs (revision 0) +++ Ringtoets/MacroStabilityInwards/test/Ringtoets.MacroStabilityInwards.KernelWrapper.Test/Creators/Output/WaternetCalculatorResultCreatorTest.cs (revision 262e5ee967e56798894d0ea3167d110d0aea9684) @@ -0,0 +1,136 @@ +// Copyright (C) Stichting Deltares 2017. All rights reserved. +// +// This file is part of Ringtoets. +// +// Ringtoets is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program. If not, see . +// +// All names, logos, and references to "Deltares" are registered trademarks of +// Stichting Deltares and remain full property of Stichting Deltares at all times. +// All rights reserved. + +using System; +using System.Linq; +using Deltares.WTIStability.Data.Geo; +using NUnit.Framework; +using Ringtoets.MacroStabilityInwards.KernelWrapper.Calculators.Waternet.Output; +using Ringtoets.MacroStabilityInwards.KernelWrapper.Creators.Output; +using Point2D = Core.Common.Base.Geometry.Point2D; + +namespace Ringtoets.MacroStabilityInwards.KernelWrapper.Test.Creators.Output +{ + [TestFixture] + public class WaternetCalculatorResultCreatorTest + { + [Test] + public void Create_WaternetNull_ThrowsArgumentNullException() + { + // Call + TestDelegate call = () => WaternetCalculatorResultCreator.Create(null); + + // Assert + var exception = Assert.Throws(call); + Assert.AreEqual("waternet", exception.ParamName); + } + + [Test] + public void Create_WaternetWithPhreaticLineAndHeadLinesAndWaternetLines_ReturnWaternetCalculatorResult() + { + // Setup + var headLine = new HeadLine + { + Name = "line 1", + Points = + { + new GeometryPoint(0, 0), + new GeometryPoint(1, 1) + } + }; + var phreaticLine = new PhreaticLine + { + Name = "line 2", + Points = + { + new GeometryPoint(2, 2), + new GeometryPoint(3, 3) + } + }; + var waternetLine = new WaternetLine + { + Name = "line 3", + Points = + { + new GeometryPoint(4, 4), + new GeometryPoint(5, 5) + }, + HeadLine = headLine + }; + + var waternet = new Waternet + { + HeadLineList = + { + headLine + }, + PhreaticLine = phreaticLine, + WaternetLineList = + { + waternetLine + } + }; + + // Call + WaternetCalculatorResult result = WaternetCalculatorResultCreator.Create(waternet); + + // Assert + AssertPhreaticLines(new GeometryPointString[] + { + phreaticLine, + headLine + }, result.PhreaticLines.ToArray()); + + AssertWaternetLines(new[] + { + waternetLine + }, result.WaternetLines.ToArray()); + } + + private static void AssertWaternetLines(WaternetLine[] expectedLines, WaternetLineResult[] actualLines) + { + Assert.AreEqual(expectedLines.Length, actualLines.Length); + + for (var i = 0; i < expectedLines.Length; i++) + { + Assert.AreEqual(expectedLines[i].Name, actualLines[i].Name); + CollectionAssert.AreEqual(expectedLines[i].Points.Select(p => new Point2D(p.X, p.Z)), actualLines[i].Geometry); + AssertPhreaticLine(expectedLines[i].HeadLine, actualLines[i].PhreaticLine); + } + } + + private static void AssertPhreaticLines(GeometryPointString[] expectedLines, WaternetPhreaticLineResult[] actualLines) + { + Assert.AreEqual(expectedLines.Length, actualLines.Length); + + for (var i = 0; i < expectedLines.Length; i++) + { + AssertPhreaticLine(expectedLines[i], actualLines[i]); + } + } + + private static void AssertPhreaticLine(GeometryPointString expectedLine, WaternetPhreaticLineResult actualLine) + { + Assert.AreEqual(expectedLine.Name, actualLine.Name); + CollectionAssert.AreEqual(expectedLine.Points.Select(p => new Point2D(p.X, p.Z)), actualLine.Geometry); + } + } +} \ No newline at end of file Index: Ringtoets/MacroStabilityInwards/test/Ringtoets.MacroStabilityInwards.KernelWrapper.Test/Ringtoets.MacroStabilityInwards.KernelWrapper.Test.csproj =================================================================== diff -u -rfc7a77a30ababe1d51f8fd39fa0fa599eb8011cd -r262e5ee967e56798894d0ea3167d110d0aea9684 --- Ringtoets/MacroStabilityInwards/test/Ringtoets.MacroStabilityInwards.KernelWrapper.Test/Ringtoets.MacroStabilityInwards.KernelWrapper.Test.csproj (.../Ringtoets.MacroStabilityInwards.KernelWrapper.Test.csproj) (revision fc7a77a30ababe1d51f8fd39fa0fa599eb8011cd) +++ Ringtoets/MacroStabilityInwards/test/Ringtoets.MacroStabilityInwards.KernelWrapper.Test/Ringtoets.MacroStabilityInwards.KernelWrapper.Test.csproj (.../Ringtoets.MacroStabilityInwards.KernelWrapper.Test.csproj) (revision 262e5ee967e56798894d0ea3167d110d0aea9684) @@ -101,6 +101,7 @@ +