Index: Ringtoets/Common/src/Ringtoets.Common.Forms/Factories/RingtoetsMapDataFeaturesFactory.cs =================================================================== diff -u -r929f7e82ce2fb85040c087744e427e700ccb5125 -ra960f05a5324192bd268fe1891fdcf8712b2905e --- Ringtoets/Common/src/Ringtoets.Common.Forms/Factories/RingtoetsMapDataFeaturesFactory.cs (.../RingtoetsMapDataFeaturesFactory.cs) (revision 929f7e82ce2fb85040c087744e427e700ccb5125) +++ Ringtoets/Common/src/Ringtoets.Common.Forms/Factories/RingtoetsMapDataFeaturesFactory.cs (.../RingtoetsMapDataFeaturesFactory.cs) (revision a960f05a5324192bd268fe1891fdcf8712b2905e) @@ -152,7 +152,7 @@ return AggregatedHydraulicBoundaryLocationFactory.CreateAggregatedHydraulicBoundaryLocations(assessmentSection) .Select(CreateHydraulicBoundaryLocationFeature) - .ToList(); + .ToArray(); } /// Index: Ringtoets/GrassCoverErosionOutwards/src/Ringtoets.GrassCoverErosionOutwards.Forms/Factories/GrassCoverErosionOutwardsMapDataFeaturesFactory.cs =================================================================== diff -u -r175cb39b49a146149811954e3800bebfc0819e3d -ra960f05a5324192bd268fe1891fdcf8712b2905e --- Ringtoets/GrassCoverErosionOutwards/src/Ringtoets.GrassCoverErosionOutwards.Forms/Factories/GrassCoverErosionOutwardsMapDataFeaturesFactory.cs (.../GrassCoverErosionOutwardsMapDataFeaturesFactory.cs) (revision 175cb39b49a146149811954e3800bebfc0819e3d) +++ Ringtoets/GrassCoverErosionOutwards/src/Ringtoets.GrassCoverErosionOutwards.Forms/Factories/GrassCoverErosionOutwardsMapDataFeaturesFactory.cs (.../GrassCoverErosionOutwardsMapDataFeaturesFactory.cs) (revision a960f05a5324192bd268fe1891fdcf8712b2905e) @@ -25,11 +25,13 @@ using Core.Common.Base.Data; using Core.Components.Gis.Data; using Core.Components.Gis.Features; +using Ringtoets.Common.Data.AssessmentSection; using Ringtoets.Common.Data.Hydraulics; using Ringtoets.Common.Forms.Factories; using Ringtoets.Common.Forms.PresentationObjects; using Ringtoets.GrassCoverErosionOutwards.Data; using Ringtoets.GrassCoverErosionOutwards.Forms.Properties; +using Ringtoets.GrassCoverErosionOutwards.Util; using RingtoetsCommonFormsResources = Ringtoets.Common.Forms.Properties.Resources; namespace Ringtoets.GrassCoverErosionOutwards.Forms.Factories @@ -101,5 +103,49 @@ return features; } + + /// + /// Create hydraulic boundary location features based on the provided + /// and . + /// + /// The to create the location features for. + /// The failure mechanism to create the locations for. + /// A collection of features. + /// Thrown when any parameter is null. + public static IEnumerable CreateHydraulicBoundaryLocationsFeatures(IAssessmentSection assessmentSection, + GrassCoverErosionOutwardsFailureMechanism failureMechanism) + { + if (assessmentSection == null) + { + throw new ArgumentNullException(nameof(assessmentSection)); + } + + if (failureMechanism == null) + { + throw new ArgumentNullException(nameof(failureMechanism)); + } + + return GrassCoverErosionOutwardsAggregatedHydraulicBoundaryLocationFactory.CreateAggregatedHydraulicBoundaryLocations(assessmentSection, failureMechanism) + .Select(CreateHydraulicBoundaryLocationFeature) + .ToArray(); + } + + private static MapFeature CreateHydraulicBoundaryLocationFeature(GrassCoverErosionOutwardsAggregatedHydraulicBoundaryLocation location) + { + MapFeature feature = RingtoetsMapDataFeaturesFactory.CreateSinglePointMapFeature(location.Location); + feature.MetaData[RingtoetsCommonFormsResources.MetaData_ID] = location.Id; + feature.MetaData[RingtoetsCommonFormsResources.MetaData_Name] = location.Name; + feature.MetaData[Resources.MetaData_WaterLevelCalculationForMechanismSpecificFactorizedSignalingNorm] = location.WaterLevelCalculationForMechanismSpecificFactorizedSignalingNorm; + feature.MetaData[Resources.MetaData_WaterLevelCalculationForMechanismSpecificSignalingNorm] = location.WaterLevelCalculationForMechanismSpecificSignalingNorm; + feature.MetaData[Resources.MetaData_WaterLevelCalculationForMechanismSpecificLowerLimit] = location.WaterLevelCalculationForMechanismSpecificLowerLimitNorm; + feature.MetaData[Resources.MetaData_WaterLevelCalculationForMechanismLowerLimit] = location.WaterLevelCalculationForLowerLimitNorm; + feature.MetaData[Resources.MetaData_WaterLevelCalculationForFactorizedLowerLimit] = location.WaterLevelCalculationForFactorizedLowerLimitNorm; + feature.MetaData[Resources.MetaData_WaveHeightCalculationForMechanismSpecificFactorizedSignalingNorm] = location.WaveHeightCalculationForMechanismSpecificFactorizedSignalingNorm; + feature.MetaData[Resources.MetaData_WaveHeightCalculationForMechanismSpecificSignalingNorm] = location.WaveHeightCalculationForMechanismSpecificSignalingNorm; + feature.MetaData[Resources.MetaData_WaveHeightCalculationForMechanismSpecificLowerLimit] = location.WaveHeightCalculationForMechanismSpecificLowerLimitNorm; + feature.MetaData[Resources.MetaData_WaveHeightCalculationForLowerLimit] = location.WaveHeightCalculationForLowerLimitNorm; + feature.MetaData[Resources.MetaData_WaveHeightCalculationForFactorizedLowerLimit] = location.WaveHeightCalculationForFactorizedLowerLimitNorm; + return feature; + } } } \ No newline at end of file Index: Ringtoets/GrassCoverErosionOutwards/src/Ringtoets.GrassCoverErosionOutwards.Forms/Properties/Resources.Designer.cs =================================================================== diff -u -rccc952cb1db3d3538b75d019350a547c6284114d -ra960f05a5324192bd268fe1891fdcf8712b2905e --- Ringtoets/GrassCoverErosionOutwards/src/Ringtoets.GrassCoverErosionOutwards.Forms/Properties/Resources.Designer.cs (.../Resources.Designer.cs) (revision ccc952cb1db3d3538b75d019350a547c6284114d) +++ Ringtoets/GrassCoverErosionOutwards/src/Ringtoets.GrassCoverErosionOutwards.Forms/Properties/Resources.Designer.cs (.../Resources.Designer.cs) (revision a960f05a5324192bd268fe1891fdcf8712b2905e) @@ -261,12 +261,102 @@ } /// + /// Looks up a localized string similar to h(Vv->VIv). + /// + public static string MetaData_WaterLevelCalculationForFactorizedLowerLimit { + get { + return ResourceManager.GetString("MetaData_WaterLevelCalculationForFactorizedLowerLimit", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to h(IVv->Vv). + /// + public static string MetaData_WaterLevelCalculationForMechanismLowerLimit { + get { + return ResourceManager.GetString("MetaData_WaterLevelCalculationForMechanismLowerLimit", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to h(Iv->IIv). + /// + public static string MetaData_WaterLevelCalculationForMechanismSpecificFactorizedSignalingNorm { + get { + return ResourceManager.GetString("MetaData_WaterLevelCalculationForMechanismSpecificFactorizedSignalingNorm", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to h(IIIv->IVv). + /// + public static string MetaData_WaterLevelCalculationForMechanismSpecificLowerLimit { + get { + return ResourceManager.GetString("MetaData_WaterLevelCalculationForMechanismSpecificLowerLimit", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to h(IIv->IIIv). + /// + public static string MetaData_WaterLevelCalculationForMechanismSpecificSignalingNorm { + get { + return ResourceManager.GetString("MetaData_WaterLevelCalculationForMechanismSpecificSignalingNorm", resourceCulture); + } + } + + /// /// Looks up a localized string similar to Golfhoogte bij doorsnede-eis. /// public static string MetaData_WaveHeight { get { return ResourceManager.GetString("MetaData_WaveHeight", resourceCulture); } } + + /// + /// Looks up a localized string similar to hs(Vv->VIv). + /// + public static string MetaData_WaveHeightCalculationForFactorizedLowerLimit { + get { + return ResourceManager.GetString("MetaData_WaveHeightCalculationForFactorizedLowerLimit", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to hs(IVv->Vv). + /// + public static string MetaData_WaveHeightCalculationForLowerLimit { + get { + return ResourceManager.GetString("MetaData_WaveHeightCalculationForLowerLimit", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to hs(Iv->IIv). + /// + public static string MetaData_WaveHeightCalculationForMechanismSpecificFactorizedSignalingNorm { + get { + return ResourceManager.GetString("MetaData_WaveHeightCalculationForMechanismSpecificFactorizedSignalingNorm", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to hs(IIIv->IVv). + /// + public static string MetaData_WaveHeightCalculationForMechanismSpecificLowerLimit { + get { + return ResourceManager.GetString("MetaData_WaveHeightCalculationForMechanismSpecificLowerLimit", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to hs(IIv->IIIv). + /// + public static string MetaData_WaveHeightCalculationForMechanismSpecificSignalingNorm { + get { + return ResourceManager.GetString("MetaData_WaveHeightCalculationForMechanismSpecificSignalingNorm", resourceCulture); + } + } } } Index: Ringtoets/GrassCoverErosionOutwards/src/Ringtoets.GrassCoverErosionOutwards.Forms/Properties/Resources.resx =================================================================== diff -u -rccc952cb1db3d3538b75d019350a547c6284114d -ra960f05a5324192bd268fe1891fdcf8712b2905e --- Ringtoets/GrassCoverErosionOutwards/src/Ringtoets.GrassCoverErosionOutwards.Forms/Properties/Resources.resx (.../Resources.resx) (revision ccc952cb1db3d3538b75d019350a547c6284114d) +++ Ringtoets/GrassCoverErosionOutwards/src/Ringtoets.GrassCoverErosionOutwards.Forms/Properties/Resources.resx (.../Resources.resx) (revision a960f05a5324192bd268fe1891fdcf8712b2905e) @@ -179,4 +179,34 @@ Weet u zeker dat u wilt doorgaan? + + h(Vv->VIv) + + + h(IVv->Vv) + + + h(Iv->IIv) + + + h(IIIv->IVv) + + + h(IIv->IIIv) + + + hs(Vv->VIv) + + + hs(IVv->Vv) + + + hs(Iv->IIv) + + + hs(IIIv->IVv) + + + hs(IIv->IIIv) + \ No newline at end of file Index: Ringtoets/GrassCoverErosionOutwards/src/Ringtoets.GrassCoverErosionOutwards.Forms/Ringtoets.GrassCoverErosionOutwards.Forms.csproj =================================================================== diff -u -r8fbc77385dee9bc30d5c69a24e61ff1a1e95d244 -ra960f05a5324192bd268fe1891fdcf8712b2905e --- Ringtoets/GrassCoverErosionOutwards/src/Ringtoets.GrassCoverErosionOutwards.Forms/Ringtoets.GrassCoverErosionOutwards.Forms.csproj (.../Ringtoets.GrassCoverErosionOutwards.Forms.csproj) (revision 8fbc77385dee9bc30d5c69a24e61ff1a1e95d244) +++ Ringtoets/GrassCoverErosionOutwards/src/Ringtoets.GrassCoverErosionOutwards.Forms/Ringtoets.GrassCoverErosionOutwards.Forms.csproj (.../Ringtoets.GrassCoverErosionOutwards.Forms.csproj) (revision a960f05a5324192bd268fe1891fdcf8712b2905e) @@ -144,6 +144,11 @@ Ringtoets.GrassCoverErosionOutwards.Service False + + {033ED27D-E806-42B4-9689-8150CFAE1906} + Ringtoets.GrassCoverErosionOutwards.Util + False + Index: Ringtoets/GrassCoverErosionOutwards/test/Ringtoets.GrassCoverErosionOutwards.Forms.Test/Factories/GrassCoverErosionOutwardsMapDataFeaturesFactoryTest.cs =================================================================== diff -u -r175cb39b49a146149811954e3800bebfc0819e3d -ra960f05a5324192bd268fe1891fdcf8712b2905e --- Ringtoets/GrassCoverErosionOutwards/test/Ringtoets.GrassCoverErosionOutwards.Forms.Test/Factories/GrassCoverErosionOutwardsMapDataFeaturesFactoryTest.cs (.../GrassCoverErosionOutwardsMapDataFeaturesFactoryTest.cs) (revision 175cb39b49a146149811954e3800bebfc0819e3d) +++ Ringtoets/GrassCoverErosionOutwards/test/Ringtoets.GrassCoverErosionOutwards.Forms.Test/Factories/GrassCoverErosionOutwardsMapDataFeaturesFactoryTest.cs (.../GrassCoverErosionOutwardsMapDataFeaturesFactoryTest.cs) (revision a960f05a5324192bd268fe1891fdcf8712b2905e) @@ -22,15 +22,19 @@ using System; using System.Collections.Generic; using System.Linq; +using Core.Common.Base.Data; using Core.Common.Base.Geometry; using Core.Components.Gis.Features; using Core.Components.Gis.Geometries; using NUnit.Framework; +using Rhino.Mocks; +using Ringtoets.Common.Data.AssessmentSection; using Ringtoets.Common.Data.Hydraulics; using Ringtoets.Common.Data.TestUtil; using Ringtoets.Common.Forms.TestUtil; using Ringtoets.GrassCoverErosionOutwards.Data; using Ringtoets.GrassCoverErosionOutwards.Forms.Factories; +using Ringtoets.GrassCoverErosionOutwards.Util.TestUtil; namespace Ringtoets.GrassCoverErosionOutwards.Forms.Test.Factories { @@ -151,6 +155,120 @@ AssertEqualFeatureCollections(points, features); } + [Test] + public void CreateHydraulicBoundaryLocationsFeatures_AssessmentSectionNull_ThrowsArgumentNullException() + { + // Call + TestDelegate call = () => GrassCoverErosionOutwardsMapDataFeaturesFactory.CreateHydraulicBoundaryLocationsFeatures( + null, new GrassCoverErosionOutwardsFailureMechanism()); + + // Assert + var exception = Assert.Throws(call); + Assert.AreEqual("assessmentSection", exception.ParamName); + } + + [Test] + public void CreateHydraulicBoundaryLocationsFeatures_FailureMechanismNull_ThrowsArgumentNullException() + { + // Setup + var mocks = new MockRepository(); + var assessmentSection = mocks.Stub(); + mocks.ReplayAll(); + + // Call + TestDelegate call = () => GrassCoverErosionOutwardsMapDataFeaturesFactory.CreateHydraulicBoundaryLocationsFeatures( + assessmentSection, null); + + // Assert + var exception = Assert.Throws(call); + Assert.AreEqual("failureMechanism", exception.ParamName); + mocks.VerifyAll(); + } + + [Test] + [TestCase(true)] + [TestCase(false)] + public void CreateHydraulicBoundaryLocationsFeatures_GivenLocations_ReturnsLocationFeaturesCollection(bool withOutput) + { + // Setup + var assessmentSection = new ObservableTestAssessmentSectionStub(); + var failureMechanism = new GrassCoverErosionOutwardsFailureMechanism(); + var locations = new[] + { + new HydraulicBoundaryLocation(1, "test", 1, 1), + new HydraulicBoundaryLocation(2, "test", 2, 2) + }; + + GrassCoverErosionOutwardsHydraulicBoundaryLocationsHelper.AddHydraulicBoundaryLocations( + failureMechanism, assessmentSection, locations, withOutput); + + // Call + MapFeature[] features = GrassCoverErosionOutwardsMapDataFeaturesFactory.CreateHydraulicBoundaryLocationsFeatures(assessmentSection, failureMechanism).ToArray(); + + // Assert + AssertHydraulicBoundaryFeaturesData(assessmentSection, failureMechanism, features); + + Point2D[] expectedPoints = assessmentSection.HydraulicBoundaryDatabase.Locations + .Select(location => location.Location) + .ToArray(); + AssertEqualFeatureCollections( + expectedPoints, features); + + } + + private static void AssertHydraulicBoundaryFeaturesData(IAssessmentSection assessmentSection, GrassCoverErosionOutwardsFailureMechanism failureMechanism, IEnumerable features) + { + HydraulicBoundaryLocation[] hydraulicBoundaryLocationsArray = assessmentSection.HydraulicBoundaryDatabase.Locations.ToArray(); + int expectedNrOfFeatures = hydraulicBoundaryLocationsArray.Length; + Assert.AreEqual(expectedNrOfFeatures, features.Count()); + + for (var i = 0; i < expectedNrOfFeatures; i++) + { + HydraulicBoundaryLocation hydraulicBoundaryLocation = hydraulicBoundaryLocationsArray[i]; + MapFeature mapFeature = features.ElementAt(i); + + MapFeaturesTestHelper.AssertHydraulicBoundaryLocationOutputMetaData( + GetExpectedResult(failureMechanism.WaterLevelCalculationsForMechanismSpecificFactorizedSignalingNorm, hydraulicBoundaryLocation), + mapFeature, "h(Iv->IIv)"); + MapFeaturesTestHelper.AssertHydraulicBoundaryLocationOutputMetaData( + GetExpectedResult(failureMechanism.WaterLevelCalculationsForMechanismSpecificSignalingNorm, hydraulicBoundaryLocation), + mapFeature, "h(IIv->IIIv)"); + MapFeaturesTestHelper.AssertHydraulicBoundaryLocationOutputMetaData( + GetExpectedResult(failureMechanism.WaterLevelCalculationsForMechanismSpecificLowerLimitNorm, hydraulicBoundaryLocation), + mapFeature, "h(IIIv->IVv)"); + MapFeaturesTestHelper.AssertHydraulicBoundaryLocationOutputMetaData( + GetExpectedResult(assessmentSection.WaterLevelCalculationsForLowerLimitNorm, hydraulicBoundaryLocation), + mapFeature, "h(IVv->Vv)"); + MapFeaturesTestHelper.AssertHydraulicBoundaryLocationOutputMetaData( + GetExpectedResult(assessmentSection.WaterLevelCalculationsForFactorizedLowerLimitNorm, hydraulicBoundaryLocation), + mapFeature, "h(Vv->VIv)"); + + MapFeaturesTestHelper.AssertHydraulicBoundaryLocationOutputMetaData( + GetExpectedResult(failureMechanism.WaveHeightCalculationsForMechanismSpecificFactorizedSignalingNorm, hydraulicBoundaryLocation), + mapFeature, "hs(Iv->IIv)"); + MapFeaturesTestHelper.AssertHydraulicBoundaryLocationOutputMetaData( + GetExpectedResult(failureMechanism.WaveHeightCalculationsForMechanismSpecificSignalingNorm, hydraulicBoundaryLocation), + mapFeature, "hs(IIv->IIIv)"); + MapFeaturesTestHelper.AssertHydraulicBoundaryLocationOutputMetaData( + GetExpectedResult(failureMechanism.WaveHeightCalculationsForMechanismSpecificLowerLimitNorm, hydraulicBoundaryLocation), + mapFeature, "hs(IIIv->IVv)"); + MapFeaturesTestHelper.AssertHydraulicBoundaryLocationOutputMetaData( + GetExpectedResult(assessmentSection.WaveHeightCalculationsForLowerLimitNorm, hydraulicBoundaryLocation), + mapFeature, "hs(IVv->Vv)"); + MapFeaturesTestHelper.AssertHydraulicBoundaryLocationOutputMetaData( + GetExpectedResult(assessmentSection.WaveHeightCalculationsForFactorizedLowerLimitNorm, hydraulicBoundaryLocation), + mapFeature, "hs(Vv->VIv)"); + } + } + private static RoundedDouble GetExpectedResult(IEnumerable calculationList, + HydraulicBoundaryLocation hydraulicBoundaryLocation1) + { + return calculationList + .Where(calculation => calculation.HydraulicBoundaryLocation.Equals(hydraulicBoundaryLocation1)) + .Select(calculation => calculation.Output?.Result ?? RoundedDouble.NaN) + .Single(); + } + private static void AssertEqualPointCollections(IEnumerable points, MapGeometry geometry) { CollectionAssert.AreEqual(points.Select(p => new Point2D(p)), geometry.PointCollections.First()); Index: Ringtoets/GrassCoverErosionOutwards/test/Ringtoets.GrassCoverErosionOutwards.Forms.Test/Ringtoets.GrassCoverErosionOutwards.Forms.Test.csproj =================================================================== diff -u -r85c24f25efa5c7d92df2c952bcf1de53dc15276f -ra960f05a5324192bd268fe1891fdcf8712b2905e --- Ringtoets/GrassCoverErosionOutwards/test/Ringtoets.GrassCoverErosionOutwards.Forms.Test/Ringtoets.GrassCoverErosionOutwards.Forms.Test.csproj (.../Ringtoets.GrassCoverErosionOutwards.Forms.Test.csproj) (revision 85c24f25efa5c7d92df2c952bcf1de53dc15276f) +++ Ringtoets/GrassCoverErosionOutwards/test/Ringtoets.GrassCoverErosionOutwards.Forms.Test/Ringtoets.GrassCoverErosionOutwards.Forms.Test.csproj (.../Ringtoets.GrassCoverErosionOutwards.Forms.Test.csproj) (revision a960f05a5324192bd268fe1891fdcf8712b2905e) @@ -151,5 +151,9 @@ {18E9F7C8-3170-4E9D-8D9F-1378225EED90} Ringtoets.GrassCoverErosionOutwards.Service + + {C700ED66-8565-48B2-9A4E-B0D33FB2B26D} + Ringtoets.GrassCoverErosionOutwards.Util.TestUtil + \ No newline at end of file