Index: Riskeer/Integration/src/Riskeer.Integration.IO/Exporters/HydraulicBoundaryLocationCalculationsForTargetProbabilitiesExporter.cs =================================================================== diff -u -r059bf9fe80a0264abb9f033ef99a2e57a981fcff -ree2a193cd93696d64c8a43ccd2faaa50ad1a64fe --- Riskeer/Integration/src/Riskeer.Integration.IO/Exporters/HydraulicBoundaryLocationCalculationsForTargetProbabilitiesExporter.cs (.../HydraulicBoundaryLocationCalculationsForTargetProbabilitiesExporter.cs) (revision 059bf9fe80a0264abb9f033ef99a2e57a981fcff) +++ Riskeer/Integration/src/Riskeer.Integration.IO/Exporters/HydraulicBoundaryLocationCalculationsForTargetProbabilitiesExporter.cs (.../HydraulicBoundaryLocationCalculationsForTargetProbabilitiesExporter.cs) (revision ee2a193cd93696d64c8a43ccd2faaa50ad1a64fe) @@ -71,27 +71,40 @@ public bool Export() { + var exportedCalculations = new Dictionary(); return locationCalculationsForTargetProbabilities.All( locationCalculationsForTargetProbability => ExportLocationCalculationsForTargetProbability( - locationCalculationsForTargetProbability.Item1,locationCalculationsForTargetProbability.Item2)); + locationCalculationsForTargetProbability.Item1, + locationCalculationsForTargetProbability.Item2, + exportedCalculations)); } private bool ExportLocationCalculationsForTargetProbability( HydraulicBoundaryLocationCalculationsForTargetProbability calculationsForTargetProbability, - HydraulicBoundaryLocationCalculationsType calculationsType) + HydraulicBoundaryLocationCalculationsType calculationsType, + IDictionary exportedCalculations) { string exportType = calculationsType == HydraulicBoundaryLocationCalculationsType.WaterLevel ? Resources.HydraulicBoundaryLocationCalculationsForTargetProbabilitiesExporter_WaterLevels_DisplayName : Resources.HydraulicBoundaryLocationCalculationsForTargetProbabilitiesExporter_WaveHeights_DisplayName; - var fileName = $"{exportType}_{ReturnPeriodFormattingHelper.FormatFromProbability(calculationsForTargetProbability.TargetProbability)}"; - string filePath = Path.Combine(folderPath, $"{fileName}.shp"); + string uniqueName = NamingHelper.GetUniqueName( + exportedCalculations, $"{exportType}_{ReturnPeriodFormattingHelper.FormatFromProbability(calculationsForTargetProbability.TargetProbability)}", + c => c.Value); + string filePath = Path.Combine(folderPath, $"{uniqueName}.shp"); + var exporter = new HydraulicBoundaryLocationCalculationsExporter( calculationsForTargetProbability.HydraulicBoundaryLocationCalculations, filePath, calculationsType); - return exporter.Export(); + if (!exporter.Export()) + { + return false; + } + + exportedCalculations.Add(calculationsForTargetProbability, uniqueName); + return true; } } } \ No newline at end of file Index: Riskeer/Integration/test/Riskeer.Integration.IO.Test/Exporters/HydraulicBoundaryLocationCalculationsForTargetProbabilitiesExporterTest.cs =================================================================== diff -u -r3178fe8b6ae605b67d9b4dec9d73e36b8aa8c4d5 -ree2a193cd93696d64c8a43ccd2faaa50ad1a64fe --- Riskeer/Integration/test/Riskeer.Integration.IO.Test/Exporters/HydraulicBoundaryLocationCalculationsForTargetProbabilitiesExporterTest.cs (.../HydraulicBoundaryLocationCalculationsForTargetProbabilitiesExporterTest.cs) (revision 3178fe8b6ae605b67d9b4dec9d73e36b8aa8c4d5) +++ Riskeer/Integration/test/Riskeer.Integration.IO.Test/Exporters/HydraulicBoundaryLocationCalculationsForTargetProbabilitiesExporterTest.cs (.../HydraulicBoundaryLocationCalculationsForTargetProbabilitiesExporterTest.cs) (revision ee2a193cd93696d64c8a43ccd2faaa50ad1a64fe) @@ -45,7 +45,7 @@ var exception = Assert.Throws(Call); Assert.AreEqual("locationCalculationsForTargetProbabilities", exception.ParamName); } - + [Test] [TestCase(null)] [TestCase("")] @@ -61,7 +61,7 @@ // Assert Assert.Throws(Call); } - + [Test] public void Constructor_ExpectedValues() { @@ -91,7 +91,7 @@ var exporter = new HydraulicBoundaryLocationCalculationsForTargetProbabilitiesExporter(targetProbabilities, folderPath); string expectedFilePath = Path.Combine(folderPath, "Waterstanden_10.shp"); - + try { using (new DirectoryPermissionsRevoker(folderPath, FileSystemRights.Write)) @@ -121,7 +121,7 @@ Directory.CreateDirectory(folderPath); var random = new Random(21); - + var targetProbabilities = new[] { new Tuple( @@ -134,27 +134,77 @@ var exporter = new HydraulicBoundaryLocationCalculationsForTargetProbabilitiesExporter(targetProbabilities, folderPath); - string[] expectedFilePaths = + string[] expectedFilePaths = { Path.Combine(folderPath, $"Waterstanden_{GetReturnPeriodText(targetProbabilities.First().Item1.TargetProbability)}.shp"), Path.Combine(folderPath, $"Golfhoogten_{GetReturnPeriodText(targetProbabilities.Last().Item1.TargetProbability)}.shp") }; - + try { - // Call - bool isExported = exporter.Export(); + // Call + bool isExported = exporter.Export(); - // Assert - Assert.IsTrue(isExported); - Assert.IsTrue(expectedFilePaths.All(File.Exists)); + // Assert + Assert.IsTrue(isExported); + Assert.IsTrue(expectedFilePaths.All(File.Exists)); } finally { Directory.Delete(folderPath, true); } } + [Test] + public void Export_WithDoubleHydraulicBoundaryLocationCalculationsForTargetProbabilities_WritesFilesAndReturnsTrue() + { + // Setup + string folderPath = TestHelper.GetScratchPadPath($"{nameof(HydraulicBoundaryLocationCalculationsForTargetProbabilitiesExporterTest)}.{nameof(Export_WithDoubleHydraulicBoundaryLocationCalculationsForTargetProbabilities_WritesFilesAndReturnsTrue)}"); + Directory.CreateDirectory(folderPath); + + var random = new Random(21); + + var targetProbabilities = new[] + { + new Tuple( + new HydraulicBoundaryLocationCalculationsForTargetProbability(0.1), + HydraulicBoundaryLocationCalculationsType.WaterLevel), + new Tuple( + new HydraulicBoundaryLocationCalculationsForTargetProbability(0.1), + HydraulicBoundaryLocationCalculationsType.WaterLevel), + new Tuple( + new HydraulicBoundaryLocationCalculationsForTargetProbability(0.001), + HydraulicBoundaryLocationCalculationsType.WaveHeight), + new Tuple( + new HydraulicBoundaryLocationCalculationsForTargetProbability(0.001), + HydraulicBoundaryLocationCalculationsType.WaveHeight) + }; + + var exporter = new HydraulicBoundaryLocationCalculationsForTargetProbabilitiesExporter(targetProbabilities, folderPath); + + string[] expectedFilePaths = + { + Path.Combine(folderPath, "Waterstanden_10.shp"), + Path.Combine(folderPath, "Waterstanden_10 (1).shp"), + Path.Combine(folderPath, "Golfhoogten_1.000.shp"), + Path.Combine(folderPath, "Golfhoogten_1.000 (1).shp") + }; + + try + { + // Call + bool isExported = exporter.Export(); + + // Assert + Assert.IsTrue(isExported); + Assert.IsTrue(expectedFilePaths.All(File.Exists)); + } + finally + { + Directory.Delete(folderPath, true); + } + } + private static string GetReturnPeriodText(double targetProbability) { return ReturnPeriodFormattingHelper.FormatFromProbability(targetProbability);