Index: Ringtoets/Integration/src/Ringtoets.Integration.Forms/Views/AssessmentSectionView.cs =================================================================== diff -u -r20cf7c61dec992770e5e59193f1922c960341495 -r7df6037e65982e1c4a97c809abc2823e35157830 --- Ringtoets/Integration/src/Ringtoets.Integration.Forms/Views/AssessmentSectionView.cs (.../AssessmentSectionView.cs) (revision 20cf7c61dec992770e5e59193f1922c960341495) +++ Ringtoets/Integration/src/Ringtoets.Integration.Forms/Views/AssessmentSectionView.cs (.../AssessmentSectionView.cs) (revision 7df6037e65982e1c4a97c809abc2823e35157830) @@ -23,6 +23,7 @@ using System.Linq; using System.Windows.Forms; using Core.Common.Base; +using Core.Common.Base.Geometry; using Core.Components.DotSpatial.Forms; using Core.Components.Gis; using Core.Components.Gis.Data; @@ -86,14 +87,18 @@ { var mapDataList = new List(); - if (GetReferenceLineData() != null) + MapData referenceLine = GetReferenceLineData(); + + if (referenceLine != null) { - mapDataList.Add(GetReferenceLineData()); + mapDataList.Add(referenceLine); } - if (GetHydraulicBoudaryLocations() != null) + MapData hydraulicBoundaryLocations = GetHydraulicBoundaryLocations(); + + if (hydraulicBoundaryLocations != null) { - mapDataList.Add(GetHydraulicBoudaryLocations()); + mapDataList.Add(hydraulicBoundaryLocations); } map.Data = new MapDataCollection(mapDataList); @@ -106,18 +111,18 @@ return null; } - var points = data.ReferenceLine.Points.ToList(); + List points = data.ReferenceLine.Points.ToList(); return points.Count > 0 ? new MapLineData(points) : null; } - private MapData GetHydraulicBoudaryLocations() + private MapData GetHydraulicBoundaryLocations() { if (data.HydraulicBoundaryDatabase == null) { return null; } - var locations = data.HydraulicBoundaryDatabase.Locations.Select(h => h.Location).ToList(); + List locations = data.HydraulicBoundaryDatabase.Locations.Select(h => h.Location).ToList(); return locations.Count > 0 ? new MapPointData(locations) : null; } } Index: Ringtoets/Integration/src/Ringtoets.Integration.Plugin/FileImporters/ReferenceLineImporter.cs =================================================================== diff -u -rb3d4bbd1f4cff028627bbf1591929a0b67bfccb9 -r7df6037e65982e1c4a97c809abc2823e35157830 --- Ringtoets/Integration/src/Ringtoets.Integration.Plugin/FileImporters/ReferenceLineImporter.cs (.../ReferenceLineImporter.cs) (revision b3d4bbd1f4cff028627bbf1591929a0b67bfccb9) +++ Ringtoets/Integration/src/Ringtoets.Integration.Plugin/FileImporters/ReferenceLineImporter.cs (.../ReferenceLineImporter.cs) (revision 7df6037e65982e1c4a97c809abc2823e35157830) @@ -106,7 +106,7 @@ var importTarget = (ReferenceLineContext)targetItem; if (importTarget.Parent.ReferenceLine != null) { - clearReferenceLineDependentData = ConfirmImportOfReferenceLineToClearReferenceLineDependentData(); + clearReferenceLineDependentData = ConfirmImportOfReferenceLineToClearReferenceLineDependentData(importTarget.Parent); } if (ImportIsCancelled) @@ -138,7 +138,7 @@ return changedObservables; } - private bool ConfirmImportOfReferenceLineToClearReferenceLineDependentData() + private bool ConfirmImportOfReferenceLineToClearReferenceLineDependentData(AssessmentSectionBase assessmentSection) { var clearReferenceLineDependentData = false; @@ -151,7 +151,10 @@ } else { - clearReferenceLineDependentData = true; + if (assessmentSection.GetFailureMechanisms() != null) + { + clearReferenceLineDependentData = true; + } } return clearReferenceLineDependentData; @@ -198,7 +201,9 @@ 2, clearReferenceLineDependentData ? 4 : 2); assessmentSection.ReferenceLine = importedReferenceLine; - if (clearReferenceLineDependentData) + changedObservables.Add(assessmentSection); // Note: Add assessmentSection to the list of changed observables. Otherwise only the reference line context item will only be notified. + + if (clearReferenceLineDependentData && assessmentSection.GetFailureMechanisms() != null) { ClearReferenceLineDependentData(assessmentSection); } Index: Ringtoets/Integration/test/Ringtoets.Integration.Forms.Test/Views/AssessmentSectionViewTest.cs =================================================================== diff -u -r20cf7c61dec992770e5e59193f1922c960341495 -r7df6037e65982e1c4a97c809abc2823e35157830 --- Ringtoets/Integration/test/Ringtoets.Integration.Forms.Test/Views/AssessmentSectionViewTest.cs (.../AssessmentSectionViewTest.cs) (revision 20cf7c61dec992770e5e59193f1922c960341495) +++ Ringtoets/Integration/test/Ringtoets.Integration.Forms.Test/Views/AssessmentSectionViewTest.cs (.../AssessmentSectionViewTest.cs) (revision 7df6037e65982e1c4a97c809abc2823e35157830) @@ -22,6 +22,7 @@ using System.Collections.Generic; using System.Windows.Forms; using Core.Common.Base; +using Core.Common.Base.Geometry; using Core.Common.Controls.Views; using Core.Components.DotSpatial.Forms; using Core.Components.Gis.Data; @@ -65,6 +66,52 @@ } [Test] + public void Data_ReferenceLineNull_NoLineDataSet() + { + // Setup + var view = new AssessmentSectionView(); + var map = (BaseMap)view.Controls[0]; + + var assessmentSectionBase = new AssessmentSectionBaseTestClass(); + assessmentSectionBase.HydraulicBoundaryDatabase = new HydraulicBoundaryDatabase(); + assessmentSectionBase.HydraulicBoundaryDatabase.Locations.Add(new HydraulicBoundaryLocation(1, "test", 1.0, 2.0)); + + // Call + view.Data = assessmentSectionBase; + + // Assert + var mapData = (MapDataCollection) map.Data; + + Assert.AreEqual(1, mapData.List.Count); + Assert.IsNotInstanceOf(mapData.List[0]); + } + + [Test] + public void Data_HydraulicBoundaryDatabaseNull_NoPointDataSet() + { + // Setup + var view = new AssessmentSectionView(); + var map = (BaseMap)view.Controls[0]; + + var assessmentSectionBase = new AssessmentSectionBaseTestClass(); + assessmentSectionBase.ReferenceLine = new ReferenceLine(); + assessmentSectionBase.ReferenceLine.SetGeometry(new List + { + new Point2D(1.0, 2.0), + new Point2D(2.0, 1.0) + }); + + // Call + view.Data = assessmentSectionBase; + + // Assert + var mapData = (MapDataCollection)map.Data; + + Assert.AreEqual(1, mapData.List.Count); + Assert.IsNotInstanceOf(mapData.List[0]); + } + + [Test] public void Data_SetToNull_BaseMapNoFeatures() { // Setup @@ -98,7 +145,7 @@ } [Test] - public void UpdateObserver_DataUpdated_SetNewMapData() + public void UpdateObserver_HydraulicBoundaryDatabaseUpdated_SetNewMapDataData() { // Setup var view = new AssessmentSectionView(); @@ -118,10 +165,38 @@ view.Data = assessmentSectionBase; var mapData = map.Data; - // Precondition - Assert.AreSame(assessmentSectionBase, view.Data); - Assert.AreSame(mapData, map.Data); + assessmentSectionBase.HydraulicBoundaryDatabase = new HydraulicBoundaryDatabase(); + assessmentSectionBase.HydraulicBoundaryDatabase.Locations.Add(new HydraulicBoundaryLocation(2, "test2", 2.0, 3.0)); + // Call + assessmentSectionBase.NotifyObservers(); + + // Assert + Assert.AreNotEqual(mapData, map.Data); + Assert.IsInstanceOf(map.Data); + mocks.VerifyAll(); + } + + [Test] + public void UpdateObserver_OtherAssessmentSectionUpdated_MapDataNotUpdated() + { + // Setup + var view = new AssessmentSectionView(); + var map = (BaseMap)view.Controls[0]; + + var mocks = new MockRepository(); + var observer = mocks.StrictMock(); + observer.Expect(o => o.UpdateObserver()); + + mocks.ReplayAll(); + + var assessmentSectionBase = new AssessmentSectionBaseTestClass(); + assessmentSectionBase.HydraulicBoundaryDatabase = new HydraulicBoundaryDatabase(); + assessmentSectionBase.HydraulicBoundaryDatabase.Locations.Add(new HydraulicBoundaryLocation(1, "test", 1.0, 2.0)); + assessmentSectionBase.Attach(observer); + + view.Data = assessmentSectionBase; + var assessmentSectionBase2 = new AssessmentSectionBaseTestClass(); assessmentSectionBase2.HydraulicBoundaryDatabase = new HydraulicBoundaryDatabase(); assessmentSectionBase2.HydraulicBoundaryDatabase.Locations.Add(new HydraulicBoundaryLocation(2, "test2", 2.0, 3.0)); @@ -130,7 +205,7 @@ assessmentSectionBase.NotifyObservers(); // Assert - Assert.AreNotEqual(mapData, map.Data); + Assert.AreEqual(assessmentSectionBase, view.Data); Assert.IsInstanceOf(map.Data); mocks.VerifyAll(); } Index: Ringtoets/Integration/test/Ringtoets.Integration.Plugin.Test/FileImporters/ReferenceLineImporterTest.cs =================================================================== diff -u -r23673a3afadbf542d649f724cb6557c1da742cf8 -r7df6037e65982e1c4a97c809abc2823e35157830 --- Ringtoets/Integration/test/Ringtoets.Integration.Plugin.Test/FileImporters/ReferenceLineImporterTest.cs (.../ReferenceLineImporterTest.cs) (revision 23673a3afadbf542d649f724cb6557c1da742cf8) +++ Ringtoets/Integration/test/Ringtoets.Integration.Plugin.Test/FileImporters/ReferenceLineImporterTest.cs (.../ReferenceLineImporterTest.cs) (revision 7df6037e65982e1c4a97c809abc2823e35157830) @@ -535,6 +535,44 @@ } [Test] + public void DoPostImportUpdates_AssessmentSectionAlreadyHasReferenceLineAndAnswerDialogToContinue_NotifyObserversOfTargetContextParent() + { + // Setup + var originalReferenceLine = new ReferenceLine(); + + var mocks = new MockRepository(); + + var assessmentSection = mocks.Stub(); + assessmentSection.ReferenceLine = originalReferenceLine; + + var observer = mocks.Stub(); + observer.Expect(o => o.UpdateObserver()); + mocks.ReplayAll(); + + var path = TestHelper.GetTestDataPath(TestDataPath.Ringtoets.Common.IO, "traject_10-2.shp"); + + var referenceLineContext = new ReferenceLineContext(assessmentSection); + referenceLineContext.Parent.Attach(observer); + + var importer = new ReferenceLineImporter(); + + DialogBoxHandler = (name, wnd) => + { + var messageBoxTester = new MessageBoxTester(wnd); + messageBoxTester.ClickOk(); + }; + + // Precondition + Assert.IsTrue(importer.Import(referenceLineContext, path)); + + // Call + importer.DoPostImportUpdates(referenceLineContext); + + // Assert + mocks.VerifyAll(); // Expect NotifyObservers on context parent + } + + [Test] public void DoPostImportUpdates_CancellingImport_DoNotNotifyObservers() { // Setup