Index: Ringtoets/Common/src/Ringtoets.Common.Forms/Views/FailureMechanismView.cs =================================================================== diff -u -ref910c360ba791f3bed99068845a1190cfb0dacd -rb65d7542b9ec8bf5464c266e14f2f45887866021 --- Ringtoets/Common/src/Ringtoets.Common.Forms/Views/FailureMechanismView.cs (.../FailureMechanismView.cs) (revision ef910c360ba791f3bed99068845a1190cfb0dacd) +++ Ringtoets/Common/src/Ringtoets.Common.Forms/Views/FailureMechanismView.cs (.../FailureMechanismView.cs) (revision b65d7542b9ec8bf5464c266e14f2f45887866021) @@ -29,7 +29,6 @@ using Ringtoets.Common.Data.FailureMechanism; using Ringtoets.Common.Data.Hydraulics; using Ringtoets.Common.Forms.Factories; -using Ringtoets.Common.Forms.PresentationObjects; namespace Ringtoets.Common.Forms.Views { @@ -38,22 +37,20 @@ /// public partial class FailureMechanismView : UserControl, IMapView where T : IFailureMechanism { - private const string defaultMapDataCollectionName = "-"; + private readonly T failureMechanism; + private readonly IAssessmentSection assessmentSection; private readonly Observer failureMechanismObserver; private readonly Observer assessmentSectionObserver; private readonly Observer hydraulicBoundaryLocationsObserver; private readonly RecursiveObserver, HydraulicBoundaryLocation> hydraulicBoundaryLocationObserver; - private readonly MapDataCollection mapDataCollection; private readonly MapLineData referenceLineMapData; private readonly MapLineData sectionsMapData; private readonly MapPointData sectionsStartPointMapData; private readonly MapPointData sectionsEndPointMapData; private readonly MapPointData hydraulicBoundaryLocationsMapData; - private IFailureMechanismContext data; - /// /// Creates a new instance of . /// @@ -74,13 +71,28 @@ InitializeComponent(); - failureMechanismObserver = new Observer(UpdateMapData); - assessmentSectionObserver = new Observer(UpdateMapData); - hydraulicBoundaryLocationsObserver = new Observer(UpdateMapData); + this.failureMechanism = failureMechanism; + this.assessmentSection = assessmentSection; + + failureMechanismObserver = new Observer(UpdateMapData) + { + Observable = failureMechanism + }; + assessmentSectionObserver = new Observer(UpdateMapData) + { + Observable = assessmentSection + }; + hydraulicBoundaryLocationsObserver = new Observer(UpdateMapData) + { + Observable = assessmentSection.HydraulicBoundaryDatabase.Locations + }; hydraulicBoundaryLocationObserver = new RecursiveObserver, HydraulicBoundaryLocation>( - UpdateMapData, hbl => hbl); + UpdateMapData, hbl => hbl) + { + Observable = assessmentSection.HydraulicBoundaryDatabase.Locations + }; - mapDataCollection = new MapDataCollection(defaultMapDataCollectionName); + var mapDataCollection = new MapDataCollection(failureMechanism.Name); referenceLineMapData = RingtoetsMapDataFactory.CreateReferenceLineMapData(); hydraulicBoundaryLocationsMapData = RingtoetsMapDataFactory.CreateHydraulicBoundaryLocationsMapData(); sectionsMapData = RingtoetsMapDataFactory.CreateFailureMechanismSectionsMapData(); @@ -92,45 +104,14 @@ mapDataCollection.Add(sectionsStartPointMapData); mapDataCollection.Add(sectionsEndPointMapData); mapDataCollection.Add(hydraulicBoundaryLocationsMapData); - } - public object Data - { - get - { - return data; - } - set - { - data = value as IFailureMechanismContext; + SetMapDataFeatures(); - if (data == null) - { - failureMechanismObserver.Observable = null; - assessmentSectionObserver.Observable = null; - hydraulicBoundaryLocationsObserver.Observable = null; - hydraulicBoundaryLocationObserver.Observable = null; - - mapDataCollection.Name = defaultMapDataCollectionName; - - ringtoetsMapControl.RemoveAllData(); - } - else - { - failureMechanismObserver.Observable = data.WrappedData; - assessmentSectionObserver.Observable = data.Parent; - - mapDataCollection.Name = data.WrappedData.Name; - hydraulicBoundaryLocationsObserver.Observable = data.Parent.HydraulicBoundaryDatabase.Locations; - hydraulicBoundaryLocationObserver.Observable = data.Parent.HydraulicBoundaryDatabase.Locations; - - SetMapDataFeatures(); - - ringtoetsMapControl.SetAllData(mapDataCollection, data.Parent.BackgroundData); - } - } + ringtoetsMapControl.SetAllData(mapDataCollection, assessmentSection.BackgroundData); } + public object Data { get; set; } + public IMapControl Map { get @@ -150,6 +131,7 @@ { components?.Dispose(); } + base.Dispose(disposing); } @@ -166,11 +148,11 @@ private void SetMapDataFeatures() { - ReferenceLine referenceLine = data.Parent.ReferenceLine; - HydraulicBoundaryDatabase hydraulicBoundaryDatabase = data.Parent.HydraulicBoundaryDatabase; - IEnumerable failureMechanismSections = data.WrappedData.Sections; + ReferenceLine referenceLine = assessmentSection.ReferenceLine; + HydraulicBoundaryDatabase hydraulicBoundaryDatabase = assessmentSection.HydraulicBoundaryDatabase; + IEnumerable failureMechanismSections = failureMechanism.Sections; - referenceLineMapData.Features = RingtoetsMapDataFeaturesFactory.CreateReferenceLineFeatures(referenceLine, data.Parent.Id, data.Parent.Name); + referenceLineMapData.Features = RingtoetsMapDataFeaturesFactory.CreateReferenceLineFeatures(referenceLine, assessmentSection.Id, assessmentSection.Name); sectionsMapData.Features = RingtoetsMapDataFeaturesFactory.CreateFailureMechanismSectionFeatures(failureMechanismSections); sectionsStartPointMapData.Features = RingtoetsMapDataFeaturesFactory.CreateFailureMechanismSectionStartPointFeatures(failureMechanismSections); sectionsEndPointMapData.Features = RingtoetsMapDataFeaturesFactory.CreateFailureMechanismSectionEndPointFeatures(failureMechanismSections); Index: Ringtoets/Common/test/Ringtoets.Common.Forms.Test/Views/FailureMechanismViewTest.cs =================================================================== diff -u -ref910c360ba791f3bed99068845a1190cfb0dacd -rb65d7542b9ec8bf5464c266e14f2f45887866021 --- Ringtoets/Common/test/Ringtoets.Common.Forms.Test/Views/FailureMechanismViewTest.cs (.../FailureMechanismViewTest.cs) (revision ef910c360ba791f3bed99068845a1190cfb0dacd) +++ Ringtoets/Common/test/Ringtoets.Common.Forms.Test/Views/FailureMechanismViewTest.cs (.../FailureMechanismViewTest.cs) (revision b65d7542b9ec8bf5464c266e14f2f45887866021) @@ -63,7 +63,7 @@ Assert.IsInstanceOf(view.Controls[0]); Assert.AreSame(view.Map, ((RingtoetsMapControl) view.Controls[0]).MapControl); Assert.AreEqual(DockStyle.Fill, ((Control) view.Map).Dock); - Assert.IsNull(view.Map.Data); + AssertEmptyMapData(view.Map.Data); } } @@ -103,149 +103,61 @@ } [Test] - public void Data_FailureMechanismContext_DataSet() + public void Constructor_AssessmentSectionWithBackgroundData_BackgroundDataSet() { // Setup - using (var view = new FailureMechanismView(new TestFailureMechanism(), new ObservableTestAssessmentSectionStub())) - { - var failureMechanism = new TestFailureMechanism(); - var failureMechanismContext = new FailureMechanismContext(failureMechanism, new ObservableTestAssessmentSectionStub()); - - // Call - view.Data = failureMechanismContext; - - // Assert - Assert.AreEqual(failureMechanism.Name, view.Map.Data.Name); - Assert.AreSame(failureMechanismContext, view.Data); - } - } - - [Test] - public void Data_AssessmentSectionWithBackgroundData_BackgroundDataSet() - { - // Setup IAssessmentSection assessmentSection = new ObservableTestAssessmentSectionStub(); - using (var view = new FailureMechanismView(new TestFailureMechanism(), new ObservableTestAssessmentSectionStub())) + // Call + using (var view = new FailureMechanismView(new TestFailureMechanism(), assessmentSection)) { - var failureMechanism = new TestFailureMechanism(); - var failureMechanismContext = new FailureMechanismContext(failureMechanism, assessmentSection); - - // Call - view.Data = failureMechanismContext; - // Assert MapDataTestHelper.AssertImageBasedMapData(assessmentSection.BackgroundData, view.Map.BackgroundMapData); } } [Test] - public void Data_OtherThanFailureMechanismContext_DataNull() + public void Data_FailureMechanismContext_DataUpdatedToCollectionOfFilledMapData() { // Setup - using (var view = new FailureMechanismView(new TestFailureMechanism(), new ObservableTestAssessmentSectionStub())) + var geometryPoints = new[] { - var data = new object(); + new Point2D(0.0, 0.0), + new Point2D(2.0, 0.0), + new Point2D(4.0, 4.0), + new Point2D(6.0, 4.0) + }; - // Call - view.Data = data; - - // Assert - Assert.IsNull(view.Data); - } - } - - [Test] - public void Data_SetToNull_MapDataCleared() - { - // Setup - using (var view = new FailureMechanismView(new TestFailureMechanism(), new ObservableTestAssessmentSectionStub())) + var referenceLine = new ReferenceLine(); + referenceLine.SetGeometry(new[] { - var failureMechanismContext = new FailureMechanismContext(new TestFailureMechanism(), new ObservableTestAssessmentSectionStub()); + new Point2D(1.0, 2.0), + new Point2D(2.0, 1.0) + }); - view.Data = failureMechanismContext; - - // Precondition - Assert.AreEqual(5, view.Map.Data.Collection.Count()); - MapDataTestHelper.AssertImageBasedMapData(failureMechanismContext.Parent.BackgroundData, view.Map.BackgroundMapData); - - // Call - view.Data = null; - - // Assert - Assert.IsNull(view.Data); - Assert.IsNull(view.Map.Data); - Assert.IsNull(view.Map.BackgroundMapData); - } - } - - [Test] - public void Data_EmptyFailureMechanismContext_NoMapDataSet() - { - // Setup - using (var view = new FailureMechanismView(new TestFailureMechanism(), new ObservableTestAssessmentSectionStub())) + var assessmentSection = new ObservableTestAssessmentSectionStub { - var assessmentSection = new ObservableTestAssessmentSectionStub(); - var failureMechanismContext = new FailureMechanismContext(new TestFailureMechanism(), assessmentSection); + HydraulicBoundaryDatabase = + { + Locations = + { + new HydraulicBoundaryLocation(1, "test", 1.0, 2.0) + } + }, + ReferenceLine = referenceLine + }; - // Call - view.Data = failureMechanismContext; + var failureMechanism = new TestFailureMechanism(); + failureMechanism.AddSection(new FailureMechanismSection("A", geometryPoints.Take(2))); + failureMechanism.AddSection(new FailureMechanismSection("B", geometryPoints.Skip(1).Take(2))); + failureMechanism.AddSection(new FailureMechanismSection("C", geometryPoints.Skip(2).Take(2))); - // Assert - Assert.AreSame(failureMechanismContext, view.Data); - AssertEmptyMapData(view.Map.Data); - MapDataTestHelper.AssertImageBasedMapData(assessmentSection.BackgroundData, view.Map.BackgroundMapData); - } - } - - [Test] - public void Data_FailureMechanismContext_DataUpdatedToCollectionOfFilledMapData() - { - // Setup - using (var view = new FailureMechanismView(new TestFailureMechanism(), new ObservableTestAssessmentSectionStub())) + // Call + using (var view = new FailureMechanismView(failureMechanism, assessmentSection)) { IMapControl map = ((RingtoetsMapControl) view.Controls[0]).MapControl; - var geometryPoints = new[] - { - new Point2D(0.0, 0.0), - new Point2D(2.0, 0.0), - new Point2D(4.0, 4.0), - new Point2D(6.0, 4.0) - }; - - var referenceLine = new ReferenceLine(); - referenceLine.SetGeometry(new[] - { - new Point2D(1.0, 2.0), - new Point2D(2.0, 1.0) - }); - - var assessmentSection = new ObservableTestAssessmentSectionStub - { - HydraulicBoundaryDatabase = - { - Locations = - { - new HydraulicBoundaryLocation(1, "test", 1.0, 2.0) - } - }, - ReferenceLine = referenceLine - }; - - var failureMechanism = new TestFailureMechanism(); - failureMechanism.AddSection(new FailureMechanismSection("A", geometryPoints.Take(2))); - failureMechanism.AddSection(new FailureMechanismSection("B", geometryPoints.Skip(1).Take(2))); - failureMechanism.AddSection(new FailureMechanismSection("C", geometryPoints.Skip(2).Take(2))); - - var failureMechanismContext = new FailureMechanismContext(failureMechanism, assessmentSection); - - // Call - view.Data = failureMechanismContext; - // Assert - Assert.AreSame(failureMechanismContext, view.Data); - MapDataCollection mapData = map.Data; Assert.IsInstanceOf(mapData); @@ -263,25 +175,21 @@ public void UpdateObserver_HydraulicBoundaryLocationsDataUpdated_MapDataUpdated() { // Setup - using (var view = new FailureMechanismView(new TestFailureMechanism(), new ObservableTestAssessmentSectionStub())) + var assessmentSection = new ObservableTestAssessmentSectionStub { - IMapControl map = ((RingtoetsMapControl) view.Controls[0]).MapControl; - - var assessmentSection = new ObservableTestAssessmentSectionStub + HydraulicBoundaryDatabase = { - HydraulicBoundaryDatabase = + Locations = { - Locations = - { - new HydraulicBoundaryLocation(1, "test1", 1.0, 2.0) - } + new HydraulicBoundaryLocation(1, "test1", 1.0, 2.0) } - }; + } + }; - var failureMechanismContext = new FailureMechanismContext(new TestFailureMechanism(), assessmentSection); + using (var view = new FailureMechanismView(new TestFailureMechanism(), assessmentSection)) + { + IMapControl map = ((RingtoetsMapControl) view.Controls[0]).MapControl; - view.Data = failureMechanismContext; - MapData hydraulicBoundaryLocationsMapData = map.Data.Collection.ElementAt(hydraulicBoundaryLocationsIndex); // Precondition @@ -300,34 +208,30 @@ public void UpdatedObserver_LocationUpdatedAndNotified_MapDataUpdated() { // Setup - var random = new Random(21); - using (var view = new FailureMechanismView(new TestFailureMechanism(), new ObservableTestAssessmentSectionStub())) + var hydraulicBoundaryLocation = new HydraulicBoundaryLocation(1, "test1", 1.0, 2.0); + var assessmentSection = new ObservableTestAssessmentSectionStub { - IMapControl map = ((RingtoetsMapControl) view.Controls[0]).MapControl; - - var hydraulicBoundaryLocation = new HydraulicBoundaryLocation(1, "test1", 1.0, 2.0); - var assessmentSection = new ObservableTestAssessmentSectionStub + HydraulicBoundaryDatabase = { - HydraulicBoundaryDatabase = + Locations = { - Locations = - { - hydraulicBoundaryLocation - } + hydraulicBoundaryLocation } - }; + } + }; - var failureMechanismContext = new FailureMechanismContext(new TestFailureMechanism(), assessmentSection); + using (var view = new FailureMechanismView(new TestFailureMechanism(), assessmentSection)) + { + IMapControl map = ((RingtoetsMapControl) view.Controls[0]).MapControl; - view.Data = failureMechanismContext; - MapData hydraulicBoundaryLocationsMapData = map.Data.Collection.ElementAt(hydraulicBoundaryLocationsIndex); // Precondition MapDataTestHelper.AssertHydraulicBoundaryLocationOutputsMapData(assessmentSection.HydraulicBoundaryDatabase.Locations, hydraulicBoundaryLocationsMapData); // Call + var random = new Random(21); hydraulicBoundaryLocation.DesignWaterLevelCalculation1.Output = new TestHydraulicBoundaryLocationOutput(random.NextDouble()); hydraulicBoundaryLocation.DesignWaterLevelCalculation2.Output = new TestHydraulicBoundaryLocationOutput(random.NextDouble()); hydraulicBoundaryLocation.DesignWaterLevelCalculation3.Output = new TestHydraulicBoundaryLocationOutput(random.NextDouble()); @@ -348,39 +252,33 @@ public void UpdateObserver_ReferenceLineUpdated_MapDataUpdated() { // Setup - using (var view = new FailureMechanismView(new TestFailureMechanism(), new ObservableTestAssessmentSectionStub())) + var referenceLine = new ReferenceLine(); + referenceLine.SetGeometry(new List { - IMapControl map = ((RingtoetsMapControl) view.Controls[0]).MapControl; + new Point2D(1.0, 2.0), + new Point2D(2.0, 1.0) + }); - var points1 = new List - { - new Point2D(1.0, 2.0), - new Point2D(2.0, 1.0) - }; + var assessmentSection = new ObservableTestAssessmentSectionStub + { + ReferenceLine = referenceLine + }; - var points2 = new List - { - new Point2D(2.0, 5.0), - new Point2D(4.0, 3.0) - }; + using (var view = new FailureMechanismView(new TestFailureMechanism(), assessmentSection)) + { + IMapControl map = ((RingtoetsMapControl) view.Controls[0]).MapControl; - var assessmentSection = new ObservableTestAssessmentSectionStub - { - ReferenceLine = new ReferenceLine() - }; - assessmentSection.ReferenceLine.SetGeometry(points1); - - var failureMechanismContext = new FailureMechanismContext(new TestFailureMechanism(), assessmentSection); - - view.Data = failureMechanismContext; - MapData referenceLineMapData = map.Data.Collection.ElementAt(referenceLineIndex); // Precondition MapDataTestHelper.AssertReferenceLineMapData(assessmentSection.ReferenceLine, referenceLineMapData); // Call - assessmentSection.ReferenceLine.SetGeometry(points2); + assessmentSection.ReferenceLine.SetGeometry(new List + { + new Point2D(2.0, 5.0), + new Point2D(4.0, 3.0) + }); assessmentSection.NotifyObservers(); // Assert @@ -392,15 +290,12 @@ public void UpdateObserver_FailureMechanismSectionsUpdated_MapDataUpdated() { // Setup - using (var view = new FailureMechanismView(new TestFailureMechanism(), new ObservableTestAssessmentSectionStub())) + var failureMechanism = new TestFailureMechanism(); + + using (var view = new FailureMechanismView(failureMechanism, new ObservableTestAssessmentSectionStub())) { IMapControl map = ((RingtoetsMapControl) view.Controls[0]).MapControl; - var failureMechanism = new TestFailureMechanism(); - var failureMechanismContext = new FailureMechanismContext(failureMechanism, new ObservableTestAssessmentSectionStub()); - - view.Data = failureMechanismContext; - var sectionMapData = (MapLineData) map.Data.Collection.ElementAt(sectionsIndex); var sectionStartsMapData = (MapPointData) map.Data.Collection.ElementAt(sectionsStartPointIndex); var sectionsEndsMapData = (MapPointData) map.Data.Collection.ElementAt(sectionsEndPointIndex); @@ -430,16 +325,13 @@ const int updatedSectionEndLayerIndex = sectionsEndPointIndex - 1; const int updatedHydraulicLocationsLayerIndex = hydraulicBoundaryLocationsIndex - 1; - using (var view = new FailureMechanismView(new TestFailureMechanism(), new ObservableTestAssessmentSectionStub())) + var assessmentSection = new ObservableTestAssessmentSectionStub(); + var failureMechanism = new TestFailureMechanism(); + + using (var view = new FailureMechanismView(failureMechanism, assessmentSection)) { IMapControl map = ((RingtoetsMapControl) view.Controls[0]).MapControl; - var assessmentSection = new ObservableTestAssessmentSectionStub(); - var failureMechanism = new TestFailureMechanism(); - var failureMechanismContext = new FailureMechanismContext(failureMechanism, assessmentSection); - - view.Data = failureMechanismContext; - MapDataCollection mapData = map.Data; var dataToMove = (MapLineData) map.Data.Collection.ElementAt(referenceLineIndex); @@ -494,40 +386,6 @@ } } - [Test] - public void NotifyObservers_DataUpdatedNotifyObserversOnOldData_NoUpdateInViewData() - { - // Setup - IAssessmentSection oldAssessmentSection = new ObservableTestAssessmentSectionStub(); - IAssessmentSection newAssessmentSection = new ObservableTestAssessmentSectionStub(); - - newAssessmentSection.ReferenceLine = new ReferenceLine(); - newAssessmentSection.ReferenceLine.SetGeometry(new[] - { - new Point2D(2, 4), - new Point2D(3, 4) - }); - - var oldFailureMechanismContext = new FailureMechanismContext(new TestFailureMechanism(), oldAssessmentSection); - var newFailureMechanismContext = new FailureMechanismContext(new TestFailureMechanism(), newAssessmentSection); - using (var view = new FailureMechanismView(new TestFailureMechanism(), new ObservableTestAssessmentSectionStub())) - { - IMapControl map = ((RingtoetsMapControl) view.Controls[0]).MapControl; - - view.Data = oldFailureMechanismContext; - view.Data = newFailureMechanismContext; - MapData dataBeforeUpdate = map.Data; - - newAssessmentSection.ReferenceLine.SetGeometry(Enumerable.Empty()); - - // Call - oldAssessmentSection.NotifyObservers(); - - // Assert - Assert.AreEqual(dataBeforeUpdate, map.Data); - } - } - private static void AssertEmptyMapData(MapDataCollection mapDataCollection) { Assert.AreEqual("Test failure mechanism", mapDataCollection.Name);