Index: Ringtoets/ClosingStructures/src/Ringtoets.ClosingStructures.IO/ClosingStructuresImporter.cs =================================================================== diff -u -rf9e4f420b403e6417f5dc2ba6d7beab9424baf89 -rd75706d5c26b844e76d93f6c1879d3acbf98cf77 --- Ringtoets/ClosingStructures/src/Ringtoets.ClosingStructures.IO/ClosingStructuresImporter.cs (.../ClosingStructuresImporter.cs) (revision f9e4f420b403e6417f5dc2ba6d7beab9424baf89) +++ Ringtoets/ClosingStructures/src/Ringtoets.ClosingStructures.IO/ClosingStructuresImporter.cs (.../ClosingStructuresImporter.cs) (revision d75706d5c26b844e76d93f6c1879d3acbf98cf77) @@ -70,16 +70,18 @@ Dictionary> groupedStructureParameterRows) { var closingStructures = new List(); - for (int i = 0; i < structureLocations.Count; i++) + foreach (StructureLocation structureLocation in structureLocations) { - StructureLocation structureLocation = structureLocations[i]; - string id = structureLocation.Id; if (!groupedStructureParameterRows.ContainsKey(id)) { - Log.WarnFormat(RingtoetsCommonIOResources.StructuresImporter_CreateSpecificStructures_no_structuresdata_for_Location_0_, id); - Log.ErrorFormat(RingtoetsCommonIOResources.StructuresImporter_Structure_number_0_is_skipped, i + 1); + var messages = new[] + { + string.Format(RingtoetsCommonIOResources.StructuresImporter_CreateSpecificStructures_no_structuresdata_for_Location_0_, + id) + }; + LogValidationErrorForStructure(structureLocation.Name, structureLocation.Id, messages); continue; } @@ -88,7 +90,7 @@ ValidationResult parameterRowsValidationResult = StructuresParameterRowsValidator.ValidateClosingStructuresParameters(structureParameterRows); if (!parameterRowsValidationResult.IsValid) { - LogMessages(parameterRowsValidationResult, i + 1); + LogValidationErrorForStructure(structureLocation.Name, structureLocation.Id, parameterRowsValidationResult.ErrorMessages); continue; } Index: Ringtoets/ClosingStructures/test/Ringtoets.ClosingStructures.IO.Test/ClosingStructuresImporterTest.cs =================================================================== diff -u -r7718705f6072a15ac28cb112abb949ee280391a9 -rd75706d5c26b844e76d93f6c1879d3acbf98cf77 --- Ringtoets/ClosingStructures/test/Ringtoets.ClosingStructures.IO.Test/ClosingStructuresImporterTest.cs (.../ClosingStructuresImporterTest.cs) (revision 7718705f6072a15ac28cb112abb949ee280391a9) +++ Ringtoets/ClosingStructures/test/Ringtoets.ClosingStructures.IO.Test/ClosingStructuresImporterTest.cs (.../ClosingStructuresImporterTest.cs) (revision d75706d5c26b844e76d93f6c1879d3acbf98cf77) @@ -22,6 +22,7 @@ using System; using System.Collections.Generic; using System.IO; +using System.Linq; using Core.Common.Base; using Core.Common.Base.Geometry; using Core.Common.TestUtil; @@ -75,17 +76,34 @@ Action call = () => importResult = structuresImporter.Import(); // Assert + string csvFilePath = Path.ChangeExtension(filePath, "csv"); string[] expectedMessages = { - "Kunstwerk nummer 2 wordt overgeslagen.", - "Kan geen geldige gegevens vinden voor kunstwerklocatie met KWKIDENT 'KUNST3'.", - "Kunstwerk nummer 3 wordt overgeslagen.", - "Kan geen geldige gegevens vinden voor kunstwerklocatie met KWKIDENT 'KUNST4'.", - "Kunstwerk nummer 4 wordt overgeslagen.", - "Kan geen geldige gegevens vinden voor kunstwerklocatie met KWKIDENT 'KUNST5'.", - "Kunstwerk nummer 5 wordt overgeslagen.", - "Kan geen geldige gegevens vinden voor kunstwerklocatie met KWKIDENT 'KUNST6'.", - "Kunstwerk nummer 6 wordt overgeslagen." + CreateExpectedErrorMessage(csvFilePath, "Gemaal Leemans (93k3)", "KUNST2", + new[] + { + "Kan geen geldige gegevens vinden voor kunstwerklocatie met KWKIDENT 'KUNST2'." + }), + CreateExpectedErrorMessage(csvFilePath, "Gemaal Lely (93k4)", "KUNST3", + new[] + { + "Kan geen geldige gegevens vinden voor kunstwerklocatie met KWKIDENT 'KUNST3'." + }), + CreateExpectedErrorMessage(csvFilePath, "Gemaal de Stontele (94k1)", "KUNST4", + new[] + { + "Kan geen geldige gegevens vinden voor kunstwerklocatie met KWKIDENT 'KUNST4'." + }), + CreateExpectedErrorMessage(csvFilePath, "Stontelerkeersluis (93k1)", "KUNST5", + new[] + { + "Kan geen geldige gegevens vinden voor kunstwerklocatie met KWKIDENT 'KUNST5'." + }), + CreateExpectedErrorMessage(csvFilePath, "Stontelerschutsluis (93k2)", "KUNST6", + new[] + { + "Kan geen geldige gegevens vinden voor kunstwerklocatie met KWKIDENT 'KUNST6'." + }) }; TestHelper.AssertLogMessagesAreGenerated(call, expectedMessages); Assert.IsTrue(importResult); @@ -173,25 +191,53 @@ Action call = () => importResult = structuresImporter.Import(); // Assert + string csvFilePath = Path.ChangeExtension(filePath, "csv"); string[] expectedMessages = { - "De waarde op regel 13, kolom 'NumeriekeWaarde' valt buiten het bereik [0, 360].", - "Parameter 'KW_BETSLUIT5' komt meermaals voor.", - "Kunstwerk nummer 1 wordt overgeslagen.", - "Kan geen geldige gegevens vinden voor kunstwerklocatie met KWKIDENT 'KUNST2'.", - "Kunstwerk nummer 2 wordt overgeslagen.", - "Kan geen geldige gegevens vinden voor kunstwerklocatie met KWKIDENT 'KUNST3'.", - "Kunstwerk nummer 3 wordt overgeslagen.", - "Kan geen geldige gegevens vinden voor kunstwerklocatie met KWKIDENT 'KUNST4'.", - "Kunstwerk nummer 4 wordt overgeslagen.", - "Kan geen geldige gegevens vinden voor kunstwerklocatie met KWKIDENT 'KUNST5'.", - "Kunstwerk nummer 5 wordt overgeslagen.", - "Kan geen geldige gegevens vinden voor kunstwerklocatie met KWKIDENT 'KUNST6'.", - "Kunstwerk nummer 6 wordt overgeslagen." + CreateExpectedErrorMessage(csvFilePath, "Coupure Den Oever (90k1)", "KUNST1", + new[] + { + "De waarde op regel 13, kolom 'NumeriekeWaarde' valt buiten het bereik [0, 360].", + "Parameter 'KW_BETSLUIT5' komt meermaals voor." + }), + CreateExpectedErrorMessage(csvFilePath, "Gemaal Leemans (93k3)", "KUNST2", + new[] + { + "Kan geen geldige gegevens vinden voor kunstwerklocatie met KWKIDENT 'KUNST2'." + }), + CreateExpectedErrorMessage(csvFilePath, "Gemaal Lely (93k4)", "KUNST3", + new[] + { + "Kan geen geldige gegevens vinden voor kunstwerklocatie met KWKIDENT 'KUNST3'." + }), + CreateExpectedErrorMessage(csvFilePath, "Gemaal de Stontele (94k1)", "KUNST4", + new[] + { + "Kan geen geldige gegevens vinden voor kunstwerklocatie met KWKIDENT 'KUNST4'." + }), + CreateExpectedErrorMessage(csvFilePath, "Stontelerkeersluis (93k1)", "KUNST5", + new[] + { + "Kan geen geldige gegevens vinden voor kunstwerklocatie met KWKIDENT 'KUNST5'." + }), + CreateExpectedErrorMessage(csvFilePath, "Stontelerschutsluis (93k2)", "KUNST6", + new[] + { + "Kan geen geldige gegevens vinden voor kunstwerklocatie met KWKIDENT 'KUNST6'." + }) }; TestHelper.AssertLogMessagesAreGenerated(call, expectedMessages); Assert.IsTrue(importResult); Assert.AreEqual(0, importTarget.Count); } + + private string CreateExpectedErrorMessage(string filePath, string structureName, string structureId, + IEnumerable messages) + { + return string.Format("Fout bij het lezen van bestand '{0}' (Kunstwerk '{1}' ({2})): Er zijn 1 of meerdere fouten gevonden waardoor dit kunstwerk niet ingelezen kan worden:" + Environment.NewLine + + "{3}", + filePath, structureName, structureId, + string.Join(Environment.NewLine, messages.Select(msg => "* " + msg))); + } } } \ No newline at end of file Index: Ringtoets/Common/src/Ringtoets.Common.IO/FileImporters/StructuresImporter.cs =================================================================== diff -u -r1bd759817ce35fd7ab4a8b96886d5cf8244f07fe -rd75706d5c26b844e76d93f6c1879d3acbf98cf77 --- Ringtoets/Common/src/Ringtoets.Common.IO/FileImporters/StructuresImporter.cs (.../StructuresImporter.cs) (revision 1bd759817ce35fd7ab4a8b96886d5cf8244f07fe) +++ Ringtoets/Common/src/Ringtoets.Common.IO/FileImporters/StructuresImporter.cs (.../StructuresImporter.cs) (revision d75706d5c26b844e76d93f6c1879d3acbf98cf77) @@ -29,6 +29,7 @@ using Core.Common.Base.IO; using Core.Common.IO.Exceptions; using Core.Common.IO.Readers; +using Core.Common.Utils.Builders; using log4net; using Ringtoets.Common.Data.AssessmentSection; using Ringtoets.Common.IO.Properties; @@ -142,6 +143,21 @@ return (RoundedDouble) structuresParameterRow.VarianceValue; } + protected void LogValidationErrorForStructure(string structureName, string structureId, IEnumerable validationErrors) + { + string message = new FileReaderErrorMessageBuilder(GetStructureDataCsvFilePath()) + .WithSubject(string.Format(Resources.StructuresImporter_StructureName_0_StructureId_1_, + structureName, structureId)) + .Build(string.Format(Resources.StructuresImporter_LogValidationErrorForStructure_One_or_more_erors_skip_structure_ErrorMessageList_0_, + string.Join(Environment.NewLine, validationErrors.Select(msg => "* " + msg)))); + Log.Error(message); + } + + protected string GetStructureDataCsvFilePath() + { + return Path.ChangeExtension(FilePath, ".csv"); + } + private void CreateStructures(ReadResult importStructureLocationsResult, ReadResult importStructureParameterRowsDataResult) { @@ -157,7 +173,7 @@ { NotifyProgress(Resources.StructuresImporter_ReadStructureParameterRowsData_reading_structure_data, 1, 1); - string csvFilePath = Path.ChangeExtension(FilePath, ".csv"); + string csvFilePath = GetStructureDataCsvFilePath(); var rowsReader = new StructuresCharacteristicsCsvReader(csvFilePath); Index: Ringtoets/Common/src/Ringtoets.Common.IO/Properties/Resources.Designer.cs =================================================================== diff -u -r7718705f6072a15ac28cb112abb949ee280391a9 -rd75706d5c26b844e76d93f6c1879d3acbf98cf77 --- Ringtoets/Common/src/Ringtoets.Common.IO/Properties/Resources.Designer.cs (.../Resources.Designer.cs) (revision 7718705f6072a15ac28cb112abb949ee280391a9) +++ Ringtoets/Common/src/Ringtoets.Common.IO/Properties/Resources.Designer.cs (.../Resources.Designer.cs) (revision d75706d5c26b844e76d93f6c1879d3acbf98cf77) @@ -1,28 +1,7 @@ -// Copyright (C) Stichting Deltares 2016. All rights reserved. -// -// This file is part of Ringtoets. -// -// Ringtoets 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. - -//------------------------------------------------------------------------------ +//------------------------------------------------------------------------------ // // This code was generated by a tool. -// Runtime Version:4.0.30319.42000 +// Runtime Version:4.0.30319.18444 // // Changes to this file may cause incorrect behavior and will be lost if // the code is regenerated. @@ -1183,6 +1162,17 @@ } /// + /// Looks up a localized string similar to Er zijn 1 of meerdere fouten gevonden waardoor dit kunstwerk niet ingelezen kan worden: + ///{0}. + /// + public static string StructuresImporter_LogValidationErrorForStructure_One_or_more_erors_skip_structure_ErrorMessageList_0_ { + get { + return ResourceManager.GetString("StructuresImporter_LogValidationErrorForStructure_One_or_more_erors_skip_structur" + + "e_ErrorMessageList_0_", resourceCulture); + } + } + + /// /// Looks up a localized string similar to Inlezen van kunstwerklocaties uit een shapebestand.. /// public static string StructuresImporter_ReadStructureLocations_reading_structurelocations { @@ -1219,6 +1209,15 @@ } /// + /// Looks up a localized string similar to Kunstwerk '{0}' ({1}). + /// + public static string StructuresImporter_StructureName_0_StructureId_1_ { + get { + return ResourceManager.GetString("StructuresImporter_StructureName_0_StructureId_1_", resourceCulture); + } + } + + /// /// Looks up a localized string similar to Kunstwerken importeren is afgebroken. Geen gegevens ingelezen.. /// public static string StructuresImporter_User_cancelled { Index: Ringtoets/Common/src/Ringtoets.Common.IO/Properties/Resources.resx =================================================================== diff -u -r7718705f6072a15ac28cb112abb949ee280391a9 -rd75706d5c26b844e76d93f6c1879d3acbf98cf77 --- Ringtoets/Common/src/Ringtoets.Common.IO/Properties/Resources.resx (.../Resources.resx) (revision 7718705f6072a15ac28cb112abb949ee280391a9) +++ Ringtoets/Common/src/Ringtoets.Common.IO/Properties/Resources.resx (.../Resources.resx) (revision d75706d5c26b844e76d93f6c1879d3acbf98cf77) @@ -356,9 +356,6 @@ Inlezen van kunstwerkgegevens. - - Kan geen geldige gegevens vinden voor kunstwerklocatie met KWKIDENT '{0}'. - Kan geen geldige gegevens vinden voor dijkprofiellocatie met ID '{0}'. @@ -441,9 +438,6 @@ Kunstwerken importeren is afgebroken. Geen gegevens ingelezen. - - Kunstwerk nummer {0} wordt overgeslagen. - Parameter '{0}' ontbreekt. @@ -471,4 +465,17 @@ De waarde op regel {0}, kolom '{1}' is ongeldig. + + Kan geen geldige gegevens vinden voor kunstwerklocatie met KWKIDENT '{0}'. + + + Kunstwerk nummer {0} wordt overgeslagen. + + + Kunstwerk '{0}' ({1}) + + + Er zijn 1 of meerdere fouten gevonden waardoor dit kunstwerk niet ingelezen kan worden: +{0} + \ No newline at end of file Index: Ringtoets/HeightStructures/src/Ringtoets.HeightStructures.IO/HeightStructuresImporter.cs =================================================================== diff -u -r7718705f6072a15ac28cb112abb949ee280391a9 -rd75706d5c26b844e76d93f6c1879d3acbf98cf77 --- Ringtoets/HeightStructures/src/Ringtoets.HeightStructures.IO/HeightStructuresImporter.cs (.../HeightStructuresImporter.cs) (revision 7718705f6072a15ac28cb112abb949ee280391a9) +++ Ringtoets/HeightStructures/src/Ringtoets.HeightStructures.IO/HeightStructuresImporter.cs (.../HeightStructuresImporter.cs) (revision d75706d5c26b844e76d93f6c1879d3acbf98cf77) @@ -70,16 +70,18 @@ Dictionary> groupedStructureParameterRows) { var heightStructures = new List(); - for (int i = 0; i < structureLocations.Count; i++) + foreach (StructureLocation structureLocation in structureLocations) { - StructureLocation structureLocation = structureLocations[i]; - string id = structureLocation.Id; if (!groupedStructureParameterRows.ContainsKey(id)) { - Log.WarnFormat(RingtoetsCommonIOResources.StructuresImporter_CreateSpecificStructures_no_structuresdata_for_Location_0_, id); - Log.ErrorFormat(RingtoetsCommonIOResources.StructuresImporter_Structure_number_0_is_skipped, i + 1); + var messages = new[] + { + string.Format(RingtoetsCommonIOResources.StructuresImporter_CreateSpecificStructures_no_structuresdata_for_Location_0_, + id) + }; + LogValidationErrorForStructure(structureLocation.Name, structureLocation.Id, messages); continue; } @@ -88,7 +90,7 @@ ValidationResult parameterRowsValidationResult = StructuresParameterRowsValidator.ValidateHeightStructuresParameters(structureParameterRows); if (!parameterRowsValidationResult.IsValid) { - LogMessages(parameterRowsValidationResult, i + 1); + LogValidationErrorForStructure(structureLocation.Name, structureLocation.Id, parameterRowsValidationResult.ErrorMessages); continue; } Index: Ringtoets/HeightStructures/test/Ringtoets.HeightStructures.IO.Test/HeightStructuresImporterTest.cs =================================================================== diff -u -r7718705f6072a15ac28cb112abb949ee280391a9 -rd75706d5c26b844e76d93f6c1879d3acbf98cf77 --- Ringtoets/HeightStructures/test/Ringtoets.HeightStructures.IO.Test/HeightStructuresImporterTest.cs (.../HeightStructuresImporterTest.cs) (revision 7718705f6072a15ac28cb112abb949ee280391a9) +++ Ringtoets/HeightStructures/test/Ringtoets.HeightStructures.IO.Test/HeightStructuresImporterTest.cs (.../HeightStructuresImporterTest.cs) (revision d75706d5c26b844e76d93f6c1879d3acbf98cf77) @@ -22,6 +22,7 @@ using System; using System.Collections.Generic; using System.IO; +using System.Linq; using Core.Common.Base; using Core.Common.Base.Geometry; using Core.Common.TestUtil; @@ -75,18 +76,34 @@ Action call = () => importResult = structuresImporter.Import(); // Assert + string csvFilePath = Path.ChangeExtension(filePath, "csv"); string[] expectedMessages = { - "Kan geen geldige gegevens vinden voor kunstwerklocatie met KWKIDENT 'KUNST2'.", - "Kunstwerk nummer 2 wordt overgeslagen.", - "Kan geen geldige gegevens vinden voor kunstwerklocatie met KWKIDENT 'KUNST3'.", - "Kunstwerk nummer 3 wordt overgeslagen.", - "Kan geen geldige gegevens vinden voor kunstwerklocatie met KWKIDENT 'KUNST4'.", - "Kunstwerk nummer 4 wordt overgeslagen.", - "Kan geen geldige gegevens vinden voor kunstwerklocatie met KWKIDENT 'KUNST5'.", - "Kunstwerk nummer 5 wordt overgeslagen.", - "Kan geen geldige gegevens vinden voor kunstwerklocatie met KWKIDENT 'KUNST6'.", - "Kunstwerk nummer 6 wordt overgeslagen." + CreateExpectedErrorMessage(csvFilePath, "Gemaal Leemans (93k3)", "KUNST2", + new[] + { + "Kan geen geldige gegevens vinden voor kunstwerklocatie met KWKIDENT 'KUNST2'." + }), + CreateExpectedErrorMessage(csvFilePath, "Gemaal Lely (93k4)", "KUNST3", + new[] + { + "Kan geen geldige gegevens vinden voor kunstwerklocatie met KWKIDENT 'KUNST3'." + }), + CreateExpectedErrorMessage(csvFilePath, "Gemaal de Stontele (94k1)", "KUNST4", + new[] + { + "Kan geen geldige gegevens vinden voor kunstwerklocatie met KWKIDENT 'KUNST4'." + }), + CreateExpectedErrorMessage(csvFilePath, "Stontelerkeersluis (93k1)", "KUNST5", + new[] + { + "Kan geen geldige gegevens vinden voor kunstwerklocatie met KWKIDENT 'KUNST5'." + }), + CreateExpectedErrorMessage(csvFilePath, "Stontelerschutsluis (93k2)", "KUNST6", + new[] + { + "Kan geen geldige gegevens vinden voor kunstwerklocatie met KWKIDENT 'KUNST6'." + }) }; TestHelper.AssertLogMessagesAreGenerated(call, expectedMessages); Assert.IsTrue(importResult); @@ -167,25 +184,53 @@ Action call = () => importResult = structuresImporter.Import(); // Assert + string csvFilePath = Path.ChangeExtension(filePath, "csv"); string[] expectedMessages = { - "De waarde op regel 2, kolom 'NumeriekeWaarde' valt buiten het bereik [0, 360].", - "Parameter 'KW_HOOGTE2' komt meermaals voor.", - "Kunstwerk nummer 1 wordt overgeslagen.", - "Kan geen geldige gegevens vinden voor kunstwerklocatie met KWKIDENT 'KUNST2'.", - "Kunstwerk nummer 2 wordt overgeslagen.", - "Kan geen geldige gegevens vinden voor kunstwerklocatie met KWKIDENT 'KUNST3'.", - "Kunstwerk nummer 3 wordt overgeslagen.", - "Kan geen geldige gegevens vinden voor kunstwerklocatie met KWKIDENT 'KUNST4'.", - "Kunstwerk nummer 4 wordt overgeslagen.", - "Kan geen geldige gegevens vinden voor kunstwerklocatie met KWKIDENT 'KUNST5'.", - "Kunstwerk nummer 5 wordt overgeslagen.", - "Kan geen geldige gegevens vinden voor kunstwerklocatie met KWKIDENT 'KUNST6'.", - "Kunstwerk nummer 6 wordt overgeslagen." + CreateExpectedErrorMessage(csvFilePath, "Coupure Den Oever (90k1)", "KUNST1", + new[] + { + "De waarde op regel 2, kolom 'NumeriekeWaarde' valt buiten het bereik [0, 360].", + "Parameter 'KW_HOOGTE2' komt meermaals voor." + }), + CreateExpectedErrorMessage(csvFilePath, "Gemaal Leemans (93k3)", "KUNST2", + new[] + { + "Kan geen geldige gegevens vinden voor kunstwerklocatie met KWKIDENT 'KUNST2'." + }), + CreateExpectedErrorMessage(csvFilePath, "Gemaal Lely (93k4)", "KUNST3", + new[] + { + "Kan geen geldige gegevens vinden voor kunstwerklocatie met KWKIDENT 'KUNST3'." + }), + CreateExpectedErrorMessage(csvFilePath, "Gemaal de Stontele (94k1)", "KUNST4", + new[] + { + "Kan geen geldige gegevens vinden voor kunstwerklocatie met KWKIDENT 'KUNST4'." + }), + CreateExpectedErrorMessage(csvFilePath, "Stontelerkeersluis (93k1)", "KUNST5", + new[] + { + "Kan geen geldige gegevens vinden voor kunstwerklocatie met KWKIDENT 'KUNST5'." + }), + CreateExpectedErrorMessage(csvFilePath, "Stontelerschutsluis (93k2)", "KUNST6", + new[] + { + "Kan geen geldige gegevens vinden voor kunstwerklocatie met KWKIDENT 'KUNST6'." + }) }; TestHelper.AssertLogMessagesAreGenerated(call, expectedMessages); Assert.IsTrue(importResult); Assert.AreEqual(0, importTarget.Count); } + + private string CreateExpectedErrorMessage(string filePath, string structureName, string structureId, + IEnumerable messages) + { + return string.Format("Fout bij het lezen van bestand '{0}' (Kunstwerk '{1}' ({2})): Er zijn 1 of meerdere fouten gevonden waardoor dit kunstwerk niet ingelezen kan worden:" + Environment.NewLine + + "{3}", + filePath, structureName, structureId, + string.Join(Environment.NewLine, messages.Select(msg => "* " + msg))); + } } } \ No newline at end of file Index: Ringtoets/StabilityPointStructures/src/Ringtoets.StabilityPointStructures.IO/StabilityPointStructuresImporter.cs =================================================================== diff -u -radd325fb1e135f779adf7c89446886ff15a9b17c -rd75706d5c26b844e76d93f6c1879d3acbf98cf77 --- Ringtoets/StabilityPointStructures/src/Ringtoets.StabilityPointStructures.IO/StabilityPointStructuresImporter.cs (.../StabilityPointStructuresImporter.cs) (revision add325fb1e135f779adf7c89446886ff15a9b17c) +++ Ringtoets/StabilityPointStructures/src/Ringtoets.StabilityPointStructures.IO/StabilityPointStructuresImporter.cs (.../StabilityPointStructuresImporter.cs) (revision d75706d5c26b844e76d93f6c1879d3acbf98cf77) @@ -70,16 +70,18 @@ Dictionary> groupedStructureParameterRows) { var stabilityPointStructures = new List(); - for (int i = 0; i < structureLocations.Count; i++) + foreach (StructureLocation structureLocation in structureLocations) { - StructureLocation structureLocation = structureLocations[i]; - string id = structureLocation.Id; if (!groupedStructureParameterRows.ContainsKey(id)) { - Log.WarnFormat(RingtoetsCommonIOResources.StructuresImporter_CreateSpecificStructures_no_structuresdata_for_Location_0_, id); - Log.ErrorFormat(RingtoetsCommonIOResources.StructuresImporter_Structure_number_0_is_skipped, i + 1); + var messages = new[] + { + string.Format(RingtoetsCommonIOResources.StructuresImporter_CreateSpecificStructures_no_structuresdata_for_Location_0_, + id) + }; + LogValidationErrorForStructure(structureLocation.Name, structureLocation.Id, messages); continue; } @@ -88,7 +90,7 @@ ValidationResult parameterRowsValidationResult = StructuresParameterRowsValidator.ValidateStabilityPointStructuresParameters(structureParameterRows); if (!parameterRowsValidationResult.IsValid) { - LogMessages(parameterRowsValidationResult, i + 1); + LogValidationErrorForStructure(structureLocation.Name, structureLocation.Id, parameterRowsValidationResult.ErrorMessages); continue; } Index: Ringtoets/StabilityPointStructures/test/Ringtoets.StabilityPointStructures.IO.Test/StabilityPointStructuresImporterTest.cs =================================================================== diff -u -rc2a078ee5e2bd7923da2ef612bbf6cb3cdb5f33b -rd75706d5c26b844e76d93f6c1879d3acbf98cf77 --- Ringtoets/StabilityPointStructures/test/Ringtoets.StabilityPointStructures.IO.Test/StabilityPointStructuresImporterTest.cs (.../StabilityPointStructuresImporterTest.cs) (revision c2a078ee5e2bd7923da2ef612bbf6cb3cdb5f33b) +++ Ringtoets/StabilityPointStructures/test/Ringtoets.StabilityPointStructures.IO.Test/StabilityPointStructuresImporterTest.cs (.../StabilityPointStructuresImporterTest.cs) (revision d75706d5c26b844e76d93f6c1879d3acbf98cf77) @@ -22,6 +22,7 @@ using System; using System.Collections.Generic; using System.IO; +using System.Linq; using Core.Common.Base; using Core.Common.Base.Geometry; using Core.Common.TestUtil; @@ -75,19 +76,34 @@ Action call = () => importResult = structuresImporter.Import(); // Assert + string csvFilePath = Path.ChangeExtension(filePath, "csv"); string[] expectedMessages = { - "Kan geen geldige gegevens vinden voor kunstwerklocatie met KWKIDENT 'KUNST2'.", - "Kunstwerk nummer 2 wordt overgeslagen.", - "Kan geen geldige gegevens vinden voor kunstwerklocatie met KWKIDENT 'KUNST3'.", - "Kunstwerk nummer 3 wordt overgeslagen.", - "Kan geen geldige gegevens vinden voor kunstwerklocatie met KWKIDENT 'KUNST4'.", - "Kunstwerk nummer 4 wordt overgeslagen.", - "Kan geen geldige gegevens vinden voor kunstwerklocatie met KWKIDENT 'KUNST5'.", - "Kunstwerk nummer 5 wordt overgeslagen.", - "Kan geen geldige gegevens vinden voor kunstwerklocatie met KWKIDENT 'KUNST6'.", - "Kunstwerk nummer 6 wordt overgeslagen." - }; + CreateExpectedErrorMessage(csvFilePath, "Gemaal Leemans (93k3)", "KUNST2", + new[] + { + "Kan geen geldige gegevens vinden voor kunstwerklocatie met KWKIDENT 'KUNST2'." + }), + CreateExpectedErrorMessage(csvFilePath, "Gemaal Lely (93k4)", "KUNST3", + new[] + { + "Kan geen geldige gegevens vinden voor kunstwerklocatie met KWKIDENT 'KUNST3'." + }), + CreateExpectedErrorMessage(csvFilePath, "Gemaal de Stontele (94k1)", "KUNST4", + new[] + { + "Kan geen geldige gegevens vinden voor kunstwerklocatie met KWKIDENT 'KUNST4'." + }), + CreateExpectedErrorMessage(csvFilePath, "Stontelerkeersluis (93k1)", "KUNST5", + new[] + { + "Kan geen geldige gegevens vinden voor kunstwerklocatie met KWKIDENT 'KUNST5'." + }), + CreateExpectedErrorMessage(csvFilePath, "Stontelerschutsluis (93k2)", "KUNST6", + new[] + { + "Kan geen geldige gegevens vinden voor kunstwerklocatie met KWKIDENT 'KUNST6'." + })}; TestHelper.AssertLogMessagesAreGenerated(call, expectedMessages); Assert.IsTrue(importResult); Assert.AreEqual(1, importTarget.Count); @@ -194,25 +210,52 @@ Action call = () => importResult = structuresImporter.Import(); // Assert + string csvFilePath = Path.ChangeExtension(filePath, "csv"); string[] expectedMessages = { - "Parameter 'KW_STERSTAB9' komt meermaals voor.", - "De waarde op regel 37, kolom 'NumeriekeWaarde' is ongeldig.", - "Kunstwerk nummer 1 wordt overgeslagen.", - "Kan geen geldige gegevens vinden voor kunstwerklocatie met KWKIDENT 'KUNST2'.", - "Kunstwerk nummer 2 wordt overgeslagen.", - "Kan geen geldige gegevens vinden voor kunstwerklocatie met KWKIDENT 'KUNST3'.", - "Kunstwerk nummer 3 wordt overgeslagen.", - "Kan geen geldige gegevens vinden voor kunstwerklocatie met KWKIDENT 'KUNST4'.", - "Kunstwerk nummer 4 wordt overgeslagen.", - "Kan geen geldige gegevens vinden voor kunstwerklocatie met KWKIDENT 'KUNST5'.", - "Kunstwerk nummer 5 wordt overgeslagen.", - "Kan geen geldige gegevens vinden voor kunstwerklocatie met KWKIDENT 'KUNST6'.", - "Kunstwerk nummer 6 wordt overgeslagen." - }; + CreateExpectedErrorMessage(csvFilePath, "Coupure Den Oever (90k1)", "KUNST1", + new[] + { + "Parameter 'KW_STERSTAB9' komt meermaals voor.", + "De waarde op regel 37, kolom 'NumeriekeWaarde' is ongeldig." + }), + CreateExpectedErrorMessage(csvFilePath, "Gemaal Leemans (93k3)", "KUNST2", + new[] + { + "Kan geen geldige gegevens vinden voor kunstwerklocatie met KWKIDENT 'KUNST2'." + }), + CreateExpectedErrorMessage(csvFilePath, "Gemaal Lely (93k4)", "KUNST3", + new[] + { + "Kan geen geldige gegevens vinden voor kunstwerklocatie met KWKIDENT 'KUNST3'." + }), + CreateExpectedErrorMessage(csvFilePath, "Gemaal de Stontele (94k1)", "KUNST4", + new[] + { + "Kan geen geldige gegevens vinden voor kunstwerklocatie met KWKIDENT 'KUNST4'." + }), + CreateExpectedErrorMessage(csvFilePath, "Stontelerkeersluis (93k1)", "KUNST5", + new[] + { + "Kan geen geldige gegevens vinden voor kunstwerklocatie met KWKIDENT 'KUNST5'." + }), + CreateExpectedErrorMessage(csvFilePath, "Stontelerschutsluis (93k2)", "KUNST6", + new[] + { + "Kan geen geldige gegevens vinden voor kunstwerklocatie met KWKIDENT 'KUNST6'." + })}; TestHelper.AssertLogMessagesAreGenerated(call, expectedMessages); Assert.IsTrue(importResult); Assert.AreEqual(0, importTarget.Count); } + + private string CreateExpectedErrorMessage(string filePath, string structureName, string structureId, + IEnumerable messages) + { + return string.Format("Fout bij het lezen van bestand '{0}' (Kunstwerk '{1}' ({2})): Er zijn 1 of meerdere fouten gevonden waardoor dit kunstwerk niet ingelezen kan worden:" + Environment.NewLine + + "{3}", + filePath, structureName, structureId, + string.Join(Environment.NewLine, messages.Select(msg => "* " + msg))); + } } } \ No newline at end of file