Index: Ringtoets/Integration/src/Ringtoets.Integration.Forms/Views/AssessmentSectionView.cs =================================================================== diff -u -rf1f94637a6b45b394493bf16a078b317c02d329b -rd4dde608720153a015eb4e65c0d2d9e20b536e8d --- Ringtoets/Integration/src/Ringtoets.Integration.Forms/Views/AssessmentSectionView.cs (.../AssessmentSectionView.cs) (revision f1f94637a6b45b394493bf16a078b317c02d329b) +++ Ringtoets/Integration/src/Ringtoets.Integration.Forms/Views/AssessmentSectionView.cs (.../AssessmentSectionView.cs) (revision d4dde608720153a015eb4e65c0d2d9e20b536e8d) @@ -24,6 +24,7 @@ using Core.Components.Gis.Data; using Core.Components.Gis.Forms; using Ringtoets.Common.Data.AssessmentSection; +using Ringtoets.Common.Data.Hydraulics; using Ringtoets.Common.Forms.Factories; using Ringtoets.Integration.Forms.Properties; @@ -35,12 +36,13 @@ public partial class AssessmentSectionView : UserControl, IMapView { private readonly Observer assessmentSectionObserver; - private readonly Observer hydraulicBoundaryDatabaseObserver; - + private readonly Observer hydraulicBoundaryLocationsObserver; private readonly MapDataCollection mapDataCollection; private readonly MapLineData referenceLineMapData; private readonly MapPointData hydraulicBoundaryLocationsMapData; + private readonly RecursiveObserver, HydraulicBoundaryLocation> hydraulicBoundaryLocationObserver; + private IAssessmentSection data; /// @@ -50,17 +52,11 @@ { InitializeComponent(); - assessmentSectionObserver = new Observer(() => - { - if (!ReferenceEquals(hydraulicBoundaryDatabaseObserver.Observable, data.HydraulicBoundaryDatabase)) - { - hydraulicBoundaryDatabaseObserver.Observable = data.HydraulicBoundaryDatabase; - } + assessmentSectionObserver = new Observer(UpdateMapData); + hydraulicBoundaryLocationsObserver = new Observer(UpdateMapData); + hydraulicBoundaryLocationObserver = new RecursiveObserver, HydraulicBoundaryLocation>( + UpdateMapData, hbl => hbl); - UpdateMapData(); - }); - hydraulicBoundaryDatabaseObserver = new Observer(UpdateMapData); - mapDataCollection = new MapDataCollection(Resources.AssessmentSectionMap_DisplayName); referenceLineMapData = RingtoetsMapDataFactory.CreateReferenceLineMapData(); hydraulicBoundaryLocationsMapData = RingtoetsMapDataFactory.CreateHydraulicBoundaryLocationsMapData(); @@ -80,7 +76,8 @@ data = value as IAssessmentSection; assessmentSectionObserver.Observable = data; - hydraulicBoundaryDatabaseObserver.Observable = data?.HydraulicBoundaryDatabase; + hydraulicBoundaryLocationsObserver.Observable = data?.HydraulicBoundaryDatabase.Locations; + hydraulicBoundaryLocationObserver.Observable = data?.HydraulicBoundaryDatabase.Locations; if (data == null) { @@ -106,7 +103,8 @@ protected override void Dispose(bool disposing) { assessmentSectionObserver.Dispose(); - hydraulicBoundaryDatabaseObserver.Dispose(); + hydraulicBoundaryLocationsObserver.Dispose(); + hydraulicBoundaryLocationObserver.Dispose(); if (disposing) { Index: Ringtoets/Integration/test/Ringtoets.Integration.Forms.Test/Views/AssessmentSectionViewTest.cs =================================================================== diff -u -rd154c522432f9241120ef9a3db09f74feeb05948 -rd4dde608720153a015eb4e65c0d2d9e20b536e8d --- Ringtoets/Integration/test/Ringtoets.Integration.Forms.Test/Views/AssessmentSectionViewTest.cs (.../AssessmentSectionViewTest.cs) (revision d154c522432f9241120ef9a3db09f74feeb05948) +++ Ringtoets/Integration/test/Ringtoets.Integration.Forms.Test/Views/AssessmentSectionViewTest.cs (.../AssessmentSectionViewTest.cs) (revision d4dde608720153a015eb4e65c0d2d9e20b536e8d) @@ -19,6 +19,7 @@ // Stichting Deltares and remain full property of Stichting Deltares at all times. // All rights reserved. +using System; using System.Collections.Generic; using System.Linq; using System.Windows.Forms; @@ -200,41 +201,47 @@ } [Test] - public void GivenChangedHydraulicBoundaryDatabase_WhenAssessmentSectionObserversNotified_MapDataUpdated() + public void GivenViewWithHydraulicBoundaryLocationsData_WhenLocationUpdatedAndNotified_ThenMapDataUpdated() { // Given + var random = new Random(21); using (var view = new AssessmentSectionView()) { + IMapControl map = ((RingtoetsMapControl) view.Controls[0]).MapControl; + + var hydraulicBoundaryLocation = new HydraulicBoundaryLocation(1, "test1", 1.0, 2.0); var assessmentSection = new ObservableTestAssessmentSectionStub { HydraulicBoundaryDatabase = { Locations = { - new HydraulicBoundaryLocation(1, "test", 1.0, 2.0) + hydraulicBoundaryLocation } } }; view.Data = assessmentSection; - MapDataCollection mapData = view.Map.Data; + MapData hydraulicBoundaryLocationsMapData = map.Data.Collection.ElementAt(hydraulicBoundaryLocationsIndex); + // Precondition - AssertHydraulicBoundaryDatabaseData(mapData, assessmentSection.HydraulicBoundaryDatabase); + MapDataTestHelper.AssertHydraulicBoundaryLocationOutputsMapData(assessmentSection.HydraulicBoundaryDatabase.Locations, + hydraulicBoundaryLocationsMapData); - assessmentSection.HydraulicBoundaryDatabase.Locations.Clear(); - assessmentSection.HydraulicBoundaryDatabase.Locations.Add(new HydraulicBoundaryLocation(2, "test2", 2.0, 3.0)); - // When - assessmentSection.NotifyObservers(); + hydraulicBoundaryLocation.DesignWaterLevelCalculation.Output = new TestHydraulicBoundaryLocationOutput(random.NextDouble()); + hydraulicBoundaryLocation.WaveHeightCalculation.Output = new TestHydraulicBoundaryLocationOutput(random.NextDouble()); + hydraulicBoundaryLocation.NotifyObservers(); // Then - AssertHydraulicBoundaryDatabaseData(mapData, assessmentSection.HydraulicBoundaryDatabase); + MapDataTestHelper.AssertHydraulicBoundaryLocationOutputsMapData(assessmentSection.HydraulicBoundaryDatabase.Locations, + hydraulicBoundaryLocationsMapData); } } [Test] - public void GivenChangedHydraulicBoundaryDatabase_WhenHydraulicBoundaryDatabaseObserversNotified_MapDataUpdated() + public void GivenViewWithHydraulicBoundaryLocationsDatabase_WhenChangingHydraulicBoundaryLocationsDataAndObserversNotified_MapDataUpdated() { // Given using (var view = new AssessmentSectionView()) @@ -256,12 +263,11 @@ // Precondition AssertHydraulicBoundaryDatabaseData(mapData, assessmentSection.HydraulicBoundaryDatabase); - assessmentSection.HydraulicBoundaryDatabase.Locations.Clear(); - assessmentSection.NotifyObservers(); - // When + assessmentSection.HydraulicBoundaryDatabase.Locations.Clear(); + assessmentSection.HydraulicBoundaryDatabase.Locations.NotifyObservers(); assessmentSection.HydraulicBoundaryDatabase.Locations.Add(new HydraulicBoundaryLocation(2, "new 2", 2, 3)); - assessmentSection.HydraulicBoundaryDatabase.NotifyObservers(); + assessmentSection.HydraulicBoundaryDatabase.Locations.NotifyObservers(); // Then AssertHydraulicBoundaryDatabaseData(mapData, assessmentSection.HydraulicBoundaryDatabase);