Index: Ringtoets/DuneErosion/src/Ringtoets.DuneErosion.Forms/Factories/DuneErosionMapDataFeaturesFactory.cs
===================================================================
diff -u -rd77f0eae87afa15b1a5484d5ef7c54f952a04166 -r96ac681afe124833d844548e00dee33c5aa81414
--- Ringtoets/DuneErosion/src/Ringtoets.DuneErosion.Forms/Factories/DuneErosionMapDataFeaturesFactory.cs (.../DuneErosionMapDataFeaturesFactory.cs) (revision d77f0eae87afa15b1a5484d5ef7c54f952a04166)
+++ Ringtoets/DuneErosion/src/Ringtoets.DuneErosion.Forms/Factories/DuneErosionMapDataFeaturesFactory.cs (.../DuneErosionMapDataFeaturesFactory.cs) (revision 96ac681afe124833d844548e00dee33c5aa81414)
@@ -20,13 +20,16 @@
// All rights reserved.
using System;
+using System.Collections.Generic;
using System.Globalization;
+using System.Linq;
using Core.Components.Gis.Data;
using Core.Components.Gis.Features;
using Ringtoets.Common.Forms.Factories;
using Ringtoets.Common.Util;
using Ringtoets.DuneErosion.Data;
using Ringtoets.DuneErosion.Forms.Properties;
+using Ringtoets.DuneErosion.Forms.Views;
using RingtoetsDuneErosionDataResources = Ringtoets.DuneErosion.Data.Properties.Resources;
using RingtoetsCommonUtilResources = Ringtoets.Common.Util.Properties.Resources;
@@ -75,5 +78,54 @@
return features;
}
+
+ ///
+ /// Create dune location features based on the provided .
+ ///
+ /// The to create the location features for.
+ /// An array of features or an empty array when does not contain
+ /// any dune locations.
+ /// Thrown when is null.
+ public static IEnumerable CreateDuneLocationFeatures(DuneErosionFailureMechanism failureMechanism)
+ {
+ if (failureMechanism == null)
+ {
+ throw new ArgumentNullException(nameof(failureMechanism));
+ }
+
+ return AggregatedDuneLocationFactory.CreateAggregatedDuneLocations(failureMechanism)
+ .Select(CreateDuneLocationFeature)
+ .ToArray();
+ }
+
+ private static MapFeature CreateDuneLocationFeature(AggregatedDuneLocation location)
+ {
+ MapFeature feature = RingtoetsMapDataFeaturesFactoryHelper.CreateSinglePointMapFeature(location.Location);
+ feature.MetaData[RingtoetsCommonUtilResources.MetaData_ID] = location.Id;
+ feature.MetaData[RingtoetsCommonUtilResources.MetaData_Name] = location.Name;
+ feature.MetaData[Resources.MetaData_CoastalAreaId] = location.CoastalAreaId;
+ feature.MetaData[Resources.MetaData_Offset] = location.Offset.ToString(RingtoetsDuneErosionDataResources.DuneLocation_Offset_format,
+ CultureInfo.InvariantCulture);
+
+ feature.MetaData["Rekenwaarde h(Iv->IIv)"] = location.WaterLevelForMechanismSpecificFactorizedSignalingNorm.ToString();
+ feature.MetaData["Rekenwaarde h(IIv->IIIv)"] = location.WaterLevelForMechanismSpecificSignalingNorm.ToString();
+ feature.MetaData["Rekenwaarde h(IIIv->IVv)"] = location.WaterLevelForMechanismSpecificLowerLimitNorm.ToString();
+ feature.MetaData["Rekenwaarde h(IVv->Vv)"] = location.WaterLevelForLowerLimitNorm.ToString();
+ feature.MetaData["Rekenwaarde h(Vv->VIv)"] = location.WaterLevelForFactorizedLowerLimitNorm.ToString();
+
+ feature.MetaData["Rekenwaarde Hs(Iv->IIv)"] = location.WaveHeightForMechanismSpecificFactorizedSignalingNorm.ToString();
+ feature.MetaData["Rekenwaarde Hs(IIv->IIIv)"] = location.WaveHeightForMechanismSpecificSignalingNorm.ToString();
+ feature.MetaData["Rekenwaarde Hs(IIIv->IVv)"] = location.WaveHeightForMechanismSpecificLowerLimitNorm.ToString();
+ feature.MetaData["Rekenwaarde Hs(IVv->Vv)"] = location.WaveHeightForLowerLimitNorm.ToString();
+ feature.MetaData["Rekenwaarde Hs(Vv->VIv)"] = location.WaveHeightForFactorizedLowerLimitNorm.ToString();
+
+ feature.MetaData["Rekenwaarde Tp(Iv->IIv)"] = location.WavePeriodForMechanismSpecificFactorizedSignalingNorm.ToString();
+ feature.MetaData["Rekenwaarde Tp(IIv->IIIv)"] = location.WavePeriodForMechanismSpecificSignalingNorm.ToString();
+ feature.MetaData["Rekenwaarde Tp(IIIv->IVv)"] = location.WavePeriodForMechanismSpecificLowerLimitNorm.ToString();
+ feature.MetaData["Rekenwaarde Tp(IVv->Vv)"] = location.WavePeriodForLowerLimitNorm.ToString();
+ feature.MetaData["Rekenwaarde Tp(Vv->VIv)"] = location.WavePeriodForFactorizedLowerLimitNorm.ToString();
+
+ return feature;
+ }
}
}
\ No newline at end of file
Index: Ringtoets/DuneErosion/test/Ringtoets.DuneErosion.Forms.Test/Factories/DuneErosionMapDataFeaturesFactoryTest.cs
===================================================================
diff -u -r649b0974fb71df7368d19682bc255618f44d49c1 -r96ac681afe124833d844548e00dee33c5aa81414
--- Ringtoets/DuneErosion/test/Ringtoets.DuneErosion.Forms.Test/Factories/DuneErosionMapDataFeaturesFactoryTest.cs (.../DuneErosionMapDataFeaturesFactoryTest.cs) (revision 649b0974fb71df7368d19682bc255618f44d49c1)
+++ Ringtoets/DuneErosion/test/Ringtoets.DuneErosion.Forms.Test/Factories/DuneErosionMapDataFeaturesFactoryTest.cs (.../DuneErosionMapDataFeaturesFactoryTest.cs) (revision 96ac681afe124833d844548e00dee33c5aa81414)
@@ -20,13 +20,15 @@
// All rights reserved.
using System;
+using System.Collections.Generic;
using System.Globalization;
using System.Linq;
using Core.Common.Base.Data;
using Core.Common.Base.Geometry;
using Core.Components.Gis.Features;
using NUnit.Framework;
using Ringtoets.Common.Data.TestUtil;
+using Ringtoets.Common.Util.TestUtil;
using Ringtoets.DuneErosion.Data;
using Ringtoets.DuneErosion.Data.TestUtil;
using Ringtoets.DuneErosion.Forms.Factories;
@@ -40,7 +42,7 @@
public void CreateDuneLocationFeatures_DuneLocationsNull_ThrowsArgumentNullException()
{
// Call
- TestDelegate call = () => DuneErosionMapDataFeaturesFactory.CreateDuneLocationFeatures(null);
+ TestDelegate call = () => DuneErosionMapDataFeaturesFactory.CreateDuneLocationFeatures((DuneLocation[]) null);
// Assert
string paramName = Assert.Throws(call).ParamName;
@@ -132,6 +134,159 @@
AssertEqualFeatureCollections(points, features);
}
+ [Test]
+ public void CreateDuneLocationsFeatures_FailureMechanismNull_ThrowsArgumentNullException()
+ {
+ // Call
+ TestDelegate call = () => DuneErosionMapDataFeaturesFactory.CreateDuneLocationFeatures((DuneErosionFailureMechanism) null);
+
+ // Assert
+ var exception = Assert.Throws(call);
+ Assert.AreEqual("failureMechanism", exception.ParamName);
+ }
+
+ [Test]
+ public void CreateDuneLocationFeatures_FailureMechanismWithoutDuneLocations_ReturnsEmptyFeaturesArray()
+ {
+ // Call
+ IEnumerable features = DuneErosionMapDataFeaturesFactory.CreateDuneLocationFeatures(new DuneErosionFailureMechanism());
+
+ // Assert
+ CollectionAssert.IsEmpty(features);
+ }
+
+ [Test]
+ [TestCase(true)]
+ [TestCase(false)]
+ public void CreateDuneLocationsFeatures_WithFailureMechanism_ReturnFeature(bool withOutput)
+ {
+ // Setup
+ var duneLocations = new[]
+ {
+ CreateDuneLocation(1),
+ CreateDuneLocation(2)
+ };
+
+ var failureMechanism = new DuneErosionFailureMechanism();
+ failureMechanism.SetDuneLocations(duneLocations);
+
+ if (withOutput)
+ {
+ DuneLocationsTestHelper.SetDuneLocationCalculationOutput(failureMechanism);
+ }
+
+ // Call
+ IEnumerable features = DuneErosionMapDataFeaturesFactory.CreateDuneLocationFeatures(failureMechanism);
+
+ // Assert
+ Assert.AreEqual(duneLocations.Length, features.Count());
+
+ for (var i = 0; i < duneLocations.Length; i++)
+ {
+ DuneLocation expectedDuneLocation = duneLocations[i];
+ MapFeature mapFeature = features.ElementAt(i);
+
+ Assert.AreEqual(expectedDuneLocation.Id, mapFeature.MetaData["ID"]);
+ Assert.AreEqual(expectedDuneLocation.Name, mapFeature.MetaData["Naam"]);
+ Assert.AreEqual(expectedDuneLocation.CoastalAreaId, mapFeature.MetaData["Kustvaknummer"]);
+ Assert.AreEqual(expectedDuneLocation.Offset.ToString("0.#", CultureInfo.InvariantCulture), mapFeature.MetaData["Metrering"]);
+ Assert.AreEqual(expectedDuneLocation.Location, mapFeature.MapGeometries.First().PointCollections.First().Single());
+
+ MapFeaturesMetaDataTestHelper.AssertMetaData(
+ GetExpectedWaterLevel(failureMechanism.CalculationsForMechanismSpecificFactorizedSignalingNorm, expectedDuneLocation),
+ mapFeature, "Rekenwaarde h(Iv->IIv)");
+ MapFeaturesMetaDataTestHelper.AssertMetaData(
+ GetExpectedWaterLevel(failureMechanism.CalculationsForMechanismSpecificSignalingNorm, expectedDuneLocation),
+ mapFeature, "Rekenwaarde h(IIv->IIIv)");
+ MapFeaturesMetaDataTestHelper.AssertMetaData(
+ GetExpectedWaterLevel(failureMechanism.CalculationsForMechanismSpecificLowerLimitNorm, expectedDuneLocation),
+ mapFeature, "Rekenwaarde h(IIIv->IVv)");
+ MapFeaturesMetaDataTestHelper.AssertMetaData(
+ GetExpectedWaterLevel(failureMechanism.CalculationsForLowerLimitNorm, expectedDuneLocation),
+ mapFeature, "Rekenwaarde h(IVv->Vv)");
+ MapFeaturesMetaDataTestHelper.AssertMetaData(
+ GetExpectedWaterLevel(failureMechanism.CalculationsForFactorizedLowerLimitNorm, expectedDuneLocation),
+ mapFeature, "Rekenwaarde h(Vv->VIv)");
+
+ MapFeaturesMetaDataTestHelper.AssertMetaData(
+ GetExpectedWaveHeight(failureMechanism.CalculationsForMechanismSpecificFactorizedSignalingNorm, expectedDuneLocation),
+ mapFeature, "Rekenwaarde Hs(Iv->IIv)");
+ MapFeaturesMetaDataTestHelper.AssertMetaData(
+ GetExpectedWaveHeight(failureMechanism.CalculationsForMechanismSpecificSignalingNorm, expectedDuneLocation),
+ mapFeature, "Rekenwaarde Hs(IIv->IIIv)");
+ MapFeaturesMetaDataTestHelper.AssertMetaData(
+ GetExpectedWaveHeight(failureMechanism.CalculationsForMechanismSpecificLowerLimitNorm, expectedDuneLocation),
+ mapFeature, "Rekenwaarde Hs(IIIv->IVv)");
+ MapFeaturesMetaDataTestHelper.AssertMetaData(
+ GetExpectedWaveHeight(failureMechanism.CalculationsForLowerLimitNorm, expectedDuneLocation),
+ mapFeature, "Rekenwaarde Hs(IVv->Vv)");
+ MapFeaturesMetaDataTestHelper.AssertMetaData(
+ GetExpectedWaveHeight(failureMechanism.CalculationsForFactorizedLowerLimitNorm, expectedDuneLocation),
+ mapFeature, "Rekenwaarde Hs(Vv->VIv)");
+
+ MapFeaturesMetaDataTestHelper.AssertMetaData(
+ GetExpectedWavePeriod(failureMechanism.CalculationsForMechanismSpecificFactorizedSignalingNorm, expectedDuneLocation),
+ mapFeature, "Rekenwaarde Tp(Iv->IIv)");
+ MapFeaturesMetaDataTestHelper.AssertMetaData(
+ GetExpectedWavePeriod(failureMechanism.CalculationsForMechanismSpecificSignalingNorm, expectedDuneLocation),
+ mapFeature, "Rekenwaarde Tp(IIv->IIIv)");
+ MapFeaturesMetaDataTestHelper.AssertMetaData(
+ GetExpectedWavePeriod(failureMechanism.CalculationsForMechanismSpecificLowerLimitNorm, expectedDuneLocation),
+ mapFeature, "Rekenwaarde Tp(IIIv->IVv)");
+ MapFeaturesMetaDataTestHelper.AssertMetaData(
+ GetExpectedWavePeriod(failureMechanism.CalculationsForLowerLimitNorm, expectedDuneLocation),
+ mapFeature, "Rekenwaarde Tp(IVv->Vv)");
+ MapFeaturesMetaDataTestHelper.AssertMetaData(
+ GetExpectedWavePeriod(failureMechanism.CalculationsForFactorizedLowerLimitNorm, expectedDuneLocation),
+ mapFeature, "Rekenwaarde Tp(Vv->VIv)");
+
+ Assert.AreEqual(19, mapFeature.MetaData.Keys.Count);
+ }
+ }
+
+ private static DuneLocation CreateDuneLocation(int seed)
+ {
+ var random = new Random(seed);
+
+ int id = random.Next();
+ return new DuneLocation(id, $"Location_{id}", new Point2D(random.NextDouble(), random.NextDouble()), new DuneLocation.ConstructionProperties
+ {
+ CoastalAreaId = random.Next(),
+ D50 = random.NextDouble(),
+ Offset = random.NextDouble()
+ });
+ }
+
+ private static string GetExpectedWaterLevel(IEnumerable calculations,
+ DuneLocation duneLocation)
+ {
+ RoundedDouble result = calculations
+ .Single(calculation => calculation.DuneLocation.Equals(duneLocation))
+ .Output?.WaterLevel ?? RoundedDouble.NaN;
+
+ return result.ToString();
+ }
+
+ private static string GetExpectedWaveHeight(IEnumerable calculations,
+ DuneLocation duneLocation)
+ {
+ RoundedDouble result = calculations
+ .Single(calculation => calculation.DuneLocation.Equals(duneLocation))
+ .Output?.WaveHeight ?? RoundedDouble.NaN;
+
+ return result.ToString();
+ }
+
+ private static string GetExpectedWavePeriod(IEnumerable calculations,
+ DuneLocation duneLocation)
+ {
+ RoundedDouble result = calculations
+ .Single(calculation => calculation.DuneLocation.Equals(duneLocation))
+ .Output?.WavePeriod ?? RoundedDouble.NaN;
+
+ return result.ToString();
+ }
+
private class ValidDuneLocation : DuneLocation
{
public ValidDuneLocation(Point2D location) : base(0, "", location, new ConstructionProperties()) {}
Index: Ringtoets/DuneErosion/test/Ringtoets.DuneErosion.Forms.Test/Ringtoets.DuneErosion.Forms.Test.csproj
===================================================================
diff -u -rbece430ab05641ddb6fe2976c5683028b82acb08 -r96ac681afe124833d844548e00dee33c5aa81414
--- Ringtoets/DuneErosion/test/Ringtoets.DuneErosion.Forms.Test/Ringtoets.DuneErosion.Forms.Test.csproj (.../Ringtoets.DuneErosion.Forms.Test.csproj) (revision bece430ab05641ddb6fe2976c5683028b82acb08)
+++ Ringtoets/DuneErosion/test/Ringtoets.DuneErosion.Forms.Test/Ringtoets.DuneErosion.Forms.Test.csproj (.../Ringtoets.DuneErosion.Forms.Test.csproj) (revision 96ac681afe124833d844548e00dee33c5aa81414)
@@ -118,6 +118,10 @@
{52093DA6-D545-476A-ADFD-12F56625E36B}
Ringtoets.Common.Service.TestUtil
+
+ {54DF6303-BF9A-4AE9-BE09-4AF50EF27412}
+ Ringtoets.Common.Util.TestUtil
+
{888D4097-8BC2-4703-9FB1-8744C94D525E}
Ringtoets.HydraRing.Calculation