Index: DamClients/DamUI/trunk/src/DamClientsLibrary/Deltares.Dam.Data/IO/CombineImportedData.cs =================================================================== diff -u -r4111 -r4169 --- DamClients/DamUI/trunk/src/DamClientsLibrary/Deltares.Dam.Data/IO/CombineImportedData.cs (.../CombineImportedData.cs) (revision 4111) +++ DamClients/DamUI/trunk/src/DamClientsLibrary/Deltares.Dam.Data/IO/CombineImportedData.cs (.../CombineImportedData.cs) (revision 4169) @@ -52,6 +52,8 @@ public IEnumerable SurfaceLineRecords { get; set; } + public IEnumerable SoilRecords { get; set; } + public IEnumerable CharacteristicPointsRecords { get; set; } public IEnumerable ScenarioRecords { get; set; } @@ -76,6 +78,7 @@ TransferLocationsData(dike); TransferSoilProfilesData(dike); TransferSegmentData(dike); + TransferSoilData(dike); // Use InvokeWithoutPublishingEvents for performance reasons after introducing SurfaceLine2 DataEventPublisher.InvokeWithoutPublishingEvents(() => { TransferSurfaceLines(dike); }); } @@ -368,6 +371,11 @@ } } + private void TransferSoilData(Dike dike) + { + dike.FillDataBaseSoilListFromCsvFile(SoilRecords); + } + private void TransferSoilProfilesData(Dike dike) { if (SoilProfilerecords == null) Index: DamClients/DamUI/trunk/src/DamClientsLibrary/Deltares.Dam.Data/Dike.cs =================================================================== diff -u -r4070 -r4169 --- DamClients/DamUI/trunk/src/DamClientsLibrary/Deltares.Dam.Data/Dike.cs (.../Dike.cs) (revision 4070) +++ DamClients/DamUI/trunk/src/DamClientsLibrary/Deltares.Dam.Data/Dike.cs (.../Dike.cs) (revision 4169) @@ -25,6 +25,7 @@ using System.IO; using System.Linq; using System.Xml.Serialization; +using Deltares.Dam.Data.CsvImporters; using Deltares.Geotechnics.Converter; using Deltares.Geotechnics.Soils; using Deltares.Geotechnics.SurfaceLines; @@ -60,7 +61,7 @@ private SoilList soilList; private IList soilProfiles; private string soilDatabaseName = ""; - private List databaseSoils = new List(); + private List databaseSoils = new (); public Dike() { @@ -266,6 +267,8 @@ } /// + /// Read all the soils and their parameters from the database + /// /// Add 1D-soilprofiles from MGeobase database /// public void AddSoilProfilesFromDB() @@ -293,7 +296,76 @@ soilProfiles.Add(addedSoilProfile); } } + + /// + /// Add to soil data as read from the csv-file to the dike database + /// + public void FillDataBaseSoilListFromCsvFile(IEnumerable soilRecords) + { + if (soilRecords == null) + { + return; + } + foreach (CsvImporterSoils.SoilRecord soilRecord in soilRecords) + { + var soil = new Soil(); + soil.Name = soilRecord.SoilName; + soil.Color = soilRecord.SoilColor; + soil.SoilType = soilRecord.SoilType; + + if (soilRecord.SaturatedUnitWeight.HasValue) + { + soil.AbovePhreaticLevel = soilRecord.SaturatedUnitWeight.Value; + } + + if (soilRecord.UnsaturatedUnitWeight.HasValue) + { + soil.BelowPhreaticLevel = soilRecord.UnsaturatedUnitWeight.Value; + } + + if (soilRecord.Cohesion.HasValue) + { + soil.Cohesion = soilRecord.Cohesion.Value; + } + + if (soilRecord.FrictionAngle.HasValue) + { + soil.FrictionAngle = soilRecord.FrictionAngle.Value; + } + + if (soilRecord.DiameterD70.HasValue) + { + soil.DiameterD70 = soilRecord.DiameterD70.Value; + } + + if (soilRecord.PermeabilityX.HasValue) + { + soil.PermeabKx = soilRecord.PermeabilityX.Value; + + } + + soil.ShearStrengthModel = soilRecord.ShearStrengthModel; + + if (soilRecord.StrengthIncreaseExponent.HasValue) + { + soil.StrengthIncreaseExponent = soilRecord.StrengthIncreaseExponent.Value; + } + + if (soilRecord.RatioSuPc.HasValue) + { + soil.RatioCuPc = soilRecord.RatioSuPc.Value; + } + + if (soilRecord.Pop.HasValue && soilRecord.UsePop) + { + soil.POP = soilRecord.Pop.Value; + } + + databaseSoils.Add(soil); + } + } + /// /// Adapt data so it is consistent /// Index: DamClients/DamUI/trunk/src/Dam/Deltares.Dam.Tests/CsvImporterTest.cs =================================================================== diff -u -r4168 -r4169 --- DamClients/DamUI/trunk/src/Dam/Deltares.Dam.Tests/CsvImporterTest.cs (.../CsvImporterTest.cs) (revision 4168) +++ DamClients/DamUI/trunk/src/Dam/Deltares.Dam.Tests/CsvImporterTest.cs (.../CsvImporterTest.cs) (revision 4169) @@ -31,7 +31,6 @@ [TestFixture] public class CsvImporterTest { - private string dataFolder; private string importFolder; /// @@ -40,7 +39,6 @@ [SetUp] public void FixtureSetup() { - dataFolder = Path.Combine(Directory.GetCurrentDirectory(), @"TestData\"); importFolder = Path.Combine(Directory.GetCurrentDirectory(), "TmpImportFiles"); Directory.CreateDirectory(importFolder); } @@ -67,8 +65,6 @@ Directory.CreateDirectory(importFolder); - File.Copy(Path.Combine(dataFolder, @"HoekscheWaardCsv\soilmaterials.mdb"), Path.Combine(importFolder, "soilmaterials.mdb")); - CreateCharacteristicPointsFile(); CreateLocationsFile(); CreateSegmentsFor1DProfilesFile(); @@ -310,9 +306,13 @@ 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;C phi;0.700;0.220;False;10.000"); - writer.WriteLine("Veen;#A4FFA6;Peat;11.000;11.000;2.000;20.500;210.00;0.001;Su calculated;0.700;0.220;False;10.000"); + writer.WriteLine("soil_name;soil_color;soil_type;saturated_unit_weight;unsaturated_unit_weight;cohesion;friction_angle;diameter_d70;permeability_x;shear_strength_model;use_pop;pop"); + writer.WriteLine("Alg-zand (0-30);#FFFFFF;Sand;18.00;18.00;4.60;21.90;200.00;0.2;CPhi;True;10.00"); + writer.WriteLine("HW-CAO;#FFFFFF;Clay;17.00;17.00;3.50;16.50;200.00;0.2;CPhi;True;10.00"); + writer.WriteLine("HW-DUN;#FFFFFF;Clay;15.80;15.80;1.60;21.30;200.00;0.2;CPhi;True;10.00"); + writer.WriteLine("HW-DUOklei;#FFFFFF;Clay;20.00;17.00;0.00;30.00;200.00;0.2;CPhi;True;10.00"); + writer.WriteLine("HW-DUOzand;#FFFFFF;Sand;17.70;17.70;4.00;17.60;200.00;0.2;CPhi;True;10.00"); + writer.WriteLine("HW-HVN;#FFFFFF;Peat;10.40;10.40;4.50;17.50;200.00;0.2;CPhi;True;10.00"); + writer.WriteLine("HW-OBO;#FFFFFF;Clay;15.80;15.80;3.00;21.20;200.00;0.2;CPhi;True;10.00"); } } \ No newline at end of file Index: DamClients/DamUI/trunk/src/DamClientsLibrary/Deltares.Dam.Data/DamProject.cs =================================================================== diff -u -r4070 -r4169 --- DamClients/DamUI/trunk/src/DamClientsLibrary/Deltares.Dam.Data/DamProject.cs (.../DamProject.cs) (revision 4070) +++ DamClients/DamUI/trunk/src/DamClientsLibrary/Deltares.Dam.Data/DamProject.cs (.../DamProject.cs) (revision 4169) @@ -447,7 +447,6 @@ DataEventPublisher.InvokeWithoutPublishingEvents(() => { - EnsureSoilmaterialsFileWithProject(fileName); EnsureGeometries2DMapWithProject(fileName, savedProjectMap, dataSourceFolder); var xmlSerializer = new XmlSerializer(); @@ -662,33 +661,32 @@ /// private static void UpdateSoilListFromDatabase(Dike dike) { - using (var geoDatabase = new GeoDatabase(dike.SoilDatabaseName)) + SoilList soilList = dike.SoilList; + Dictionary soils = soilList.Soils.ToDictionary(s => s.Name); + CleanDikeAquiferDictionary(dike); + foreach (Soil soil in dike.SoilList.Soils) { - geoDatabase.ReUseSoils = true; - // read list from old DB and put them in a dictonary by name - SoilList soilList = geoDatabase.ReadSoils(dike.SoilList.Soils); - Dictionary soils = soilList.Soils.ToDictionary(s => s.Name); - CleanDikeAquiferDictionary(dike); - foreach (Soil soil in dike.SoilList.Soils) + Soil newSoil = soils[soil.Name]; + // if the current soil was found in the db list, update the params for the current soil + if (newSoil != null) { - Soil newSoil = soils[soil.Name]; - // if the current soil was found in the db list, update the params for the current soil - if (newSoil != null) + soil.Assign(newSoil); + // update aquifer dictionary too + if (soilList.AquiferDictionary.ContainsKey(newSoil)) { - soil.Assign(newSoil); - // update aquifer dictionary too - if (soilList.AquiferDictionary.ContainsKey(newSoil)) + if (dike.SoilList.AquiferDictionary.ContainsKey(soil)) { - if (dike.SoilList.AquiferDictionary.ContainsKey(soil)) - { - dike.SoilList.AquiferDictionary[soil] = soilList.AquiferDictionary[newSoil]; - } - else - { - dike.SoilList.AquiferDictionary.Add(soil, soilList.AquiferDictionary[newSoil]); - } + dike.SoilList.AquiferDictionary[soil] = soilList.AquiferDictionary[newSoil]; } + else + { + dike.SoilList.AquiferDictionary.Add(soil, soilList.AquiferDictionary[newSoil]); + } } + else + { + dike.SoilList.AquiferDictionary.Add(soil, false); + } } } } @@ -839,44 +837,6 @@ return Directory.Exists(directory) ? directory : Path.Combine(dataSourceDirectory, soilGeometryDirectory); } - /// - /// Make sure soilamterials file is copied besides the project file - /// and reference to the file is set to it - /// - /// the filename of the project - private void EnsureSoilmaterialsFileWithProject(string fileName) - { - for (var dikeIndex = 0; dikeIndex < damProjectData.WaterBoard.Dikes.Count; dikeIndex++) - { - string path = Path.GetFullPath(damProjectData.WaterBoard.Dikes[dikeIndex].SoilDatabaseName); - // ThrowIfMoreThanOneDikeInProject(); - Dike dike = DamProjectData.WaterBoard.Dikes[dikeIndex]; - string sourceSoilmaterialsFilename = damProjectData.WaterBoard.Dikes[dikeIndex].SoilDatabaseName; - string destSoilmaterialsFilename = CreateNewSoilMaterialsFilename(fileName, sourceSoilmaterialsFilename, dikeIndex); - string fullFilename = Path.GetFullPath(fileName); - string destSoilmaterialsFullFilename = Path.Combine(Path.GetDirectoryName(fullFilename), destSoilmaterialsFilename); - string orgSoilmaterialsFullFilename = Path.GetFullPath(sourceSoilmaterialsFilename); - if (!orgSoilmaterialsFullFilename.Equals(destSoilmaterialsFullFilename)) - { - if (File.Exists(destSoilmaterialsFullFilename)) - { - File.Delete(destSoilmaterialsFullFilename); - } - - if (File.Exists(orgSoilmaterialsFullFilename)) - { - File.Copy(orgSoilmaterialsFullFilename, destSoilmaterialsFullFilename); - } - } - - damProjectData.WaterBoard.Dikes[dikeIndex].SoilDatabaseName = destSoilmaterialsFullFilename; - foreach (Location location in damProjectData.WaterBoard.Dikes[dikeIndex].Locations) - { - location.SoildatabaseName = destSoilmaterialsFullFilename; - } - } - } - private void DeleteResultData() { damProjectData.DeleteResults(); Index: DamClients/DamUI/trunk/src/DamClientsLibrary/Deltares.Dam.Data/WaterBoardImporter.cs =================================================================== diff -u -r4070 -r4169 --- DamClients/DamUI/trunk/src/DamClientsLibrary/Deltares.Dam.Data/WaterBoardImporter.cs (.../WaterBoardImporter.cs) (revision 4070) +++ DamClients/DamUI/trunk/src/DamClientsLibrary/Deltares.Dam.Data/WaterBoardImporter.cs (.../WaterBoardImporter.cs) (revision 4169) @@ -24,6 +24,7 @@ using System.Globalization; using System.IO; using System.Linq; +using Deltares.Dam.Data.CsvImporters; using Deltares.Dam.Data.DataPlugins; using Deltares.Dam.Data.DataPlugins.Configuration; using Deltares.Geometry; @@ -179,10 +180,15 @@ var waterBoard = new WaterBoard(); try { - waterBoard = importer.ImportDataForDikeRings(damProjectFolder, dikeRingIds, progress); + string dataLocation = ""; + foreach (DataSource dataSource in dataSourceContainer.DataSourceList.Where(dataSource => dataSource.DataSourceType == DataSourceType.CsvFiles)) + { + dataLocation = GetDataLocation(dataSource, importer.DataFolder); + } + waterBoard = importer.ImportDataForDikeRings(damProjectFolder, dataLocation, dikeRingIds, progress); foreach (Dike dike in waterBoard.Dikes) { - if (String.IsNullOrEmpty(dike.MapForSoilGeometries2D) && !String.IsNullOrEmpty(dataSourceContainer.MapSoilProfile2D)) + if (string.IsNullOrEmpty(dike.MapForSoilGeometries2D) && !string.IsNullOrEmpty(dataSourceContainer.MapSoilProfile2D)) { dike.MapForSoilGeometries2D = dataSourceContainer.MapSoilProfile2D; } @@ -251,6 +257,18 @@ } } + private static string GetDataLocation(DataSource dataSource, string dataFolder) + { + string dataLocation = dataSource.DataLocation; + if (!string.IsNullOrEmpty(dataFolder) + && (!Directory.Exists(dataLocation) || !File.Exists(dataLocation))) + { + dataLocation = Path.Combine(dataFolder, dataLocation); + } + + return dataLocation; + } + /// /// Creates the data plugin. /// @@ -270,10 +288,11 @@ /// Imports the data for dike rings. /// /// The dam project folder. + /// The location of the csv files. /// The dike ring ids. /// The progress. /// - private WaterBoard ImportDataForDikeRings(string damProjectFolder, IEnumerable dikeRingIds, ProgressDelegate progress) + private WaterBoard ImportDataForDikeRings(string damProjectFolder, string dataLocation, IEnumerable dikeRingIds, ProgressDelegate progress) { List dikeRingList = ValidateDikeRingIDs(dikeRingIds); @@ -291,7 +310,7 @@ foreach (string dikeRingId in dikeRingList) { // Add dikes to waterboard - Dike dike = ImportDataForDikeRing(dikeRingId); + Dike dike = ImportDataForDikeRing(dikeRingId, dataLocation); waterBoard.Dikes.Add(dike); } @@ -323,42 +342,19 @@ } /// - /// Determines the database name from data sources. - /// - /// The dike. - private void DetermineDatabaseNameFromDataSources(Dike dike) - { - List sources = DataSourceList.ToList(); - - // get the data base name from the data sources - DataSource dataSource = - sources.FirstOrDefault(ds => ds.DataSourceType == DataSourceType.MSoilBase) ?? - sources.FirstOrDefault(ds => ds.DataSourceType == DataSourceType.CsvFiles); - - if (dataSource != null) - { - if (dataSource.DataSourceType == DataSourceType.MSoilBase) - { - dike.SoilDatabaseName = Path.Combine(DataFolder, dataSource.DataLocation); - } - else - { - string subFolder = Path.Combine(DataFolder, dataSource.DataLocation); - dike.SoilDatabaseName = Path.Combine(subFolder, "soilmaterials.mdb"); - } - } - } - - /// /// Imports the soils. /// /// The dike ring identifier. + /// The location of the csv files. /// The dike. - private void ImportSoils(string dikeRingID, Dike dike) + private void ImportSoils(string dikeRingID, string dataLocation, Dike dike) { dike.SoilList = GetSoils(dikeRingID); - DetermineDatabaseNameFromDataSources(dike); - dike.FillDataBaseSoilListFromSoilBase(); + var csvImporter = new CsvImporter(); + DataSourceManager.CurrentSource = DataSourceSystemType.Csv; + csvImporter.ImportCsvDataFromDirectory(dataLocation, false, null, damProjectType); + + dike.FillDataBaseSoilListFromCsvFile(csvImporter.SoilsRecords); } /// @@ -414,14 +410,15 @@ /// Imports the data for dike ring. /// /// The dike ring identifier. + /// The location of the csv files. /// - private Dike ImportDataForDikeRing(string dikeRingId) + private Dike ImportDataForDikeRing(string dikeRingId, string dataLocation) { var dike = new Dike { Name = dikeRingId }; - ImportSoils(dikeRingId, dike); + ImportSoils(dikeRingId, dataLocation, dike); ImportSoilProfiles1D(dikeRingId, dike); Index: DamClients/DamUI/trunk/src/DamClientsLibrary/Deltares.Dam.Data/DataPlugins/DataPluginImporter.cs =================================================================== diff -u -r4167 -r4169 --- DamClients/DamUI/trunk/src/DamClientsLibrary/Deltares.Dam.Data/DataPlugins/DataPluginImporter.cs (.../DataPluginImporter.cs) (revision 4167) +++ DamClients/DamUI/trunk/src/DamClientsLibrary/Deltares.Dam.Data/DataPlugins/DataPluginImporter.cs (.../DataPluginImporter.cs) (revision 4169) @@ -1291,7 +1291,8 @@ { WaterBoard = waterBoard, LocationRecords = csvImporter.LocationRecords, - ScenarioRecords = csvImporter.ScenariosRecords + ScenarioRecords = csvImporter.ScenariosRecords, + SoilRecords = csvImporter.SoilsRecords }; combineImportedData.AddScenarioDataToDikes(); ImportLogMessages.AddRange(combineImportedData.ErrorMessages); @@ -1317,7 +1318,8 @@ ScenarioRecords = csvImporter.ScenariosRecords, SegmentRecords = csvImporter.SegmentRecords, SoilProfilerecords = csvImporter.SoilProfilesRecords, - SurfaceLineRecords = csvImporter.SurfaceLinesRecords + SurfaceLineRecords = csvImporter.SurfaceLinesRecords, + SoilRecords = csvImporter.SoilsRecords }; combineImportedData.AddCsvDataToDikes(); ImportLogMessages.AddRange(combineImportedData.ErrorMessages);