Index: Ringtoets/ClosingStructures/src/Ringtoets.ClosingStructures.Forms/Views/ClosingStructuresFailureMechanismView.cs =================================================================== diff -u -rcda0b786ef4c81469fb4213e7fc82cb74493fcf9 -r7019db1a51efdb9f1bd955015fcff3b756a8ed1f --- Ringtoets/ClosingStructures/src/Ringtoets.ClosingStructures.Forms/Views/ClosingStructuresFailureMechanismView.cs (.../ClosingStructuresFailureMechanismView.cs) (revision cda0b786ef4c81469fb4213e7fc82cb74493fcf9) +++ Ringtoets/ClosingStructures/src/Ringtoets.ClosingStructures.Forms/Views/ClosingStructuresFailureMechanismView.cs (.../ClosingStructuresFailureMechanismView.cs) (revision 7019db1a51efdb9f1bd955015fcff3b756a8ed1f) @@ -27,6 +27,7 @@ using Core.Components.Gis.Forms; using Ringtoets.ClosingStructures.Data; using Ringtoets.ClosingStructures.Forms.PresentationObjects; +using Ringtoets.Common.Data; using Ringtoets.Common.Data.AssessmentSection; using Ringtoets.Common.Data.Calculation; using Ringtoets.Common.Data.DikeProfiles; @@ -53,6 +54,7 @@ private readonly RecursiveObserver calculationGroupObserver; private readonly RecursiveObserver> calculationObserver; private readonly RecursiveObserver foreshoreProfileObserver; + private readonly RecursiveObserver, ClosingStructure> structureObserver; private readonly MapDataCollection mapDataCollection; private readonly MapLineData referenceLineMapData; @@ -92,7 +94,7 @@ calculationGroupObserver = new RecursiveObserver(UpdateCalculationsMapData, pcg => pcg.Children); calculationObserver = new RecursiveObserver>(UpdateCalculationsMapData, pcg => pcg.Children); foreshoreProfileObserver = new RecursiveObserver(UpdateForeshoreProfilesMapData, coll => coll); - foreshoreProfileObserver = new RecursiveObserver(UpdateMapData, coll => coll); + structureObserver = new RecursiveObserver, ClosingStructure>(UpdateStructuresMapData, coll => coll); mapDataCollection = new MapDataCollection(ClosingStructuresDataResources.ClosingStructuresFailureMechanism_DisplayName); referenceLineMapData = RingtoetsMapDataFactory.CreateReferenceLineMapData(); @@ -132,6 +134,7 @@ foreshoreProfilesObserver.Observable = null; foreshoreProfileObserver.Observable = null; structuresObserver.Observable = null; + structureObserver.Observable = null; calculationInputObserver.Observable = null; calculationGroupObserver.Observable = null; calculationObserver.Observable = null; @@ -146,6 +149,7 @@ foreshoreProfilesObserver.Observable = data.WrappedData.ForeshoreProfiles; foreshoreProfileObserver.Observable = data.WrappedData.ForeshoreProfiles; structuresObserver.Observable = data.WrappedData.ClosingStructures; + structureObserver.Observable = data.WrappedData.ClosingStructures; calculationInputObserver.Observable = data.WrappedData.CalculationsGroup; calculationGroupObserver.Observable = data.WrappedData.CalculationsGroup; calculationObserver.Observable = data.WrappedData.CalculationsGroup; @@ -176,6 +180,7 @@ calculationGroupObserver.Dispose(); calculationObserver.Dispose(); structuresObserver.Dispose(); + structureObserver.Dispose(); if (disposing) { Index: Ringtoets/ClosingStructures/test/Ringtoets.ClosingStructures.Forms.Test/Views/ClosingStructuresFailureMechanismViewTest.cs =================================================================== diff -u -rcda0b786ef4c81469fb4213e7fc82cb74493fcf9 -r7019db1a51efdb9f1bd955015fcff3b756a8ed1f --- Ringtoets/ClosingStructures/test/Ringtoets.ClosingStructures.Forms.Test/Views/ClosingStructuresFailureMechanismViewTest.cs (.../ClosingStructuresFailureMechanismViewTest.cs) (revision cda0b786ef4c81469fb4213e7fc82cb74493fcf9) +++ Ringtoets/ClosingStructures/test/Ringtoets.ClosingStructures.Forms.Test/Views/ClosingStructuresFailureMechanismViewTest.cs (.../ClosingStructuresFailureMechanismViewTest.cs) (revision 7019db1a51efdb9f1bd955015fcff3b756a8ed1f) @@ -591,7 +591,7 @@ } [Test] - public void UpdateObserver_StructuresUpdated_MapDataUpdated() + public void UpdateObserver_StructureUpdated_MapDataUpdated() { // Setup using (var view = new ClosingStructuresFailureMechanismView()) @@ -601,9 +601,10 @@ var failureMechanism = new ClosingStructuresFailureMechanism(); var failureMechanismContext = new ClosingStructuresFailureMechanismContext(failureMechanism, new ObservableTestAssessmentSectionStub()); - failureMechanism.ForeshoreProfiles.AddRange(new[] + var structure = new TestClosingStructure(new Point2D(0, 0), "Id"); + failureMechanism.ClosingStructures.AddRange(new[] { - new TestForeshoreProfile() + structure }, "path"); view.Data = failureMechanismContext; @@ -614,9 +615,42 @@ AssertStructures(failureMechanism.ClosingStructures, structuresData); // Call + structure.CopyProperties(new TestClosingStructure(new Point2D(1, 1), "Id")); + structure.NotifyObservers(); + + // Assert + AssertStructures(failureMechanism.ClosingStructures, structuresData); + } + } + + [Test] + public void UpdateObserver_StructuresUpdated_MapDataUpdated() + { + // Setup + using (var view = new ClosingStructuresFailureMechanismView()) + { + IMapControl map = ((RingtoetsMapControl) view.Controls[0]).MapControl; + + var failureMechanism = new ClosingStructuresFailureMechanism(); + var failureMechanismContext = new ClosingStructuresFailureMechanismContext(failureMechanism, + new ObservableTestAssessmentSectionStub()); + failureMechanism.ClosingStructures.AddRange(new[] { - new TestClosingStructure() + new TestClosingStructure(new Point2D(0, 0), "Id1") + }, "path"); + + view.Data = failureMechanismContext; + + MapData structuresData = map.Data.Collection.ElementAt(structuresIndex); + + // Precondition + AssertStructures(failureMechanism.ClosingStructures, structuresData); + + // Call + failureMechanism.ClosingStructures.AddRange(new[] + { + new TestClosingStructure(new Point2D(1, 1), "Id2") }, "some path"); failureMechanism.ClosingStructures.NotifyObservers(); @@ -908,7 +942,7 @@ for (var i = 0; i < structuresArray.Length; i++) { MapGeometry profileDataA = structuresData.Features[i].MapGeometries.First(); - Assert.AreEqual(structuresArray[0].Location, profileDataA.PointCollections.First().First()); + Assert.AreEqual(structuresArray[i].Location, profileDataA.PointCollections.First().First()); } Assert.AreEqual("Kunstwerken", mapData.Name);