Index: Riskeer/DuneErosion/src/Riskeer.DuneErosion.Forms/Views/DuneErosionLocationsMapLayer.cs =================================================================== diff -u -r7f87b1e830f2c7612a75b19326543ce03e07fa34 -rd1552205c4eedabe270bf13d4551e145ad1d69e9 --- Riskeer/DuneErosion/src/Riskeer.DuneErosion.Forms/Views/DuneErosionLocationsMapLayer.cs (.../DuneErosionLocationsMapLayer.cs) (revision 7f87b1e830f2c7612a75b19326543ce03e07fa34) +++ Riskeer/DuneErosion/src/Riskeer.DuneErosion.Forms/Views/DuneErosionLocationsMapLayer.cs (.../DuneErosionLocationsMapLayer.cs) (revision d1552205c4eedabe270bf13d4551e145ad1d69e9) @@ -39,6 +39,7 @@ private Observer duneLocationsObserver; private Observer userDefinedTargetProbabilitiesListObserver; + private RecursiveObserver, DuneLocationCalculationsForTargetProbability> userDefinedTargetProbabilitiesObserver; private List, DuneLocationCalculation>> calculationsForTargetProbabilityObservers; @@ -81,6 +82,7 @@ { duneLocationsObserver.Dispose(); userDefinedTargetProbabilitiesListObserver.Dispose(); + userDefinedTargetProbabilitiesObserver.Dispose(); DeleteTargetProbabilitiesObservers(); } @@ -112,6 +114,12 @@ Observable = failureMechanism.DuneLocationCalculationsForUserDefinedTargetProbabilities }; + userDefinedTargetProbabilitiesObserver = new RecursiveObserver, DuneLocationCalculationsForTargetProbability>( + UpdateFeatures, tp => tp) + { + Observable = failureMechanism.DuneLocationCalculationsForUserDefinedTargetProbabilities + }; + calculationsForTargetProbabilityObservers = new List, DuneLocationCalculation>>(); CreateTargetProbabilitiesObservers(); } @@ -120,7 +128,8 @@ { calculationsForTargetProbabilityObservers.AddRange(failureMechanism.DuneLocationCalculationsForUserDefinedTargetProbabilities .Select(calculationsForTargetProbability => CreateDuneLocationCalculationsObserver( - calculationsForTargetProbability.DuneLocationCalculations))); + calculationsForTargetProbability.DuneLocationCalculations)) + .ToArray()); } private RecursiveObserver, DuneLocationCalculation> CreateDuneLocationCalculationsObserver( Index: Riskeer/DuneErosion/test/Riskeer.DuneErosion.Forms.Test/Views/DuneErosionLocationsMapLayerTest.cs =================================================================== diff -u -r7f87b1e830f2c7612a75b19326543ce03e07fa34 -rd1552205c4eedabe270bf13d4551e145ad1d69e9 --- Riskeer/DuneErosion/test/Riskeer.DuneErosion.Forms.Test/Views/DuneErosionLocationsMapLayerTest.cs (.../DuneErosionLocationsMapLayerTest.cs) (revision 7f87b1e830f2c7612a75b19326543ce03e07fa34) +++ Riskeer/DuneErosion/test/Riskeer.DuneErosion.Forms.Test/Views/DuneErosionLocationsMapLayerTest.cs (.../DuneErosionLocationsMapLayerTest.cs) (revision d1552205c4eedabe270bf13d4551e145ad1d69e9) @@ -165,7 +165,7 @@ targetProbability.DuneLocationCalculations.AddRange(failureMechanism.DuneLocations.Select(l => new DuneLocationCalculation(l))); failureMechanism.DuneLocationCalculationsForUserDefinedTargetProbabilities.Add(targetProbability); failureMechanism.DuneLocationCalculationsForUserDefinedTargetProbabilities.NotifyObservers(); - + mapLayer.MapData.Attach(observer); // Precondition @@ -217,6 +217,40 @@ mocks.VerifyAll(); } + [Test] + public void GivenMapLayerWithDuneLocations_WhenUserDefinedTargetProbabilityUpdatedAndNotified_ThenMapDataUpdated() + { + // Given + var failureMechanism = new DuneErosionFailureMechanism(); + failureMechanism.DuneLocationCalculationsForUserDefinedTargetProbabilities.Add( + new DuneLocationCalculationsForTargetProbability(0.1)); + failureMechanism.SetDuneLocations(new[] + { + new TestDuneLocation("test1") + }); + + var mapLayer = new DuneErosionLocationsMapLayer(failureMechanism); + + var mocks = new MockRepository(); + var observer = mocks.StrictMock(); + observer.Expect(o => o.UpdateObserver()); + mocks.ReplayAll(); + + mapLayer.MapData.Attach(observer); + + // Precondition + AssertDuneLocationsMapData(failureMechanism, mapLayer.MapData); + + // When + DuneLocationCalculationsForTargetProbability targetProbability = failureMechanism.DuneLocationCalculationsForUserDefinedTargetProbabilities.First(); + targetProbability.TargetProbability = 0.003; + targetProbability.NotifyObservers(); + + // Then + AssertDuneLocationsMapData(failureMechanism, mapLayer.MapData); + mocks.VerifyAll(); + } + private static void AssertDuneLocationsMapData(DuneErosionFailureMechanism failureMechanism, MapData mapData) {