Index: Riskeer/Common/src/Riskeer.Common.Util/HydraulicBoundaryLocationMapDataFeaturesFactory.cs =================================================================== diff -u -r96ccefa48aa5c97c949f7a7858fcb4d3dc727a3a -r3f7b2552cb48b20aac2262d9ad7da25977c084e9 --- Riskeer/Common/src/Riskeer.Common.Util/HydraulicBoundaryLocationMapDataFeaturesFactory.cs (.../HydraulicBoundaryLocationMapDataFeaturesFactory.cs) (revision 96ccefa48aa5c97c949f7a7858fcb4d3dc727a3a) +++ Riskeer/Common/src/Riskeer.Common.Util/HydraulicBoundaryLocationMapDataFeaturesFactory.cs (.../HydraulicBoundaryLocationMapDataFeaturesFactory.cs) (revision 3f7b2552cb48b20aac2262d9ad7da25977c084e9) @@ -20,7 +20,9 @@ // All rights reserved. using System; +using Core.Common.Base.Data; using Core.Components.Gis.Features; +using Riskeer.Common.Data.Hydraulics; using Riskeer.Common.Util.Properties; namespace Riskeer.Common.Util @@ -57,5 +59,38 @@ feature.MetaData[Resources.MetaData_WaveHeightCalculationForFactorizedLowerLimitNorm] = location.WaveHeightCalculationForFactorizedLowerLimitNorm.ToString(); return feature; } + + /// + /// Creates a hydraulic boundary location calculation feature based on the given . + /// + /// The calculation to create the feature for. + /// The meta data header to use. + /// A feature based on the given . + /// Thrown when any parameter is null. + public static MapFeature CreateHydraulicBoundaryLocationCalculationFeature(HydraulicBoundaryLocationCalculation calculation, + string metaDataHeader) + { + if (calculation == null) + { + throw new ArgumentNullException(nameof(calculation)); + } + + if (metaDataHeader == null) + { + throw new ArgumentNullException(nameof(metaDataHeader)); + } + + HydraulicBoundaryLocation location = calculation.HydraulicBoundaryLocation; + MapFeature feature = RiskeerMapDataFeaturesFactoryHelper.CreateSinglePointMapFeature(location.Location); + feature.MetaData[Resources.MetaData_ID] = location.Id; + feature.MetaData[Resources.MetaData_Name] = location.Name; + feature.MetaData[metaDataHeader] = GetCalculationResult(calculation.Output).ToString(); + return feature; + } + + private static RoundedDouble GetCalculationResult(HydraulicBoundaryLocationCalculationOutput output) + { + return output?.Result ?? RoundedDouble.NaN; + } } } \ No newline at end of file Index: Riskeer/Common/test/Riskeer.Common.Util.Test/HydraulicBoundaryLocationMapDataFeaturesFactoryTest.cs =================================================================== diff -u -r96ccefa48aa5c97c949f7a7858fcb4d3dc727a3a -r3f7b2552cb48b20aac2262d9ad7da25977c084e9 --- Riskeer/Common/test/Riskeer.Common.Util.Test/HydraulicBoundaryLocationMapDataFeaturesFactoryTest.cs (.../HydraulicBoundaryLocationMapDataFeaturesFactoryTest.cs) (revision 96ccefa48aa5c97c949f7a7858fcb4d3dc727a3a) +++ Riskeer/Common/test/Riskeer.Common.Util.Test/HydraulicBoundaryLocationMapDataFeaturesFactoryTest.cs (.../HydraulicBoundaryLocationMapDataFeaturesFactoryTest.cs) (revision 3f7b2552cb48b20aac2262d9ad7da25977c084e9) @@ -20,8 +20,11 @@ // All rights reserved. using System; +using Core.Common.Base.Data; using Core.Components.Gis.Features; using NUnit.Framework; +using Riskeer.Common.Data.Hydraulics; +using Riskeer.Common.Data.TestUtil; using Riskeer.Common.Util.TestUtil; namespace Riskeer.Common.Util.Test @@ -33,10 +36,10 @@ public void CreateHydraulicBoundaryLocationFeature_LocationNull_ThrowsArgumentNullException() { // Call - TestDelegate call = () => HydraulicBoundaryLocationMapDataFeaturesFactory.CreateHydraulicBoundaryLocationFeature(null); + void Call() => HydraulicBoundaryLocationMapDataFeaturesFactory.CreateHydraulicBoundaryLocationFeature(null); // Assert - var exception = Assert.Throws(call); + var exception = Assert.Throws(Call); Assert.AreEqual("location", exception.ParamName); } @@ -76,5 +79,55 @@ location.WaveHeightCalculationForFactorizedLowerLimitNorm.ToString(), feature, "Hs_C"); } + + [Test] + public void CreateHydraulicBoundaryLocationCalculationFeature_CalculationNull_ThrowsArgumentNullException() + { + // Call + void Call() => HydraulicBoundaryLocationMapDataFeaturesFactory.CreateHydraulicBoundaryLocationCalculationFeature( + null, string.Empty); + + // Assert + var exception = Assert.Throws(Call); + Assert.AreEqual("calculation", exception.ParamName); + } + + [Test] + public void CreateHydraulicBoundaryLocationCalculationFeature_MetaDataHeaderNull_ThrowsArgumentNullException() + { + // Call + void Call() => HydraulicBoundaryLocationMapDataFeaturesFactory.CreateHydraulicBoundaryLocationCalculationFeature( + new HydraulicBoundaryLocationCalculation(new TestHydraulicBoundaryLocation()), null); + + // Assert + var exception = Assert.Throws(Call); + Assert.AreEqual("metaDataHeader", exception.ParamName); + } + + [Test] + [TestCase(true)] + [TestCase(false)] + public void CreateHydraulicBoundaryLocationCalculationFeature_WithData_ReturnFeature(bool calculationHasOutput) + { + // Setup + const string metaDataHeader = "header"; + var calculation = new HydraulicBoundaryLocationCalculation(new TestHydraulicBoundaryLocation("location 1")); + + if (calculationHasOutput) + { + calculation.Output = new TestHydraulicBoundaryLocationCalculationOutput(); + } + + // Call + MapFeature feature = HydraulicBoundaryLocationMapDataFeaturesFactory.CreateHydraulicBoundaryLocationCalculationFeature( + calculation, metaDataHeader); + + // Assert + RoundedDouble expectedMetaDataValue = calculationHasOutput + ? calculation.Output.Result + : RoundedDouble.NaN; + MapFeaturesMetaDataTestHelper.AssertMetaData(expectedMetaDataValue.ToString(), + feature, metaDataHeader); + } } } \ No newline at end of file