Index: DamClients/DamUI/trunk/src/Dam/Deltares.Dam.Tests/CsvImporterTests.cs =================================================================== diff -u -r4932 -r4933 --- DamClients/DamUI/trunk/src/Dam/Deltares.Dam.Tests/CsvImporterTests.cs (.../CsvImporterTests.cs) (revision 4932) +++ DamClients/DamUI/trunk/src/Dam/Deltares.Dam.Tests/CsvImporterTests.cs (.../CsvImporterTests.cs) (revision 4933) @@ -283,8 +283,38 @@ var ex = Assert.Throws(() => new CsvImporterAquifers(testFilePath)); Assert.That(ex.Message, Does.Contain("The header misses the field: layer_name")); } - + [Test] + public void AquifersImporterMissingStixFileNameTest() + { + const string importFile = "aquifers.csv"; + string testFilePath = Path.Combine(importFolder, importFile); + if (File.Exists(testFilePath)) + { + File.Delete(testFilePath); + } + + CreateAquifersFileWithMissingStixFileName(testFilePath); + var importer = new CsvImporterAquifers(testFilePath); + Assert.That(importer.ErrorMessages[0], Is.EqualTo("Aquifer record 3 has no stix filename.")); + } + + [Test] + public void AquifersImporterMissingLayerNameTest() + { + const string importFile = "aquifers.csv"; + string testFilePath = Path.Combine(importFolder, importFile); + if (File.Exists(testFilePath)) + { + File.Delete(testFilePath); + } + + CreateAquifersFileWithMissingLayerName(testFilePath); + var importer = new CsvImporterAquifers(testFilePath); + Assert.That(importer.ErrorMessages[0], Is.EqualTo("Aquifer record 3 has no layer name.")); + } + + [Test] public void CharacteristicPointsImporterCorrectFileTest() { const string importFile = "characteristicpoints.csv"; @@ -1032,6 +1062,7 @@ writer.WriteLine("DWP_2.stix;L1"); writer.WriteLine("DWP_2.stix;L1"); writer.WriteLine("DWP_3.stix;L2"); + writer.WriteLine(";"); } private static void CreateAquifersFileWithIllegalHeader(string filePath) @@ -1047,6 +1078,22 @@ writer.WriteLine("stix_filename;aquifer_name"); writer.WriteLine("DWP_1.stix;L1"); } + + private static void CreateAquifersFileWithMissingStixFileName(string filePath) + { + using StreamWriter writer = File.CreateText(filePath); + writer.WriteLine("stix_filename;layer_name"); + writer.WriteLine("DWP_1.stix;L1"); + writer.WriteLine(";L5"); + } + + private static void CreateAquifersFileWithMissingLayerName(string filePath) + { + using StreamWriter writer = File.CreateText(filePath); + writer.WriteLine("stix_filename;layer_name"); + writer.WriteLine("DWP_1.stix;L1"); + writer.WriteLine("DWP_1.stix;"); + } private static void CreateFullSoilsFile(string filePath) { Index: DamClients/DamUI/trunk/src/DamClientsLibrary/Deltares.Dam.Data/Translations.xml =================================================================== diff -u -r4926 -r4933 --- DamClients/DamUI/trunk/src/DamClientsLibrary/Deltares.Dam.Data/Translations.xml (.../Translations.xml) (revision 4926) +++ DamClients/DamUI/trunk/src/DamClientsLibrary/Deltares.Dam.Data/Translations.xml (.../Translations.xml) (revision 4933) @@ -361,15 +361,19 @@ en-US="Next error occured whilst reading characteristic points in location {0} column {1} from csv: " nl-NL="Tijdens het lezen van karakteristieke punten in locatie {0} in kolom {1} uit de csv trad de volgende fout op: "/> + en-US="Next error occured whilst reading aquifer for column {0} from csv: " + nl-NL="Tijdens het lezen van watervoerende laag voor kolom {0} uit de csv trad de volgende fout op: "/> + + Index: DamClients/DamUI/trunk/src/DamClientsLibrary/Deltares.Dam.Data/Aquifer.cs =================================================================== diff -u --- DamClients/DamUI/trunk/src/DamClientsLibrary/Deltares.Dam.Data/Aquifer.cs (revision 0) +++ DamClients/DamUI/trunk/src/DamClientsLibrary/Deltares.Dam.Data/Aquifer.cs (revision 4933) @@ -0,0 +1,28 @@ +// Copyright (C) Stichting Deltares 2024. All rights reserved. +// +// This file is part of the application DAM - UI. +// +// DAM - UI is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program. If not, see . +// +// All names, logos, and references to "Deltares" are registered trademarks of +// Stichting Deltares and remain full property of Stichting Deltares at all times. +// All rights reserved. + +namespace Deltares.Dam.Data; + +public class Aquifer +{ + public string StixFileName { get; set; } + public string LayerName { get; set; } +} \ No newline at end of file Index: DamClients/DamUI/trunk/src/DamClientsLibrary/Deltares.Dam.Data/IO/CombineImportedData.cs =================================================================== diff -u -r4931 -r4933 --- DamClients/DamUI/trunk/src/DamClientsLibrary/Deltares.Dam.Data/IO/CombineImportedData.cs (.../CombineImportedData.cs) (revision 4931) +++ DamClients/DamUI/trunk/src/DamClientsLibrary/Deltares.Dam.Data/IO/CombineImportedData.cs (.../CombineImportedData.cs) (revision 4933) @@ -31,6 +31,7 @@ using Deltares.Standard.EventPublisher; using Deltares.Standard.Language; using Deltares.Standard.Logging; +using DGeoSuite.Common; namespace Deltares.Dam.Data.IO; @@ -573,7 +574,7 @@ private void TransferAquifersData(Dike dike) { - // ToDo: Aquifers + dike.FillImportedAquifersFromCsvFile(AquiferRecords); } private void TransferSurfaceLines(Dike dike) Index: DamClients/DamUI/trunk/src/Dam/Deltares.Dam.Tests/IO/CombineImportedDataTest.cs =================================================================== diff -u -r4926 -r4933 --- DamClients/DamUI/trunk/src/Dam/Deltares.Dam.Tests/IO/CombineImportedDataTest.cs (.../CombineImportedDataTest.cs) (revision 4926) +++ DamClients/DamUI/trunk/src/Dam/Deltares.Dam.Tests/IO/CombineImportedDataTest.cs (.../CombineImportedDataTest.cs) (revision 4933) @@ -146,6 +146,18 @@ // Total number of scenarios Assert.That(damProjectData.WaterBoard.Dikes[0].Scenarios.Count, Is.EqualTo(19652)); + // Check aquifer data + var aquifers = damProjectData.WaterBoard.Dikes[0].ImportedCsvAquifers; + Assert.That(aquifers.Count, Is.EqualTo(4)); + Assert.That(aquifers[0].StixFileName, Is.EqualTo("DWP_1.stix")); + Assert.That(aquifers[0].LayerName, Is.EqualTo("L1")); + Assert.That(aquifers[1].StixFileName, Is.EqualTo("DWP_1.stix")); + Assert.That(aquifers[1].LayerName, Is.EqualTo("L5")); + Assert.That(aquifers[2].StixFileName, Is.EqualTo("DWP_2.stix")); + Assert.That(aquifers[2].LayerName, Is.EqualTo("L1")); + Assert.That(aquifers[3].StixFileName, Is.EqualTo("DWP_3.stix")); + Assert.That(aquifers[3].LayerName, Is.EqualTo("L2")); + // Check if all soilprobabbilites are read Segment segment = damProjectData.WaterBoard.Segments.FirstOrDefault(s => s.Name.Equals("2")); var stabilityProbabilities = new List(segment.SoilProfileProbabilities.Where( @@ -168,7 +180,7 @@ } [Test] - public void TestCombiningDataFullCsv() + public void TestCombiningDataFull1DProjectCsv() { LogManager.Messages.Clear(); const double tolerance = 0.001; Index: DamClients/DamUI/trunk/src/Dam/Deltares.Dam.Tests/Deltares.Dam.Tests.csproj =================================================================== diff -u -r4890 -r4933 --- DamClients/DamUI/trunk/src/Dam/Deltares.Dam.Tests/Deltares.Dam.Tests.csproj (.../Deltares.Dam.Tests.csproj) (revision 4890) +++ DamClients/DamUI/trunk/src/Dam/Deltares.Dam.Tests/Deltares.Dam.Tests.csproj (.../Deltares.Dam.Tests.csproj) (revision 4933) @@ -50,6 +50,9 @@ ..\..\..\lib\DamEngine\DGeoSuite.Components.Persistence.dll + + PreserveNewest + Index: DamClients/DamUI/trunk/src/DamClientsLibrary/Deltares.Dam.Data/CsvImporters/CsvImporterAquifers.cs =================================================================== diff -u -r4930 -r4933 --- DamClients/DamUI/trunk/src/DamClientsLibrary/Deltares.Dam.Data/CsvImporters/CsvImporterAquifers.cs (.../CsvImporterAquifers.cs) (revision 4930) +++ DamClients/DamUI/trunk/src/DamClientsLibrary/Deltares.Dam.Data/CsvImporters/CsvImporterAquifers.cs (.../CsvImporterAquifers.cs) (revision 4933) @@ -25,6 +25,7 @@ using System.IO; using System.Threading; using Deltares.Dam.Data.Importers; +using Deltares.DamEngine.Data.Standard.Logging; using Deltares.Standard.IO; using Deltares.Standard.Language; using LumenWorks.Framework.IO.Csv; @@ -82,13 +83,34 @@ colIndex = colIndexLayerName; aquiferRecord.LayerName = csv[colIndexLayerName]; - ImportedItems.Add(aquiferRecord); + if (string.IsNullOrEmpty(aquiferRecord.StixFileName) || string.IsNullOrEmpty(aquiferRecord.LayerName)) + { + if (string.IsNullOrEmpty(aquiferRecord.StixFileName) && string.IsNullOrEmpty(aquiferRecord.LayerName)) + { + continue; // ignore empty records + } + + string recordError; + if (string.IsNullOrEmpty(aquiferRecord.StixFileName)) + { + recordError = string.Format(LocalizationManager.GetTranslatedText(GetType(), "noStixFileNameForAquiferRecordError"), index); + } + else + { + recordError = string.Format(LocalizationManager.GetTranslatedText(GetType(), "noLayerNameForAquiferRecordError"), index); + } + ErrorMessages.Add($"{recordError}"); + } + else + { + ImportedItems.Add(aquiferRecord); + } } catch (Exception e) { string csvAquiferError = string.Format(LocalizationManager.GetTranslatedText(GetType(), "csvAquiferError"), - aquiferRecord.StixFileName, colIndex + 1); - ErrorMessages.Add($"Record {index} : {csvAquiferError + e.Message}"); + colIndex + 1); + ErrorMessages.Add($"Record {index}: {csvAquiferError + e.Message}"); } } } Index: DamClients/DamUI/trunk/src/Dam/Deltares.Dam.Tests/TestData/CSVData/ImporterTest/aquifers.csv =================================================================== diff -u --- DamClients/DamUI/trunk/src/Dam/Deltares.Dam.Tests/TestData/CSVData/ImporterTest/aquifers.csv (revision 0) +++ DamClients/DamUI/trunk/src/Dam/Deltares.Dam.Tests/TestData/CSVData/ImporterTest/aquifers.csv (revision 4933) @@ -0,0 +1,6 @@ +stix_filename;layer_name +DWP_1.stix;L1 +DWP_1.stix;L5 +DWP_2.stix;L1 +DWP_2.stix;L1 +DWP_3.stix;L2 \ No newline at end of file Index: DamClients/DamUI/trunk/src/DamClientsLibrary/Deltares.Dam.Data/Dike.cs =================================================================== diff -u -r4807 -r4933 --- DamClients/DamUI/trunk/src/DamClientsLibrary/Deltares.Dam.Data/Dike.cs (.../Dike.cs) (revision 4807) +++ DamClients/DamUI/trunk/src/DamClientsLibrary/Deltares.Dam.Data/Dike.cs (.../Dike.cs) (revision 4933) @@ -290,6 +290,33 @@ } /// + /// Fill the imported aquifers from the csv file + /// + /// + public void FillImportedAquifersFromCsvFile(IEnumerable aquiferRecords) + { + if (aquiferRecords == null) + { + return; + } + + foreach (CsvImporterAquifers.AquiferRecord aquiferRecord in aquiferRecords) + { + Aquifer aquifer = ImportedCsvAquifers.Find(sc => sc.StixFileName == aquiferRecord.StixFileName && sc.LayerName == aquiferRecord.LayerName); + if (aquifer != null) + { + continue; + } + aquifer = new Aquifer + { + StixFileName = aquiferRecord.StixFileName, + LayerName = aquiferRecord.LayerName + }; + ImportedCsvAquifers.Add(aquifer); + } + } + + /// /// Adapt data so it is consistent /// /// The soils as imported from the csv file @@ -388,7 +415,8 @@ internal List ImportedCsvSoils { get; } = new(); internal List ImportedCsvStressCurves { get; } = new(); - + internal List ImportedCsvAquifers { get; } = new(); + /// /// Tries to make the soil data as read for 1D profiles consistent with the data in the soil database. /// In the end we have a neat soil list with parameters for every soil as read from the database.