Index: Ringtoets/Piping/src/Ringtoets.Piping.Forms/PipingCalculationConfigurationHelper.cs =================================================================== diff -u -r7ae9100ff4e61169edcefaeb01b72d492431742f -r022f34b88de641b0b3b263b8eef61f57980f7891 --- Ringtoets/Piping/src/Ringtoets.Piping.Forms/PipingCalculationConfigurationHelper.cs (.../PipingCalculationConfigurationHelper.cs) (revision 7ae9100ff4e61169edcefaeb01b72d492431742f) +++ Ringtoets/Piping/src/Ringtoets.Piping.Forms/PipingCalculationConfigurationHelper.cs (.../PipingCalculationConfigurationHelper.cs) (revision 022f34b88de641b0b3b263b8eef61f57980f7891) @@ -26,7 +26,9 @@ using Core.Common.Base.Geometry; using log4net; using Ringtoets.Common.Data.Calculation; +using Ringtoets.Common.Data.Hydraulics; using Ringtoets.Common.Forms.Helpers; +using Ringtoets.Common.Forms.UITypeEditors; using Ringtoets.Piping.Data; using Ringtoets.Piping.Forms.Properties; using Ringtoets.Piping.Primitives; @@ -111,6 +113,24 @@ .ToList(); } + /// + /// Gets the sorted selectable hydraulic boundary locations from . + /// + /// The available hydraulic boudnary locations. + /// The reference point to which the distance needs to be + /// calculated in . + /// An ordered list of selectable hydraulic boundary locations. + public static IEnumerable GetSelectableHydraulicBoundaryLocations( + IEnumerable hydraulicBoundaryLocations, RingtoetsPipingSurfaceLine surfaceLine) + { + Point2D referencePoint = surfaceLine != null + ? surfaceLine.ReferenceLineIntersectionWorldPoint + : null; + return hydraulicBoundaryLocations.Select(hbl => new SelectableHydraulicBoundaryLocation(hbl, referencePoint)) + .OrderBy(hbl => hbl.Distance) + .ThenBy(hbl => hbl.HydraulicBoundaryLocation.Id); + } + private static CalculationGroup CreateCalculationGroup(RingtoetsPipingSurfaceLine surfaceLine, IEnumerable soilModels, GeneralPipingInput generalInput) { var calculationGroup = new CalculationGroup(surfaceLine.Name, true); Index: Ringtoets/Piping/src/Ringtoets.Piping.Forms/PropertyClasses/PipingInputContextProperties.cs =================================================================== diff -u -rc9bc3ec71edfc189d0d9724627b15f1abdc7fc1d -r022f34b88de641b0b3b263b8eef61f57980f7891 --- Ringtoets/Piping/src/Ringtoets.Piping.Forms/PropertyClasses/PipingInputContextProperties.cs (.../PipingInputContextProperties.cs) (revision c9bc3ec71edfc189d0d9724627b15f1abdc7fc1d) +++ Ringtoets/Piping/src/Ringtoets.Piping.Forms/PropertyClasses/PipingInputContextProperties.cs (.../PipingInputContextProperties.cs) (revision 022f34b88de641b0b3b263b8eef61f57980f7891) @@ -22,7 +22,6 @@ using System.Collections.Generic; using System.ComponentModel; using System.Drawing.Design; -using System.Linq; using Core.Common.Base.Data; using Core.Common.Base.Geometry; using Core.Common.Gui.Attributes; @@ -117,13 +116,13 @@ return false; } + /// + /// Gets the available selectable hydraulic boundary locations on . + /// public IEnumerable GetSelectableHydraulicBoundaryLocations() { - Point2D referencePoint = SurfaceLine != null ? SurfaceLine.ReferenceLineIntersectionWorldPoint : null; - - return data.AvailableHydraulicBoundaryLocations.Select(hbl => new SelectableHydraulicBoundaryLocation(hbl, referencePoint)) - .OrderBy(hbl => hbl.Distance) - .ThenBy(hbl => hbl.HydraulicBoundaryLocation.Id); + return PipingCalculationConfigurationHelper.GetSelectableHydraulicBoundaryLocations( + data.AvailableHydraulicBoundaryLocations, SurfaceLine); } #region Hydraulic data Index: Ringtoets/Piping/test/Ringtoets.Piping.Forms.Test/PipingCalculationConfigurationHelperTest.cs =================================================================== diff -u -r6173a5eb258ea7b50a5f4aac71d2448db9e211c3 -r022f34b88de641b0b3b263b8eef61f57980f7891 --- Ringtoets/Piping/test/Ringtoets.Piping.Forms.Test/PipingCalculationConfigurationHelperTest.cs (.../PipingCalculationConfigurationHelperTest.cs) (revision 6173a5eb258ea7b50a5f4aac71d2448db9e211c3) +++ Ringtoets/Piping/test/Ringtoets.Piping.Forms.Test/PipingCalculationConfigurationHelperTest.cs (.../PipingCalculationConfigurationHelperTest.cs) (revision 022f34b88de641b0b3b263b8eef61f57980f7891) @@ -27,6 +27,8 @@ using Core.Common.TestUtil; using NUnit.Framework; using Ringtoets.Common.Data.Calculation; +using Ringtoets.Common.Data.Hydraulics; +using Ringtoets.Common.Forms.UITypeEditors; using Ringtoets.Piping.Data; using Ringtoets.Piping.Primitives; @@ -1139,5 +1141,72 @@ } #endregion + + #region GetSelectableHydraulicBoundaryLocations + + [Test] + public void GetSelectableHydraulicBoundaryLocations_WithLocationsNoSurfaceLine_ReturnLocationsSortedById() + { + // Setup + var hydraulicBoundaryLocations = new[] + { + new HydraulicBoundaryLocation(1, "A", 0, 1), + new HydraulicBoundaryLocation(4, "C", 0, 2), + new HydraulicBoundaryLocation(3, "D", 0, 3), + new HydraulicBoundaryLocation(2, "B", 0, 4) + }; + + // Call + IEnumerable selectableHydraulicBoundaryLocations = + PipingCalculationConfigurationHelper.GetSelectableHydraulicBoundaryLocations(hydraulicBoundaryLocations, null); + + // Assert + IEnumerable expectedList = + hydraulicBoundaryLocations.Select(hbl => new SelectableHydraulicBoundaryLocation(hbl, null)) + .OrderBy(hbl => hbl.HydraulicBoundaryLocation.Id); + CollectionAssert.AreEqual(expectedList, selectableHydraulicBoundaryLocations); + } + + [Test] + public void GetSelectableHydraulicBoundaryLocations_WithLocationsAndSurfaceLine_ReturnLocationsSortedByDistanceThenById() + { + // Setup + var hydraulicBoundaryLocations = new[] + { + new HydraulicBoundaryLocation(1, "A", 0, 10), + new HydraulicBoundaryLocation(4, "E", 0, 500), + new HydraulicBoundaryLocation(6, "F", 0, 100), + new HydraulicBoundaryLocation(5, "D", 0, 200), + new HydraulicBoundaryLocation(3, "C", 0, 200), + new HydraulicBoundaryLocation(2, "B", 0, 200) + }; + + RingtoetsPipingSurfaceLine surfaceLine = ValidSurfaceLine(0.0, 4.0); + surfaceLine.ReferenceLineIntersectionWorldPoint = new Point2D(0.0, 0.0); + + // Call + IEnumerable selectableHydraulicBoundaryLocations = + PipingCalculationConfigurationHelper.GetSelectableHydraulicBoundaryLocations(hydraulicBoundaryLocations, surfaceLine); + + // Assert + IEnumerable expectedList = hydraulicBoundaryLocations.Select + (hbl => new SelectableHydraulicBoundaryLocation(hbl, surfaceLine.ReferenceLineIntersectionWorldPoint)) + .OrderBy(hbl => hbl.Distance) + .ThenBy(hbl => hbl.HydraulicBoundaryLocation.Id); + CollectionAssert.AreEqual(expectedList, selectableHydraulicBoundaryLocations); + } + + private static RingtoetsPipingSurfaceLine ValidSurfaceLine(double xMin, double xMax) + { + var surfaceLine = new RingtoetsPipingSurfaceLine(); + surfaceLine.SetGeometry(new[] + { + new Point3D(xMin, 0.0, 0.0), + new Point3D(xMax, 0.0, 1.0) + }); + return surfaceLine; + } + + #endregion } } \ No newline at end of file