Index: DamClients/DamUI/trunk/src/Dam/Deltares.Dam.Tests/CsvImporterTest.cs =================================================================== diff -u -r4146 -r4157 --- DamClients/DamUI/trunk/src/Dam/Deltares.Dam.Tests/CsvImporterTest.cs (.../CsvImporterTest.cs) (revision 4146) +++ DamClients/DamUI/trunk/src/Dam/Deltares.Dam.Tests/CsvImporterTest.cs (.../CsvImporterTest.cs) (revision 4157) @@ -26,294 +26,293 @@ using Deltares.Standard.Logging; using NUnit.Framework; -namespace Deltares.Dam.Tests +namespace Deltares.Dam.Tests; + +[TestFixture] +public class CsvImporterTest { - [TestFixture] - public class CsvImporterTest + private string dataFolder; + private string importFolder; + + /// + /// Setup for whole testfixture + /// + [SetUp] + public void FixtureSetup() { - private string dataFolder; - private string importFolder; + dataFolder = Path.Combine(Directory.GetCurrentDirectory(), @"TestData\"); + importFolder = Path.Combine(Directory.GetCurrentDirectory(), "TmpImportFiles"); + Directory.CreateDirectory(importFolder); + } - /// - /// Setup for whole testfixture - /// - [SetUp] - public void FixtureSetup() + [TearDown] + public void FixtureTearDown() + { + if (Directory.Exists(importFolder)) { - dataFolder = Path.Combine(Directory.GetCurrentDirectory(), @"TestData\"); - importFolder = Path.Combine(Directory.GetCurrentDirectory(), "TmpImportFiles"); - Directory.CreateDirectory(importFolder); + Directory.Delete(importFolder, true); } + } - [TearDown] - public void FixtureTearDown() + /// + /// Setup for single test + /// + [SetUp] + public void Setup() + { + if (Directory.Exists(importFolder)) { - if (Directory.Exists(importFolder)) - { - Directory.Delete(importFolder, true); - } + Directory.Delete(importFolder, true); } - /// - /// Setup for single test - /// - [SetUp] - public void Setup() - { - if (Directory.Exists(importFolder)) - { - Directory.Delete(importFolder, true); - } + Directory.CreateDirectory(importFolder); - Directory.CreateDirectory(importFolder); + File.Copy(Path.Combine(dataFolder, @"HoekscheWaardCsv\soilmaterials.mdb"), Path.Combine(importFolder, "soilmaterials.mdb")); - File.Copy(Path.Combine(dataFolder, @"HoekscheWaardCsv\soilmaterials.mdb"), Path.Combine(importFolder, "soilmaterials.mdb")); + CreateCharacteristicPointsFile(); + CreateLocationsFile(); + CreateSegmentsFor1DProfilesFile(); + CreateSurfaceLinesFiles(); + CreateSoilProfilesFile(); + CreateScenarios(); + CreateSoilsFile(); + } - CreateCharacteristicPointsFile(); - CreateLocationsFile(); - CreateSegmentsFor1DProfilesFile(); - CreateSurfaceLinesFiles(); - CreateSoilProfilesFile(); - CreateScenarios(); - CreateSoilsFile(); - } + /// + /// Test + /// + [Test] + public void CvsImporter_ImportFromNonExistingDirectory_AddsMessageWithFatalErrorType() + { + ImportDirector.Construct("C:\\SomeNoneExistingDirectory", null); + Assert.AreEqual(1, LogManager.Messages.Count); + Assert.AreEqual(LogMessageType.FatalError, LogManager.Messages[0].MessageType); + } - /// - /// Test - /// - [Test] - public void CvsImporter_ImportFromNonExistingDirectory_AddsMessageWithFatalErrorType() + /// + /// Test + /// + [Test] + public void CvsImporter_ImportWithIncompleteLocationTable_AddsMessageWithWarning() + { + File.Delete(importFolder + "\\locations.csv"); + using (StreamWriter writer = File.CreateText(importFolder + "\\locations.csv")) { - ImportDirector.Construct("C:\\SomeNoneExistingDirectory", null); - Assert.AreEqual(1, LogManager.Messages.Count); - Assert.AreEqual(LogMessageType.FatalError, LogManager.Messages[0].MessageType); + writer.WriteLine("location_id;surfaceline_id;segment_id;geo_x;geo_y;polderlevel;head_pl2;head_pl3;grass_quality;direction"); + writer.WriteLine("LOC1;D1;ok;414.950;91.850;0.1;4.0;3.0;4.3;1.0"); } - /// - /// Test - /// - [Test] - public void CvsImporter_ImportWithIncompleteLocationTable_AddsMessageWithWarning() - { - File.Delete(importFolder + "\\locations.csv"); - using (StreamWriter writer = File.CreateText(importFolder + "\\locations.csv")) - { - writer.WriteLine("location_id;surfaceline_id;segment_id;geo_x;geo_y;polderlevel;head_pl2;head_pl3;grass_quality;direction"); - writer.WriteLine("LOC1;D1;ok;414.950;91.850;0.1;4.0;3.0;4.3;1.0"); - } + ImportDirector.Construct(importFolder, null); + Assert.AreEqual(LogMessageType.Warning, LogManager.Messages[0].MessageType); + } - ImportDirector.Construct(importFolder, null); - Assert.AreEqual(LogMessageType.Warning, LogManager.Messages[0].MessageType); + /// + /// Test + /// + [Test] + public void CanImportDikeWith2DSoilGeometries() + { + File.Delete(importFolder + "\\segments.csv"); + File.Delete(importFolder + "\\soilprofiles.csv"); + using (StreamWriter writer = File.CreateText(importFolder + "\\segments.csv")) + { + writer.WriteLine("segment_id;soilgeometry2D_name;probability;calculation_type"); + writer.WriteLine("1;Geometrie 1;80;Stability"); + writer.WriteLine("1;Geometrie 2;20;Stability"); + writer.WriteLine("1;Geometrie 1 piping;100;Piping"); + writer.WriteLine("2;Geometrie 2;100;Stability"); + writer.WriteLine("2;Geometrie 1 piping;100;Piping"); } - /// - /// Test - /// - [Test] - public void CanImportDikeWith2DSoilGeometries() + using (WaterBoard waterBoard = ImportDirector.Construct(importFolder, null)) { - File.Delete(importFolder + "\\segments.csv"); - File.Delete(importFolder + "\\soilprofiles.csv"); - using (StreamWriter writer = File.CreateText(importFolder + "\\segments.csv")) - { - writer.WriteLine("segment_id;soilgeometry2D_name;probability;calculation_type"); - writer.WriteLine("1;Geometrie 1;80;Stability"); - writer.WriteLine("1;Geometrie 2;20;Stability"); - writer.WriteLine("1;Geometrie 1 piping;100;Piping"); - writer.WriteLine("2;Geometrie 2;100;Stability"); - writer.WriteLine("2;Geometrie 1 piping;100;Piping"); - } - - using (WaterBoard waterBoard = ImportDirector.Construct(importFolder, null)) - { - Assert.AreEqual(2, waterBoard.Segments.Count); - Assert.AreEqual("Geometrie 1", waterBoard.Segments[0].GetMostProbableGeometry2DName(FailureMechanismSystemType.StabilityInside)); - Assert.AreEqual("Geometrie 1 piping", waterBoard.Segments[1].GetMostProbableGeometry2DName(FailureMechanismSystemType.Piping)); - Assert.AreEqual("Geometrie 2", waterBoard.Segments[1].GetMostProbableGeometry2DName(FailureMechanismSystemType.StabilityInside)); - Assert.AreEqual("Geometrie 1 piping", waterBoard.Segments[1].GetMostProbableGeometry2DName(FailureMechanismSystemType.Piping)); - } + Assert.AreEqual(2, waterBoard.Segments.Count); + Assert.AreEqual("Geometrie 1", waterBoard.Segments[0].GetMostProbableGeometry2DName(FailureMechanismSystemType.StabilityInside)); + Assert.AreEqual("Geometrie 1 piping", waterBoard.Segments[1].GetMostProbableGeometry2DName(FailureMechanismSystemType.Piping)); + Assert.AreEqual("Geometrie 2", waterBoard.Segments[1].GetMostProbableGeometry2DName(FailureMechanismSystemType.StabilityInside)); + Assert.AreEqual("Geometrie 1 piping", waterBoard.Segments[1].GetMostProbableGeometry2DName(FailureMechanismSystemType.Piping)); } + } - /// - /// Test - /// - [Test] - public void CanImportDikeWith1DSoilGeometries() + /// + /// Test + /// + [Test] + public void CanImportDikeWith1DSoilGeometries() + { + using (WaterBoard waterBoard = ImportDirector.Construct(importFolder, null)) { - using (WaterBoard waterBoard = ImportDirector.Construct(importFolder, null)) - { - Dike dike = waterBoard.Dikes[0]; + Dike dike = waterBoard.Dikes[0]; - Assert.IsNotNull(dike); + Assert.IsNotNull(dike); - Assert.AreEqual(2, dike.SoilProfiles.Count, "SoilProfiles.Count"); + Assert.AreEqual(2, dike.SoilProfiles.Count, "SoilProfiles.Count"); - Assert.AreEqual(2, waterBoard.Segments.Count, "Segments.Count"); + Assert.AreEqual(2, waterBoard.Segments.Count, "Segments.Count"); - Assert.AreEqual(1, dike.SurfaceLines2.Count, "SurfaceLines.Count"); + Assert.AreEqual(1, dike.SurfaceLines2.Count, "SurfaceLines.Count"); - Assert.AreEqual(1, dike.Locations.Count); - Assert.AreEqual("LOC1", dike.Locations[0].Name); - Assert.AreEqual("D1", dike.Locations[0].SurfaceLine2.Name); - Assert.AreEqual("1", dike.Locations[0].Segment.Name); - Assert.AreEqual(414.950, dike.Locations[0].XRd); - Assert.AreEqual(91.850, dike.Locations[0].YRd); - Assert.AreEqual(14.0, dike.Locations[0].XSoilGeometry2DOrigin); - Assert.AreEqual("ophoogmateriaaldijk", dike.Locations[0].DikeEmbankmentMaterial); - Assert.AreEqual("ophoogmateriaalberm", dike.Locations[0].ShoulderEmbankmentMaterial); - Assert.AreEqual(0.31, dike.Locations[0].DampingFactorPL3); - Assert.AreEqual(0.41, dike.Locations[0].DampingFactorPL4); - Assert.AreEqual(13, dike.SurfaceLines2[0].CharacteristicPoints.Count(cp => cp.CharacteristicPointType != CharacteristicPointType.None)); - Assert.IsNotNull(dike.SurfaceLines2[0].CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.BottomDitchPolderSide)); - } + Assert.AreEqual(1, dike.Locations.Count); + Assert.AreEqual("LOC1", dike.Locations[0].Name); + Assert.AreEqual("D1", dike.Locations[0].SurfaceLine2.Name); + Assert.AreEqual("1", dike.Locations[0].Segment.Name); + Assert.AreEqual(414.950, dike.Locations[0].XRd); + Assert.AreEqual(91.850, dike.Locations[0].YRd); + Assert.AreEqual(14.0, dike.Locations[0].XSoilGeometry2DOrigin); + Assert.AreEqual("ophoogmateriaaldijk", dike.Locations[0].DikeEmbankmentMaterial); + Assert.AreEqual("ophoogmateriaalberm", dike.Locations[0].ShoulderEmbankmentMaterial); + Assert.AreEqual(0.31, dike.Locations[0].DampingFactorPL3); + Assert.AreEqual(0.41, dike.Locations[0].DampingFactorPL4); + Assert.AreEqual(13, dike.SurfaceLines2[0].CharacteristicPoints.Count(cp => cp.CharacteristicPointType != CharacteristicPointType.None)); + Assert.IsNotNull(dike.SurfaceLines2[0].CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.BottomDitchPolderSide)); } + } - /// - /// Test - /// - [Test] - public void SoilProfilesOfImportedDikeHaveSameInstance() - { - WaterBoard waterBoard = ImportDirector.Construct(importFolder, null); - Dike dike = waterBoard.Dikes[0]; - Assert.AreSame(dike.SoilProfiles[0], waterBoard.Segments[0].GetMostProbableProfile(FailureMechanismSystemType.StabilityInside)); - } + /// + /// Test + /// + [Test] + public void SoilProfilesOfImportedDikeHaveSameInstance() + { + WaterBoard waterBoard = ImportDirector.Construct(importFolder, null); + Dike dike = waterBoard.Dikes[0]; + Assert.AreSame(dike.SoilProfiles[0], waterBoard.Segments[0].GetMostProbableProfile(FailureMechanismSystemType.StabilityInside)); + } - /// - /// Test - /// - /// - /// Test - /// - [Test] - public void SoilProfilesOfImportedDikeHaveCorrectProbability() - { - WaterBoard waterBoard = ImportDirector.Construct(importFolder, null); - Dike dike = waterBoard.Dikes[0]; - Assert.AreEqual(80, waterBoard.Segments[0].GetSoilProfileProbability(dike.SoilProfiles[0], FailureMechanismSystemType.StabilityInside)); - Assert.AreEqual(100, waterBoard.Segments[0].GetSoilProfileProbability(dike.SoilProfiles[1], FailureMechanismSystemType.Piping)); - } + /// + /// Test + /// + /// + /// Test + /// + [Test] + public void SoilProfilesOfImportedDikeHaveCorrectProbability() + { + WaterBoard waterBoard = ImportDirector.Construct(importFolder, null); + Dike dike = waterBoard.Dikes[0]; + Assert.AreEqual(80, waterBoard.Segments[0].GetSoilProfileProbability(dike.SoilProfiles[0], FailureMechanismSystemType.StabilityInside)); + Assert.AreEqual(100, waterBoard.Segments[0].GetSoilProfileProbability(dike.SoilProfiles[1], FailureMechanismSystemType.Piping)); + } - /// - /// Test - /// - [Test] - public void SegmentsOfImportedDikeHaveCorrectMostProbabableSoilProfile() - { - WaterBoard waterBoard = ImportDirector.Construct(importFolder, null); - Assert.AreEqual("1DP1", waterBoard.Segments[0].GetMostProbableProfile(FailureMechanismSystemType.StabilityInside).Name); - Assert.AreEqual("1DP2", waterBoard.Segments[0].GetMostProbableProfile(FailureMechanismSystemType.Piping).Name); - } + /// + /// Test + /// + [Test] + public void SegmentsOfImportedDikeHaveCorrectMostProbabableSoilProfile() + { + WaterBoard waterBoard = ImportDirector.Construct(importFolder, null); + Assert.AreEqual("1DP1", waterBoard.Segments[0].GetMostProbableProfile(FailureMechanismSystemType.StabilityInside).Name); + Assert.AreEqual("1DP2", waterBoard.Segments[0].GetMostProbableProfile(FailureMechanismSystemType.Piping).Name); + } - /// - /// Test - /// - [Test] - public void SurfaceLinesOfImportedDikeHaveSameInstance() - { - WaterBoard waterBoard = ImportDirector.Construct(importFolder, null); - Dike dike = waterBoard.Dikes[0]; - Assert.AreSame(dike.Locations[0].SurfaceLine2, dike.SurfaceLines2[0]); - } + /// + /// Test + /// + [Test] + public void SurfaceLinesOfImportedDikeHaveSameInstance() + { + WaterBoard waterBoard = ImportDirector.Construct(importFolder, null); + Dike dike = waterBoard.Dikes[0]; + Assert.AreSame(dike.Locations[0].SurfaceLine2, dike.SurfaceLines2[0]); + } - /// - /// Test - /// - [Test] - public void CanImportDikeWithMinimalInput() - { - WaterBoard waterBoard = ImportDirector.Construct(importFolder, null); - Dike dike = waterBoard.Dikes[0]; + /// + /// Test + /// + [Test] + public void CanImportDikeWithMinimalInput() + { + WaterBoard waterBoard = ImportDirector.Construct(importFolder, null); + Dike dike = waterBoard.Dikes[0]; - Assert.IsNotNull(dike); - } + Assert.IsNotNull(dike); + } - /// - /// Create csv file with 1D soilprofiles - /// - private void CreateSoilProfilesFile() - { - using StreamWriter writer = File.CreateText(importFolder + "\\soilprofiles.csv"); - writer.WriteLine("soilprofile_id;top_level;soil_name;"); - writer.WriteLine("1DP1;10;HW-OBO;"); - writer.WriteLine("1DP1;-0.6;HW-DUN;"); - writer.WriteLine("1DP1;-1.8;HW-DUOzand;"); - writer.WriteLine("1DP1;-2.8;HW-HVN;"); - writer.WriteLine("1DP1;-4;HW-HVN;"); - writer.WriteLine("1DP1;-5;Alg-zand (0-30);"); - writer.WriteLine("1DP2;10;HW-OBO;"); - writer.WriteLine("1DP2;-0.7;HW-DUN;"); - writer.WriteLine("1DP2;-1.5;HW-DUOzand;"); - writer.WriteLine("1DP2;-2.4;HW-HVN;"); - writer.WriteLine("1DP2;-4.3;HW-HVN;"); - writer.WriteLine("1DP2;-5.3;Alg-zand (0-30);"); - } + /// + /// Create csv file with 1D soilprofiles + /// + private void CreateSoilProfilesFile() + { + using StreamWriter writer = File.CreateText(importFolder + "\\soilprofiles.csv"); + writer.WriteLine("soilprofile_id;top_level;soil_name;"); + writer.WriteLine("1DP1;10;HW-OBO;"); + writer.WriteLine("1DP1;-0.6;HW-DUN;"); + writer.WriteLine("1DP1;-1.8;HW-DUOzand;"); + writer.WriteLine("1DP1;-2.8;HW-HVN;"); + writer.WriteLine("1DP1;-4;HW-HVN;"); + writer.WriteLine("1DP1;-5;Alg-zand (0-30);"); + writer.WriteLine("1DP2;10;HW-OBO;"); + writer.WriteLine("1DP2;-0.7;HW-DUN;"); + writer.WriteLine("1DP2;-1.5;HW-DUOzand;"); + writer.WriteLine("1DP2;-2.4;HW-HVN;"); + writer.WriteLine("1DP2;-4.3;HW-HVN;"); + writer.WriteLine("1DP2;-5.3;Alg-zand (0-30);"); + } - /// - /// Create csv file with scenarios - /// - private void CreateScenarios() - { - using StreamWriter writer = File.CreateText(importFolder + "\\scenarios.csv"); - writer.WriteLine("location_id;location_scenario_id;water_height;dike_table_height;safety_factor_stability_inner_slope;safety_factor_piping;water_height_decimerings_hoogte;max_waterheight"); - writer.WriteLine("LOC1;1;1.14;4.6;1.17;1.2;0.4;4"); - } + /// + /// Create csv file with scenarios + /// + private void CreateScenarios() + { + using StreamWriter writer = File.CreateText(importFolder + "\\scenarios.csv"); + writer.WriteLine("location_id;location_scenario_id;water_height;dike_table_height;safety_factor_stability_inner_slope;safety_factor_piping;water_height_decimerings_hoogte;max_waterheight"); + writer.WriteLine("LOC1;1;1.14;4.6;1.17;1.2;0.4;4"); + } - /// - /// Create csv file with surface lines - /// - private void CreateSurfaceLinesFiles() - { - using StreamWriter writer = File.CreateText(importFolder + "\\surfacelines.csv"); - writer.WriteLine( - "Profielnaam;Geologischprofiel;X_GridPoint;Y_GridPoint;ScenarioClusterID;X1;Y1;Z1;.....;Xn;Yn;Zn;(Profiel)"); - writer.WriteLine( - "D1;;63,310;0,000;1;0,000;0,000;0,680;21,110;0,000;1,120;31,600;0,000;1,300;31,730;0,000;1,610;32,210;0,000;1,670;35,580;0,000;1,580;40,480;0,000;1,940;47,860;0,000;3,790;50,110;0,000;4,460;51,750;0,000;4,662;52,630;0,000;4,770;54,250;0,000;4,690;55,170;0,000;4,460;58,850;0,000;2,980;60,290;0,000;2,460;63,310;0,000;1,360;67,900;0,000;1,070;69,410;0,000;0,600;69,800;0,000;0,480;70,530;0,000;0,000;70,820;0,000;-0,190;71,550;0,000;-0,600;72,370;0,000;-1,060;72,380;0,000;-1,170;72,550;0,000;-1,460;73,860;0,000;-1,390;73,990;0,000;-1,0;74,570;0,000;-0,840;74,970;0,000;-0,600;76,170;0,000;0,110;86,660;0,000;0,270;103,280;0,000;0,220;117,940;0,000;0,120"); - } + /// + /// Create csv file with surface lines + /// + private void CreateSurfaceLinesFiles() + { + using StreamWriter writer = File.CreateText(importFolder + "\\surfacelines.csv"); + writer.WriteLine( + "Profielnaam;Geologischprofiel;X_GridPoint;Y_GridPoint;ScenarioClusterID;X1;Y1;Z1;.....;Xn;Yn;Zn;(Profiel)"); + writer.WriteLine( + "D1;;63,310;0,000;1;0,000;0,000;0,680;21,110;0,000;1,120;31,600;0,000;1,300;31,730;0,000;1,610;32,210;0,000;1,670;35,580;0,000;1,580;40,480;0,000;1,940;47,860;0,000;3,790;50,110;0,000;4,460;51,750;0,000;4,662;52,630;0,000;4,770;54,250;0,000;4,690;55,170;0,000;4,460;58,850;0,000;2,980;60,290;0,000;2,460;63,310;0,000;1,360;67,900;0,000;1,070;69,410;0,000;0,600;69,800;0,000;0,480;70,530;0,000;0,000;70,820;0,000;-0,190;71,550;0,000;-0,600;72,370;0,000;-1,060;72,380;0,000;-1,170;72,550;0,000;-1,460;73,860;0,000;-1,390;73,990;0,000;-1,0;74,570;0,000;-0,840;74,970;0,000;-0,600;76,170;0,000;0,110;86,660;0,000;0,270;103,280;0,000;0,220;117,940;0,000;0,120"); + } - /// - /// Create csv file with segments containing 1d soilprofiles - /// - private void CreateSegmentsFor1DProfilesFile() - { - using StreamWriter writer = File.CreateText(importFolder + "\\segments.csv"); - writer.WriteLine("segment_id;soilprofile_id;probability;calculation_type"); - writer.WriteLine("1;1DP1;80;Stability"); - writer.WriteLine("1;1DP2;20;Stability"); - writer.WriteLine("1;1DP2;100;Piping"); - writer.WriteLine("2;1DP2;100;Stability"); - writer.WriteLine("2;1DP1;100;Piping"); - } + /// + /// Create csv file with segments containing 1d soilprofiles + /// + private void CreateSegmentsFor1DProfilesFile() + { + using StreamWriter writer = File.CreateText(importFolder + "\\segments.csv"); + writer.WriteLine("segment_id;soilprofile_id;probability;calculation_type"); + writer.WriteLine("1;1DP1;80;Stability"); + writer.WriteLine("1;1DP2;20;Stability"); + writer.WriteLine("1;1DP2;100;Piping"); + writer.WriteLine("2;1DP2;100;Stability"); + writer.WriteLine("2;1DP1;100;Piping"); + } - /// - /// Create csv file with locations - /// - private void CreateLocationsFile() - { - using StreamWriter writer = File.CreateText(importFolder + "\\locations.csv"); - writer.WriteLine("location_id;surfaceline_id;segment_id;geo_x;geo_y;x_soilgeometry2D_origin;Pl1_id;polderlevel;head_pl2;head_pl3;grass_quality;direction;ophoogmateriaaldijk;ophoogmateriaalberm;dempingsfactor_pl3;dempingsfactor_pl4;Sheetpile_x;Sheetpile_y;Sheetpile_z;Sheetpile_length;"); - writer.WriteLine("LOC1;D1;1;414.950;91.850;14.0;PL1A;0.1;4.0;3.0;4.3;1.0;ophoogmateriaaldijk;ophoogmateriaalberm;0.31;0.41;432.1;0.0;654.3;22.0;"); - } + /// + /// Create csv file with locations + /// + private void CreateLocationsFile() + { + using StreamWriter writer = File.CreateText(importFolder + "\\locations.csv"); + writer.WriteLine("location_id;surfaceline_id;segment_id;geo_x;geo_y;x_soilgeometry2D_origin;Pl1_id;polderlevel;head_pl2;head_pl3;grass_quality;direction;ophoogmateriaaldijk;ophoogmateriaalberm;dempingsfactor_pl3;dempingsfactor_pl4;Sheetpile_x;Sheetpile_y;Sheetpile_z;Sheetpile_length;"); + writer.WriteLine("LOC1;D1;1;414.950;91.850;14.0;PL1A;0.1;4.0;3.0;4.3;1.0;ophoogmateriaaldijk;ophoogmateriaalberm;0.31;0.41;432.1;0.0;654.3;22.0;"); + } - /// - /// Create csv file with characteristic points - /// - private void CreateCharacteristicPointsFile() - { - using StreamWriter writer = File.CreateText(importFolder + "\\characteristicpoints.csv"); - writer.WriteLine( - "Profielnaam;X_Maaiveld binnenwaarts;Y_Maaiveld binnenwaarts;Z_Maaiveld binnenwaarts;X_Insteek sloot polderzijde;Y_Insteek sloot polderzijde;Z_Insteek sloot polderzijde;X_Slootbodem polderzijde;Y_Slootbodem polderzijde;Z_Slootbodem polderzijde;X_Slootbodem dijkzijde;Y_Slootbodem dijkzijde;Z_Slootbodem dijkzijde;X_Insteek sloot dijkzijde;Y_Insteek_sloot dijkzijde;Z_Insteek sloot dijkzijde;X_Teen dijk binnenwaarts;Y_Teen dijk binnenwaarts;Z_Teen dijk binnenwaarts;X_Kruin binnenberm;Y_Kruin binnenberm;Z_Kruin binnenberm;X_Insteek binnenberm;Y_Insteek binnenberm;Z_Insteek binnenberm;X_Kruin binnentalud;Y_Kruin binnentalud;Z_Kruin binnentalud;X_Verkeersbelasting kant binnenwaarts;Y_Verkeersbelasting kant binnenwaarts;Z_Verkeersbelasting kant binnenwaarts;X_Verkeersbelasting kant buitenwaarts;Y_Verkeersbelasting kant buitenwaarts;Z_Verkeersbelasting kant buitenwaarts;X_Kruin buitentalud;Y_Kruin buitentalud;Z_Kruin buitentalud;X_Insteek buitenberm;Y_Insteek buitenberm;Z_Insteek buitenberm;X_Kruin buitenberm;Y_Kruin buitenberm;Z_Kruin buitenberm;X_Teen dijk buitenwaarts;Y_Teen dijk buitenwaarts;Z_Teen dijk buitenwaarts;X_Maaiveld buitenwaarts;Y_Maaiveld buitenwaarts;Z_Maaiveld buitenwaarts;Volgnummer"); - writer.WriteLine( - "D1;117,94;0;0,12;-1;-1;-1;73,99;0;-1,0;72,55;0;-1,46;67,9;0;1,07;63,31;0;1,36;-1;-1;-1;-1;-1;-1;55,17;0;4,46;54,25;0;4,69;51,75;0;4,662;50,11;0;4,46;40,48;0;1,94;32,21;0;1,67;31,6;0;1,3;0;0;0,68;1"); - } - - private void CreateSoilsFile() - { - using StreamWriter writer = File.CreateText(importFolder + "\\soils.csv"); - writer.WriteLine("soil_name;soil_color;soil_type;saturated_unit_weight;unsaturated_unit_weight;cohesion;friction_angle;diameter_d70;permeability_x;shear_strength_model;strength_increase_exponent;ratio_su_pc;use_pop;pop"); - writer.WriteLine("Zand;#A6EBFC;Sand;20.000;18.000;0.000;30.000;210.00;0.001;None;;;False;10.000"); - writer.WriteLine("Klei;#FFFFFF;Clay;17.500;17.500;3.500;18.500;210.00;0.001;None;;;False;10.000"); - writer.WriteLine("Veen;#A4FFA6;Peat;11.000;11.000;2.000;20.500;210.00;0.001;None;;;False;10.000"); - } + /// + /// Create csv file with characteristic points + /// + private void CreateCharacteristicPointsFile() + { + using StreamWriter writer = File.CreateText(importFolder + "\\characteristicpoints.csv"); + writer.WriteLine( + "Profielnaam;X_Maaiveld binnenwaarts;Y_Maaiveld binnenwaarts;Z_Maaiveld binnenwaarts;X_Insteek sloot polderzijde;Y_Insteek sloot polderzijde;Z_Insteek sloot polderzijde;X_Slootbodem polderzijde;Y_Slootbodem polderzijde;Z_Slootbodem polderzijde;X_Slootbodem dijkzijde;Y_Slootbodem dijkzijde;Z_Slootbodem dijkzijde;X_Insteek sloot dijkzijde;Y_Insteek_sloot dijkzijde;Z_Insteek sloot dijkzijde;X_Teen dijk binnenwaarts;Y_Teen dijk binnenwaarts;Z_Teen dijk binnenwaarts;X_Kruin binnenberm;Y_Kruin binnenberm;Z_Kruin binnenberm;X_Insteek binnenberm;Y_Insteek binnenberm;Z_Insteek binnenberm;X_Kruin binnentalud;Y_Kruin binnentalud;Z_Kruin binnentalud;X_Verkeersbelasting kant binnenwaarts;Y_Verkeersbelasting kant binnenwaarts;Z_Verkeersbelasting kant binnenwaarts;X_Verkeersbelasting kant buitenwaarts;Y_Verkeersbelasting kant buitenwaarts;Z_Verkeersbelasting kant buitenwaarts;X_Kruin buitentalud;Y_Kruin buitentalud;Z_Kruin buitentalud;X_Insteek buitenberm;Y_Insteek buitenberm;Z_Insteek buitenberm;X_Kruin buitenberm;Y_Kruin buitenberm;Z_Kruin buitenberm;X_Teen dijk buitenwaarts;Y_Teen dijk buitenwaarts;Z_Teen dijk buitenwaarts;X_Maaiveld buitenwaarts;Y_Maaiveld buitenwaarts;Z_Maaiveld buitenwaarts;Volgnummer"); + writer.WriteLine( + "D1;117,94;0;0,12;-1;-1;-1;73,99;0;-1,0;72,55;0;-1,46;67,9;0;1,07;63,31;0;1,36;-1;-1;-1;-1;-1;-1;55,17;0;4,46;54,25;0;4,69;51,75;0;4,662;50,11;0;4,46;40,48;0;1,94;32,21;0;1,67;31,6;0;1,3;0;0;0,68;1"); } + + private void CreateSoilsFile() + { + using StreamWriter writer = File.CreateText(importFolder + "\\soils.csv"); + writer.WriteLine("soil_name;soil_color;soil_type;saturated_unit_weight;unsaturated_unit_weight;cohesion;friction_angle;diameter_d70;permeability_x;shear_strength_model;strength_increase_exponent;ratio_su_pc;use_pop;pop"); + writer.WriteLine("Zand;#A6EBFC;Sand;20.000;18.000;0.000;30.000;210.00;0.001;None;0.700;0.220;False;10.000"); + writer.WriteLine("Klei;#FFFFFF;Clay;17.500;17.500;3.500;18.500;210.00;0.001;None;0.700;0.220;False;10.000"); + writer.WriteLine("Veen;#A4FFA6;Peat;11.000;11.000;2.000;20.500;210.00;0.001;None;0.700;0.220;False;10.000"); + } } \ No newline at end of file Index: DamClients/DamUI/trunk/src/Dam/Deltares.Dam.Tests/CsvImporterTestsNew.cs =================================================================== diff -u -r4145 -r4157 --- DamClients/DamUI/trunk/src/Dam/Deltares.Dam.Tests/CsvImporterTestsNew.cs (.../CsvImporterTestsNew.cs) (revision 4145) +++ DamClients/DamUI/trunk/src/Dam/Deltares.Dam.Tests/CsvImporterTestsNew.cs (.../CsvImporterTestsNew.cs) (revision 4157) @@ -689,7 +689,7 @@ } [Test] - public void SoilsImporterCorrectFileTest() + public void SoilsImporterCorrectFileWithOnlyRequiredColumnDefinedTest() { const string importFile = "soils.csv"; string testFilePath = Path.Combine(importFolder, importFile); @@ -698,30 +698,78 @@ File.Delete(testFilePath); } - CreateSoilsFile(testFilePath); + CreateMinimalSoilsFile(testFilePath); var csvImporterSoils = new CsvImporterSoils(testFilePath); + Assert.That(csvImporterSoils.ImportedItems.Count, Is.EqualTo(2)); + IList soilRecords = csvImporterSoils.ImportedItems; + + CsvImporterSoils.SoilRecord soilRecord = soilRecords[0]; + Assert.That(soilRecord.SoilName, Is.EqualTo("Klei")); + Assert.That(soilRecord.SoilColor, Is.EqualTo(Color.FromArgb(255, 255, 255))); + Assert.That(soilRecord.SoilType, Is.EqualTo(SoilType.Clay)); + Assert.That(soilRecord.SaturatedUnitWeight, Is.Null); + Assert.That(soilRecord.UnsaturatedUnitWeight, Is.Null); + Assert.That(soilRecord.Cohesion, Is.Null); + Assert.That(soilRecord.FrictionAngle, Is.Null); + Assert.That(soilRecord.DiameterD70, Is.Null); + Assert.That(soilRecord.PermeabilityX, Is.Null); + Assert.That(soilRecord.ShearStrengthModel, Is.EqualTo((ShearStrengthModel) 0)); + Assert.That(soilRecord.StrengthIncreaseExponent, Is.Null); + Assert.That(soilRecord.RatioSuPc, Is.Null); + Assert.That(soilRecord.UsePop, Is.False); + Assert.That(soilRecord.Pop, Is.Null); + + soilRecord = soilRecords[1]; + Assert.That(soilRecord.SoilName, Is.EqualTo("Veen")); + Assert.That(soilRecord.SoilColor, Is.EqualTo(Color.FromArgb(164, 255, 166))); + Assert.That(soilRecord.SoilType, Is.EqualTo(SoilType.Peat)); + Assert.That(soilRecord.SaturatedUnitWeight, Is.Null); + Assert.That(soilRecord.UnsaturatedUnitWeight, Is.Null); + Assert.That(soilRecord.Cohesion, Is.Null); + Assert.That(soilRecord.FrictionAngle, Is.Null); + Assert.That(soilRecord.DiameterD70, Is.Null); + Assert.That(soilRecord.PermeabilityX, Is.Null); + Assert.That(soilRecord.ShearStrengthModel, Is.EqualTo((ShearStrengthModel) 0)); + Assert.That(soilRecord.StrengthIncreaseExponent, Is.Null); + Assert.That(soilRecord.RatioSuPc, Is.Null); + Assert.That(soilRecord.UsePop, Is.False); + Assert.That(soilRecord.Pop, Is.Null); + } + + [Test] + public void SoilsImporterCorrectFileWithAllColumnsDefinedTest() + { + const string importFile = "soils.csv"; + string testFilePath = Path.Combine(importFolder, importFile); + if (File.Exists(testFilePath)) + { + File.Delete(testFilePath); + } + + CreateFullSoilsFile(testFilePath); + var csvImporterSoils = new CsvImporterSoils(testFilePath); Assert.That(csvImporterSoils.ImportedItems.Count, Is.EqualTo(3)); IList soilRecords = csvImporterSoils.ImportedItems; CsvImporterSoils.SoilRecord soilRecord = soilRecords[0]; Assert.That(soilRecord.SoilName, Is.EqualTo("Zand")); Assert.That(soilRecord.SoilType, Is.EqualTo(SoilType.Sand)); - Assert.That(soilRecord.SoilColor, Is.EqualTo(Color.FromArgb(166,235, 252))); + Assert.That(soilRecord.SoilColor, Is.EqualTo(Color.FromArgb(166, 235, 252))); Assert.That(soilRecord.SaturatedUnitWeight, Is.EqualTo(20.000)); Assert.That(soilRecord.UnsaturatedUnitWeight, Is.EqualTo(18.000)); Assert.That(soilRecord.Cohesion, Is.EqualTo(0.000)); Assert.That(soilRecord.FrictionAngle, Is.EqualTo(30.000)); Assert.That(soilRecord.DiameterD70, Is.EqualTo(210.00)); Assert.That(soilRecord.PermeabilityX, Is.EqualTo(0.001)); Assert.That(soilRecord.ShearStrengthModel, Is.EqualTo(ShearStrengthModel.None)); - Assert.That(soilRecord.StrengthIncreaseExponent, Is.Null); - Assert.That(soilRecord.RatioSuPc, Is.Null); + Assert.That(soilRecord.StrengthIncreaseExponent, Is.EqualTo(0.700)); + Assert.That(soilRecord.RatioSuPc, Is.EqualTo(0.220)); Assert.That(soilRecord.UsePop, Is.False); Assert.That(soilRecord.Pop, Is.EqualTo(10.000)); soilRecord = soilRecords[1]; Assert.That(soilRecord.SoilName, Is.EqualTo("Klei")); - Assert.That(soilRecord.SoilColor, Is.EqualTo(Color.FromArgb(255,255, 255))); + Assert.That(soilRecord.SoilColor, Is.EqualTo(Color.FromArgb(255, 255, 255))); Assert.That(soilRecord.SoilType, Is.EqualTo(SoilType.Clay)); Assert.That(soilRecord.SaturatedUnitWeight, Is.EqualTo(17.500)); Assert.That(soilRecord.UnsaturatedUnitWeight, Is.EqualTo(17.500)); @@ -730,14 +778,14 @@ Assert.That(soilRecord.DiameterD70, Is.EqualTo(210.00)); Assert.That(soilRecord.PermeabilityX, Is.EqualTo(0.001)); Assert.That(soilRecord.ShearStrengthModel, Is.EqualTo(ShearStrengthModel.None)); - Assert.That(soilRecord.StrengthIncreaseExponent, Is.Null); - Assert.That(soilRecord.RatioSuPc, Is.Null); + Assert.That(soilRecord.StrengthIncreaseExponent, Is.EqualTo(0.700)); + Assert.That(soilRecord.RatioSuPc, Is.EqualTo(0.220)); Assert.That(soilRecord.UsePop, Is.False); Assert.That(soilRecord.Pop, Is.EqualTo(10.000)); soilRecord = soilRecords[2]; Assert.That(soilRecord.SoilName, Is.EqualTo("Veen")); - Assert.That(soilRecord.SoilColor, Is.EqualTo(Color.FromArgb(164,255, 166))); + Assert.That(soilRecord.SoilColor, Is.EqualTo(Color.FromArgb(164, 255, 166))); Assert.That(soilRecord.SoilType, Is.EqualTo(SoilType.Peat)); Assert.That(soilRecord.SaturatedUnitWeight, Is.EqualTo(11.000)); Assert.That(soilRecord.UnsaturatedUnitWeight, Is.EqualTo(11.000)); @@ -746,12 +794,12 @@ Assert.That(soilRecord.DiameterD70, Is.EqualTo(210.00)); Assert.That(soilRecord.PermeabilityX, Is.EqualTo(0.001)); Assert.That(soilRecord.ShearStrengthModel, Is.EqualTo(ShearStrengthModel.None)); - Assert.That(soilRecord.StrengthIncreaseExponent, Is.Null); - Assert.That(soilRecord.RatioSuPc, Is.Null); + Assert.That(soilRecord.StrengthIncreaseExponent, Is.EqualTo(0.700)); + Assert.That(soilRecord.RatioSuPc, Is.EqualTo(0.220)); Assert.That(soilRecord.UsePop, Is.False); Assert.That(soilRecord.Pop, Is.EqualTo(10.000)); } - + [Test] public void SoilsImporterWithIllegalHeaderTest() { @@ -762,7 +810,7 @@ File.Delete(testFilePath); } - CreateSegmentsFor2DGeometriesFile(testFilePath); + CreateSoilProfilesFileWithIllegalHeader(testFilePath); Assert.That(() => new CsvImporterSoils(testFilePath), Throws.InstanceOf()); } @@ -858,15 +906,23 @@ writer.WriteLine("1DP2;-5.3;Alg-zand (0-30)"); } - private static void CreateSoilsFile(string filePath) + private static void CreateFullSoilsFile(string filePath) { using StreamWriter writer = File.CreateText(filePath); writer.WriteLine("soil_name;soil_color;soil_type;saturated_unit_weight;unsaturated_unit_weight;cohesion;friction_angle;diameter_d70;permeability_x;shear_strength_model;strength_increase_exponent;ratio_su_pc;use_pop;pop"); - writer.WriteLine("Zand;#A6EBFC;Sand;20.000;18.000;0.000;30.000;210.00;0.001;None;;;False;10.000"); - writer.WriteLine("Klei;#FFFFFF;Clay;17.500;17.500;3.500;18.500;210.00;0.001;None;;;False;10.000"); - writer.WriteLine("Veen;#A4FFA6;Peat;11.000;11.000;2.000;20.500;210.00;0.001;None;;;False;10.000"); + writer.WriteLine("Zand;#A6EBFC;Sand;20.000;18.000;0.000;30.000;210.00;0.001;None;0.700;0.220;False;10.000"); + writer.WriteLine("Klei;#FFFFFF;Clay;17.500;17.500;3.500;18.500;210.00;0.001;None;0.700;0.220;False;10.000"); + writer.WriteLine("Veen;#A4FFA6;Peat;11.000;11.000;2.000;20.500;210.00;0.001;None;0.700;0.220;False;10.000"); } - + + private static void CreateMinimalSoilsFile(string filePath) + { + using StreamWriter writer = File.CreateText(filePath); + writer.WriteLine("soil_name;soil_color;soil_type"); + writer.WriteLine("Klei;#FFFFFF;Clay"); + writer.WriteLine("Veen;#A4FFA6;Peat"); + } + private static void CreateSoilsFileWithIllegalValues(string filePath) { using StreamWriter writer = File.CreateText(filePath); Index: DamClients/DamUI/trunk/src/DamClientsLibrary/Deltares.Dam.Data/CsvImporters/CsvImporterHelper.cs =================================================================== diff -u -r4146 -r4157 --- DamClients/DamUI/trunk/src/DamClientsLibrary/Deltares.Dam.Data/CsvImporters/CsvImporterHelper.cs (.../CsvImporterHelper.cs) (revision 4146) +++ DamClients/DamUI/trunk/src/DamClientsLibrary/Deltares.Dam.Data/CsvImporters/CsvImporterHelper.cs (.../CsvImporterHelper.cs) (revision 4157) @@ -33,15 +33,15 @@ /// the calling object /// the scv reader /// - static public string[] GetFieldHeaders(Object caller, CsvReader csvReader) + public static string[] GetFieldHeaders(object caller, CsvReader csvReader) { try { return csvReader.GetFieldHeaders(); } catch (Exception exception) { - string message = String.Format(LocalizationManager.GetTranslatedText(caller, "ErrorReadingCsvColumnNames"), exception.Message, caller.GetType()); + string message = string.Format(LocalizationManager.GetTranslatedText(caller, "ErrorReadingCsvColumnNames"), exception.Message, caller.GetType()); throw new CsvImporterException(message); } } Index: DamClients/DamUI/trunk/src/DamClientsLibrary/Deltares.Dam.Data/CsvImporters/CsvImporterSoils.cs =================================================================== diff -u -r4148 -r4157 --- DamClients/DamUI/trunk/src/DamClientsLibrary/Deltares.Dam.Data/CsvImporters/CsvImporterSoils.cs (.../CsvImporterSoils.cs) (revision 4148) +++ DamClients/DamUI/trunk/src/DamClientsLibrary/Deltares.Dam.Data/CsvImporters/CsvImporterSoils.cs (.../CsvImporterSoils.cs) (revision 4157) @@ -54,15 +54,21 @@ using (var csv = new CsvReader(new StreamReader(fileName), true, ';')) { string[] headers = CsvImporterHelper.GetFieldHeaders(this, csv); - if (headers.Length < 13) + if (headers.Length < 2) { string csvHeaderError = LocalizationManager.GetTranslatedText(GetType(), "csvHeaderError"); throw new CsvImporterSoilsException($"{fileName} : {csvHeaderError}"); } int colIndexSoilName = CsvReaderUtilities.GetHeaderIndexByString(headers, CsvColumnNames.SoilNameColumnName); - int colIndexSoilColor = CsvReaderUtilities.GetHeaderIndexByString(headers, CsvColumnNames.SoilColorColumnName); + CheckColumn(colIndexSoilName, fileName, CsvColumnNames.SoilNameColumnName); + + int colIndexSoilColor = CsvReaderUtilities.GetHeaderIndexByString(headers, CsvColumnNames.SoilNameColumnName); + CheckColumn(colIndexSoilName, fileName, CsvColumnNames.SoilColorColumnName); + int colIndexSoilType = CsvReaderUtilities.GetHeaderIndexByString(headers, CsvColumnNames.SoilTypeColumnName); + CheckColumn(colIndexSoilType, fileName, CsvColumnNames.SoilTypeColumnName); + int colIndexSaturatedUnitWeight = CsvReaderUtilities.GetHeaderIndexByString(headers, CsvColumnNames.SaturatedUnitWeightColumnName); int colIndexUnsaturatedUnitWeight = CsvReaderUtilities.GetHeaderIndexByString(headers, CsvColumnNames.UnsaturatedUnitWeightColumnName); int colIndexCohesion = CsvReaderUtilities.GetHeaderIndexByString(headers, CsvColumnNames.CohesionColumnName); @@ -81,24 +87,17 @@ int colIndex = -1; // Keep track of column for error message try { - if (colIndexSoilName > -1) - { - colIndex = colIndexSoilName; - soil.SoilName = csv[colIndex]; - } + // Required columns + colIndex = colIndexSoilName; + soil.SoilName = csv[colIndex]; - if (colIndexSoilColor > -1) - { - colIndex = colIndexSoilColor; - soil.SoilColor = ColorTranslator.FromHtml(csv[colIndex]); - } + colIndex = colIndexSoilColor; + soil.SoilColor = ColorTranslator.FromHtml(csv[colIndex]); - if (colIndexSoilType > -1) - { - colIndex = colIndexSoilType; - soil.SoilType = ConversionHelper.ConvertToSoilType(csv[colIndex]); - } + colIndex = colIndexSoilType; + soil.SoilType = ConversionHelper.ConvertToSoilType(csv[colIndex]); + // Optional columns if (colIndexSaturatedUnitWeight > -1) { colIndex = colIndexSaturatedUnitWeight; @@ -150,19 +149,13 @@ if (colIndexStrengthIncreaseExponent > -1) { colIndex = colIndexStrengthIncreaseExponent; - if (csv[colIndex] != "") - { - soil.StrengthIncreaseExponent = Convert.ToDouble(csv[colIndex]); - } + soil.StrengthIncreaseExponent = Convert.ToDouble(csv[colIndex]); } if (colIndexRatioSuPc > -1) { colIndex = colIndexRatioSuPc; - if (csv[colIndex] != "") - { - soil.RatioSuPc = Convert.ToDouble(csv[colIndex]); - } + soil.RatioSuPc = Convert.ToDouble(csv[colIndex]); } if (colIndexUsePop > -1) @@ -197,6 +190,15 @@ public List ErrorMessages { get; } = new(); + private void CheckColumn(int index, string fileName, string fieldName) + { + if (index < 0) + { + string csvHeaderFieldError = LocalizationManager.GetTranslatedText(GetType(), "csvHeaderFieldError"); + throw new CsvImporterSoilsException($"{fileName} : {csvHeaderFieldError} {fieldName}"); + } + } + public class SoilRecord { public string SoilName { get; set; }