Index: Ringtoets/Common/src/Ringtoets.Common.IO/ReferenceLineMetaImporter.cs =================================================================== diff -u -re3f0e0861e4d1f5faa32280e837777e8755b67d6 -r7d38bc43c1be859f9a410ed99c6dacb2a6f58126 --- Ringtoets/Common/src/Ringtoets.Common.IO/ReferenceLineMetaImporter.cs (.../ReferenceLineMetaImporter.cs) (revision e3f0e0861e4d1f5faa32280e837777e8755b67d6) +++ Ringtoets/Common/src/Ringtoets.Common.IO/ReferenceLineMetaImporter.cs (.../ReferenceLineMetaImporter.cs) (revision 7d38bc43c1be859f9a410ed99c6dacb2a6f58126) @@ -24,6 +24,7 @@ using System.IO; using System.Linq; using System.Security; +using System.Windows.Forms; using Core.Common.IO.Exceptions; using Core.Common.Utils.Builders; using Core.Common.Utils.Properties; @@ -78,6 +79,8 @@ targetItem.WrappedData.Id = assessmentSectionId; targetItem.WrappedData.ReferenceLine = selectedReferenceLineMeta; + targetItem.WrappedData.NotifyObservers(); + return true; } @@ -163,6 +166,33 @@ } } while (referenceLinesMeta != null); } + + ValidateReferenceLineMetas(); } + + private void ValidateReferenceLineMetas() + { + var referenceLineMetasCount = referenceLineMetas.Select(rlm => rlm.AssessmentSectionId).Count(); + var referenceLineMetasDistinctCount = referenceLineMetas.Select(rlm => rlm.AssessmentSectionId).Distinct().Count(); + + if (referenceLineMetasCount != referenceLineMetasDistinctCount) + { + var message = new FileReaderErrorMessageBuilder(shapeFilePath) + .Build("De trajectid's niet uniek."); + log.Warn(message); + + MessageBox.Show(message, "Fout", MessageBoxButtons.OK, MessageBoxIcon.Error); + return; + } + + if (referenceLineMetas.Any(rlm => String.IsNullOrEmpty(rlm.AssessmentSectionId))) + { + var message = new FileReaderErrorMessageBuilder(shapeFilePath) + .Build("De trajectid's zijn niet allemaal ingevuld."); + log.Warn(message); + + MessageBox.Show(message, "Fout", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } } } \ No newline at end of file Index: Ringtoets/Common/src/Ringtoets.Common.IO/ReferenceLinesMetaReader.cs =================================================================== diff -u -r8e91f29f35b5f93ea1d9dfc7dcd79edfdd1b4e53 -r7d38bc43c1be859f9a410ed99c6dacb2a6f58126 --- Ringtoets/Common/src/Ringtoets.Common.IO/ReferenceLinesMetaReader.cs (.../ReferenceLinesMetaReader.cs) (revision 8e91f29f35b5f93ea1d9dfc7dcd79edfdd1b4e53) +++ Ringtoets/Common/src/Ringtoets.Common.IO/ReferenceLinesMetaReader.cs (.../ReferenceLinesMetaReader.cs) (revision 7d38bc43c1be859f9a410ed99c6dacb2a6f58126) @@ -203,12 +203,7 @@ private static string GetAssessmentSectionId(MapFeature lineFeature) { - var referenceLineId = Convert.ToString(lineFeature.MetaData[assessmentsectionIdAttributeKey]); - if (String.IsNullOrEmpty(referenceLineId)) - { - throw new CriticalFileReadException(RingtoetsCommonIOResources.ReferenceLinesMetaReader_TrajectId_is_empty); - } - return referenceLineId; + return Convert.ToString(lineFeature.MetaData[assessmentsectionIdAttributeKey]); } private static int? GetSignalingValueAttributeKey(MapFeature lineFeature) Index: Ringtoets/Common/test/Ringtoets.Common.IO.Test/ReferenceLineMetaImporterTest.cs =================================================================== diff -u -re3f0e0861e4d1f5faa32280e837777e8755b67d6 -r7d38bc43c1be859f9a410ed99c6dacb2a6f58126 --- Ringtoets/Common/test/Ringtoets.Common.IO.Test/ReferenceLineMetaImporterTest.cs (.../ReferenceLineMetaImporterTest.cs) (revision e3f0e0861e4d1f5faa32280e837777e8755b67d6) +++ Ringtoets/Common/test/Ringtoets.Common.IO.Test/ReferenceLineMetaImporterTest.cs (.../ReferenceLineMetaImporterTest.cs) (revision 7d38bc43c1be859f9a410ed99c6dacb2a6f58126) @@ -25,6 +25,7 @@ using System.Linq; using Core.Common.IO.Exceptions; using Core.Common.TestUtil; +using NUnit.Extensions.Forms; using NUnit.Framework; using Rhino.Mocks; using Ringtoets.Common.Data.AssessmentSection; @@ -33,7 +34,7 @@ namespace Ringtoets.Common.IO.Test { [TestFixture] - public class ReferenceLineMetaImporterTest + public class ReferenceLineMetaImporterTest : NUnitFormsAssertTest { private readonly string testDataPath = TestHelper.GetTestDataPath(TestDataPath.Ringtoets.Common.IO, "ReferenceLineMetaImporter"); @@ -197,5 +198,26 @@ Assert.AreEqual(validReferenceId, assessmentSectionMock.Id); mockRepository.VerifyAll(); } + + [Test] + public void Constructor_FileWithNonUniqueTrajectIds_ThrowsException() + { + // Setup + string pathToFolder = Path.Combine(testDataPath, "NonUniqueTrajectIds"); + + // Call + Action call = () => new ReferenceLineMetaImporter(pathToFolder); + + DialogBoxHandler = (name, wnd) => + { + var messageBoxTester = new MessageBoxTester(wnd); + messageBoxTester.ClickOk(); + }; + + // Assert + var shapeFile = Path.Combine(pathToFolder, "NonUniqueTrajectIds.shp"); + var expectedMessage = string.Format("Fout bij het lezen van bestand '{0}': De trajectid's niet uniek.", shapeFile); + TestHelper.AssertLogMessageIsGenerated(call, expectedMessage); + } } } \ No newline at end of file Index: Ringtoets/Common/test/Ringtoets.Common.IO.Test/ReferenceLinesMetaReaderTest.cs =================================================================== diff -u -re3f0e0861e4d1f5faa32280e837777e8755b67d6 -r7d38bc43c1be859f9a410ed99c6dacb2a6f58126 --- Ringtoets/Common/test/Ringtoets.Common.IO.Test/ReferenceLinesMetaReaderTest.cs (.../ReferenceLinesMetaReaderTest.cs) (revision e3f0e0861e4d1f5faa32280e837777e8755b67d6) +++ Ringtoets/Common/test/Ringtoets.Common.IO.Test/ReferenceLinesMetaReaderTest.cs (.../ReferenceLinesMetaReaderTest.cs) (revision 7d38bc43c1be859f9a410ed99c6dacb2a6f58126) @@ -235,20 +235,18 @@ } [Test] - public void ReadReferenceLinesMeta_EmptyTrackId_ThrowCriticalFileReadException() + public void ReadReferenceLinesMeta_EmptyTrackId_ReturnsElement() { // Setup string validFilePath = Path.Combine(testDataPath, "NBPW_EmptyTrackId.shp"); using (var reader = new ReferenceLinesMetaReader(validFilePath)) { // Call - TestDelegate call = () => reader.ReadReferenceLinesMeta(); + ReferenceLineMeta referenceLineMeta = reader.ReadReferenceLinesMeta(); // Assert - var message = Assert.Throws(call).Message; - var expectedMessage = "Het bestand bevat geen waarde voor 'TrackID'."; - Assert.AreEqual(expectedMessage, message); + Assert.AreEqual(string.Empty,referenceLineMeta.AssessmentSectionId); } } Index: Ringtoets/Common/test/Ringtoets.Common.IO.Test/test-data/ReferenceLineMetaImporter/NonUniqueTrajectIds/NonUniqueTrajectIds.dbf =================================================================== diff -u Binary files differ Index: Ringtoets/Common/test/Ringtoets.Common.IO.Test/test-data/ReferenceLineMetaImporter/NonUniqueTrajectIds/NonUniqueTrajectIds.prj =================================================================== diff -u --- Ringtoets/Common/test/Ringtoets.Common.IO.Test/test-data/ReferenceLineMetaImporter/NonUniqueTrajectIds/NonUniqueTrajectIds.prj (revision 0) +++ Ringtoets/Common/test/Ringtoets.Common.IO.Test/test-data/ReferenceLineMetaImporter/NonUniqueTrajectIds/NonUniqueTrajectIds.prj (revision 7d38bc43c1be859f9a410ed99c6dacb2a6f58126) @@ -0,0 +1 @@ +PROJCS["Amersfoort_RD_New",GEOGCS["GCS_Amersfoort",DATUM["D_Amersfoort",SPHEROID["Bessel_1841",6377397.155,299.1528128]],PRIMEM["Greenwich",0],UNIT["Degree",0.017453292519943295]],PROJECTION["Double_Stereographic"],PARAMETER["latitude_of_origin",52.15616055555555],PARAMETER["central_meridian",5.38763888888889],PARAMETER["scale_factor",0.9999079],PARAMETER["false_easting",155000],PARAMETER["false_northing",463000],UNIT["Meter",1]] \ No newline at end of file Index: Ringtoets/Common/test/Ringtoets.Common.IO.Test/test-data/ReferenceLineMetaImporter/NonUniqueTrajectIds/NonUniqueTrajectIds.qpj =================================================================== diff -u --- Ringtoets/Common/test/Ringtoets.Common.IO.Test/test-data/ReferenceLineMetaImporter/NonUniqueTrajectIds/NonUniqueTrajectIds.qpj (revision 0) +++ Ringtoets/Common/test/Ringtoets.Common.IO.Test/test-data/ReferenceLineMetaImporter/NonUniqueTrajectIds/NonUniqueTrajectIds.qpj (revision 7d38bc43c1be859f9a410ed99c6dacb2a6f58126) @@ -0,0 +1 @@ +PROJCS["Amersfoort / RD New",GEOGCS["Amersfoort",DATUM["Amersfoort",SPHEROID["Bessel 1841",6377397.155,299.1528128,AUTHORITY["EPSG","7004"]],TOWGS84[565.4171,50.3319,465.5524,-0.398957388243134,0.343987817378283,-1.87740163998045,4.0725],AUTHORITY["EPSG","6289"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4289"]],PROJECTION["Oblique_Stereographic"],PARAMETER["latitude_of_origin",52.15616055555555],PARAMETER["central_meridian",5.38763888888889],PARAMETER["scale_factor",0.9999079],PARAMETER["false_easting",155000],PARAMETER["false_northing",463000],UNIT["metre",1,AUTHORITY["EPSG","9001"]],AXIS["X",EAST],AXIS["Y",NORTH],AUTHORITY["EPSG","28992"]] Index: Ringtoets/Common/test/Ringtoets.Common.IO.Test/test-data/ReferenceLineMetaImporter/NonUniqueTrajectIds/NonUniqueTrajectIds.shp =================================================================== diff -u Binary files differ Index: Ringtoets/Common/test/Ringtoets.Common.IO.Test/test-data/ReferenceLineMetaImporter/NonUniqueTrajectIds/NonUniqueTrajectIds.shx =================================================================== diff -u Binary files differ