Index: Ringtoets/Integration/src/Ringtoets.Integration.IO/Importers/HydraulicBoundaryDatabaseImporter.cs =================================================================== diff -u -r2cbc7eaddba985f6568c0d93430a36670366140e -rad5a4af7ff620379bbb94c0ab2b1d68d9bd01e8e --- Ringtoets/Integration/src/Ringtoets.Integration.IO/Importers/HydraulicBoundaryDatabaseImporter.cs (.../HydraulicBoundaryDatabaseImporter.cs) (revision 2cbc7eaddba985f6568c0d93430a36670366140e) +++ Ringtoets/Integration/src/Ringtoets.Integration.IO/Importers/HydraulicBoundaryDatabaseImporter.cs (.../HydraulicBoundaryDatabaseImporter.cs) (revision ad5a4af7ff620379bbb94c0ab2b1d68d9bd01e8e) @@ -20,12 +20,16 @@ // All rights reserved. using System; +using System.IO; using Core.Common.Base.IO; using Core.Common.IO.Readers; +using Core.Common.Util.Builders; using Ringtoets.Common.Data.Hydraulics; using Ringtoets.HydraRing.IO.HydraulicBoundaryDatabase; +using Ringtoets.HydraRing.IO.HydraulicLocationConfigurationDatabase; using Ringtoets.Integration.IO.Handlers; using Ringtoets.Integration.IO.Properties; +using RingtoetsCommonIOResources = Ringtoets.Common.IO.Properties.Resources; namespace Ringtoets.Integration.IO.Importers { @@ -57,12 +61,18 @@ protected override bool OnImport() { - ReadResult readResult = ReadHydraulicBoundaryDatabase(); - if (readResult.CriticalErrorOccurred || Canceled) + ReadResult readHydraulicBoundaryDatabaseResult = ReadHydraulicBoundaryDatabase(); + if (readHydraulicBoundaryDatabaseResult.CriticalErrorOccurred || Canceled) { return false; } + ReadResult readHydraulicLocationConfigurationDatabaseResult = ReadHydraulicLocationConfigurationDatabase(); + if (readHydraulicLocationConfigurationDatabaseResult.CriticalErrorOccurred) + { + return false; + } + return true; } @@ -76,10 +86,9 @@ NotifyProgress(Resources.HydraulicBoundaryDatabaseImporter_ProgressText_Reading_HRD_file, 1, 1); try { - using (var reader = new OldHydraulicBoundaryDatabaseReader(FilePath)) + using (var reader = new HydraulicBoundaryDatabaseReader(FilePath)) { ReadResult readResult = ReadHydraulicBoundaryDatabase(reader); - return readResult; } } @@ -89,17 +98,48 @@ } } - private ReadResult ReadHydraulicBoundaryDatabase(OldHydraulicBoundaryDatabaseReader reader) + private ReadResult ReadHydraulicLocationConfigurationDatabase() { + string hlcdFilePath = Path.Combine(Path.GetDirectoryName(FilePath), "hlcd.sqlite"); + try + { + using (var reader = new HydraulicLocationConfigurationDatabaseReader(hlcdFilePath)) + { + ReadResult readResult = ReadHydraulicLocationConfigurationDatabase(reader); + return readResult; + } + } + catch (CriticalFileReadException) + { + return HandleCriticalFileReadError(RingtoetsCommonIOResources.HydraulicBoundaryDatabaseImporter_HLCD_sqlite_Not_Found); + } + } + + private ReadResult ReadHydraulicBoundaryDatabase(HydraulicBoundaryDatabaseReader reader) + { return new ReadResult(false); } + private ReadResult ReadHydraulicLocationConfigurationDatabase(HydraulicLocationConfigurationDatabaseReader reader) + { + return new ReadResult(false); + } + private ReadResult HandleCriticalFileReadError(Exception e) { string errorMessage = string.Format(Resources.HydraulicBoundaryDatabaseImporter_HandleCriticalFileReadError_Error_0_No_HydraulicBoundaryDatabase_imported, e.Message); Log.Error(errorMessage); return new ReadResult(true); } + + private ReadResult HandleCriticalFileReadError(string message) + { + string errorMessage = new FileReaderErrorMessageBuilder(FilePath).Build( + string.Format(Resources.HydraulicBoundaryDatabaseImporter_HandleCriticalFileReadError_Error_0_No_HydraulicBoundaryDatabase_imported, + message)); + Log.Error(errorMessage); + return new ReadResult(true); + } } } \ No newline at end of file Index: Ringtoets/Integration/test/Ringtoets.Integration.IO.Test/Importers/HydraulicBoundaryDatabaseImporterTest.cs =================================================================== diff -u -rfd12ada286ef8af1248a9d6100410dfeb15e9669 -rad5a4af7ff620379bbb94c0ab2b1d68d9bd01e8e --- Ringtoets/Integration/test/Ringtoets.Integration.IO.Test/Importers/HydraulicBoundaryDatabaseImporterTest.cs (.../HydraulicBoundaryDatabaseImporterTest.cs) (revision fd12ada286ef8af1248a9d6100410dfeb15e9669) +++ Ringtoets/Integration/test/Ringtoets.Integration.IO.Test/Importers/HydraulicBoundaryDatabaseImporterTest.cs (.../HydraulicBoundaryDatabaseImporterTest.cs) (revision ad5a4af7ff620379bbb94c0ab2b1d68d9bd01e8e) @@ -111,6 +111,30 @@ } [Test] + public void Import_ExistingFileWithoutHlcd_ThrowCriticalFileReadException() + { + // Setup + var mocks = new MockRepository(); + var handler = mocks.StrictMock(); + mocks.ReplayAll(); + + string path = Path.Combine(testDataPath, "withoutHLCD", "empty.sqlite"); + + var importer = new HydraulicBoundaryDatabaseImporter(new HydraulicBoundaryDatabase(), handler, path); + + // Call + var importSuccessful = true; + Action call = () => importSuccessful = importer.Import(); + + // Assert + string expectedMessage = $@"Fout bij het lezen van bestand '{path}': het bijbehorende HLCD bestand is niet gevonden in dezelfde map als het HRD bestand." + + $"{Environment.NewLine}Er is geen hydraulische belastingen database gekoppeld."; + TestHelper.AssertLogMessageIsGenerated(call, expectedMessage, 1); + Assert.IsFalse(importSuccessful); + mocks.VerifyAll(); + } + + [Test] public void Import_ValidFiles_ExpectedProgressNotifications() { // Setup Index: Ringtoets/Integration/test/Ringtoets.Integration.IO.Test/test-data/HydraulicBoundaryDatabaseImporter/withoutHLCD/empty.sqlite =================================================================== diff -u Binary files differ