Index: Riskeer/DuneErosion/src/Riskeer.DuneErosion.Forms/PresentationObjects/DuneLocationCalculationsForUserDefinedTargetProbabilityContext.cs =================================================================== diff -u -rc07341d07d9f9d32e1b5ac99d727396716e998a3 -r8ca6f19c77af27dd6e93556ae260f80bdff2b86a --- Riskeer/DuneErosion/src/Riskeer.DuneErosion.Forms/PresentationObjects/DuneLocationCalculationsForUserDefinedTargetProbabilityContext.cs (.../DuneLocationCalculationsForUserDefinedTargetProbabilityContext.cs) (revision c07341d07d9f9d32e1b5ac99d727396716e998a3) +++ Riskeer/DuneErosion/src/Riskeer.DuneErosion.Forms/PresentationObjects/DuneLocationCalculationsForUserDefinedTargetProbabilityContext.cs (.../DuneLocationCalculationsForUserDefinedTargetProbabilityContext.cs) (revision 8ca6f19c77af27dd6e93556ae260f80bdff2b86a) @@ -20,16 +20,18 @@ // All rights reserved. using System; -using Core.Common.Controls.PresentationObjects; +using Core.Common.Base; using Riskeer.Common.Data.AssessmentSection; +using Riskeer.Common.Forms.PresentationObjects; using Riskeer.DuneErosion.Data; namespace Riskeer.DuneErosion.Forms.PresentationObjects { /// /// Presentation object for all dune location calculations based on a user defined target probability. /// - public class DuneLocationCalculationsForUserDefinedTargetProbabilityContext : ObservableWrappedObjectContextBase + public class DuneLocationCalculationsForUserDefinedTargetProbabilityContext + : LocationCalculationsContext { /// /// Creates a new instance of . @@ -66,5 +68,7 @@ /// Gets the assessment section that the context belongs to. /// public IAssessmentSection AssessmentSection { get; } + + protected override IObservableEnumerable LocationCalculationsEnumerationToObserve => FailureMechanism.DuneLocationCalculationsForUserDefinedTargetProbabilities; } } \ No newline at end of file Index: Riskeer/DuneErosion/src/Riskeer.DuneErosion.Plugin/DuneErosionPlugin.cs =================================================================== diff -u -r16ba3eb172ac01be401442389ba665fe86ce7970 -r8ca6f19c77af27dd6e93556ae260f80bdff2b86a --- Riskeer/DuneErosion/src/Riskeer.DuneErosion.Plugin/DuneErosionPlugin.cs (.../DuneErosionPlugin.cs) (revision 16ba3eb172ac01be401442389ba665fe86ce7970) +++ Riskeer/DuneErosion/src/Riskeer.DuneErosion.Plugin/DuneErosionPlugin.cs (.../DuneErosionPlugin.cs) (revision 8ca6f19c77af27dd6e93556ae260f80bdff2b86a) @@ -36,6 +36,7 @@ using Core.Gui.Helpers; using Core.Gui.Plugin; using Riskeer.Common.Data.AssessmentSection; +using Riskeer.Common.Forms.Helpers; using Riskeer.Common.Forms.PresentationObjects; using Riskeer.Common.Forms.TreeNodeInfos; using Riskeer.Common.Forms.TypeConverters; @@ -149,7 +150,9 @@ yield return new TreeNodeInfo { - Text = context => noProbabilityValueDoubleConverter.ConvertToString(context.WrappedData.TargetProbability), + Text = context => TargetProbabilityCalculationsDisplayNameHelper.GetUniqueDisplayNameForCalculations(context.WrappedData, + context.FailureMechanism.DuneLocationCalculationsForUserDefinedTargetProbabilities, + probability => probability.TargetProbability), Image = context => RiskeerCommonFormsResources.GenericInputOutputIcon, EnsureVisibleOnCreate = (context, o) => true, CanRemove = (context, o) => true, @@ -200,7 +203,10 @@ context.AssessmentSection, () => context.WrappedData.TargetProbability, () => noProbabilityValueDoubleConverter.ConvertToString(context.WrappedData.TargetProbability)), - AfterCreate = (view, context) => { view.CalculationGuiService = duneLocationCalculationGuiService; } + AfterCreate = (view, context) => + { + view.CalculationGuiService = duneLocationCalculationGuiService; + } }; } @@ -499,6 +505,8 @@ duneLocationCalculationsForUserDefinedTargetProbabilityContext.WrappedData); duneLocationCalculationsForUserDefinedTargetProbabilitiesGroupContext.WrappedData.Insert( position, duneLocationCalculationsForUserDefinedTargetProbabilityContext.WrappedData); + + duneLocationCalculationsForUserDefinedTargetProbabilitiesGroupContext.WrappedData.NotifyObservers(); } #endregion Index: Riskeer/DuneErosion/test/Riskeer.DuneErosion.Forms.Test/PresentationObjects/DuneLocationCalculationsForUserDefinedTargetProbabilityContextTest.cs =================================================================== diff -u -r9453b0efd19b36bd38b1bc4e79e4c29923965fce -r8ca6f19c77af27dd6e93556ae260f80bdff2b86a --- Riskeer/DuneErosion/test/Riskeer.DuneErosion.Forms.Test/PresentationObjects/DuneLocationCalculationsForUserDefinedTargetProbabilityContextTest.cs (.../DuneLocationCalculationsForUserDefinedTargetProbabilityContextTest.cs) (revision 9453b0efd19b36bd38b1bc4e79e4c29923965fce) +++ Riskeer/DuneErosion/test/Riskeer.DuneErosion.Forms.Test/PresentationObjects/DuneLocationCalculationsForUserDefinedTargetProbabilityContextTest.cs (.../DuneLocationCalculationsForUserDefinedTargetProbabilityContextTest.cs) (revision 8ca6f19c77af27dd6e93556ae260f80bdff2b86a) @@ -20,9 +20,12 @@ // All rights reserved. using System; -using Core.Common.Controls.PresentationObjects; +using System.Linq; +using Core.Common.Base; using NUnit.Framework; +using Rhino.Mocks; using Riskeer.Common.Data.TestUtil; +using Riskeer.Common.Forms.PresentationObjects; using Riskeer.DuneErosion.Data; using Riskeer.DuneErosion.Forms.PresentationObjects; @@ -71,9 +74,60 @@ assessmentSection); // Assert - Assert.IsInstanceOf>(context); + Assert.IsInstanceOf>(context); Assert.AreSame(duneLocationCalculationsForTargetProbability, context.WrappedData); Assert.AreSame(assessmentSection, context.AssessmentSection); } + + [Test] + public void GivenContextWithObserverAttached_WhenNotifyingObserversOfDuneLocationCalculationsForUserDefinedTargetProbabilities_ThenObserverCorrectlyNotified() + { + // Given + var mockRepository = new MockRepository(); + var observer = mockRepository.StrictMock(); + observer.Expect(o => o.UpdateObserver()); + mockRepository.ReplayAll(); + + var assessmentSection = new AssessmentSectionStub(); + var failureMechanism = new DuneErosionFailureMechanism(); + var calculationsForTargetProbability = new DuneLocationCalculationsForTargetProbability(0.1); + var context = new DuneLocationCalculationsForUserDefinedTargetProbabilityContext(calculationsForTargetProbability, + failureMechanism, + assessmentSection); + + context.Attach(observer); + + // When + failureMechanism.DuneLocationCalculationsForUserDefinedTargetProbabilities.NotifyObservers(); + + // Then + mockRepository.VerifyAll(); + } + + [Test] + public void GivenContextWithObserverAttached_WhenNotifyingObserversOfDuneLocationCalculationsForUserDefinedTargetProbability_ThenObserverCorrectlyNotified() + { + // Given + var mockRepository = new MockRepository(); + var observer = mockRepository.StrictMock(); + observer.Expect(o => o.UpdateObserver()); + mockRepository.ReplayAll(); + + var assessmentSection = new AssessmentSectionStub(); + var failureMechanism = new DuneErosionFailureMechanism(); + var calculationsForTargetProbability = new DuneLocationCalculationsForTargetProbability(0.1); + failureMechanism.DuneLocationCalculationsForUserDefinedTargetProbabilities.Add(calculationsForTargetProbability); + var context = new DuneLocationCalculationsForUserDefinedTargetProbabilityContext(calculationsForTargetProbability, + failureMechanism, + assessmentSection); + + context.Attach(observer); + + // When + failureMechanism.DuneLocationCalculationsForUserDefinedTargetProbabilities.First().NotifyObservers(); + + // Then + mockRepository.VerifyAll(); + } } } \ No newline at end of file Index: Riskeer/DuneErosion/test/Riskeer.DuneErosion.Plugin.Test/TreeNodeInfos/DuneLocationCalculationsForUserDefinedTargetProbabilityContextTreeNodeInfoTest.cs =================================================================== diff -u -r9453b0efd19b36bd38b1bc4e79e4c29923965fce -r8ca6f19c77af27dd6e93556ae260f80bdff2b86a --- Riskeer/DuneErosion/test/Riskeer.DuneErosion.Plugin.Test/TreeNodeInfos/DuneLocationCalculationsForUserDefinedTargetProbabilityContextTreeNodeInfoTest.cs (.../DuneLocationCalculationsForUserDefinedTargetProbabilityContextTreeNodeInfoTest.cs) (revision 9453b0efd19b36bd38b1bc4e79e4c29923965fce) +++ Riskeer/DuneErosion/test/Riskeer.DuneErosion.Plugin.Test/TreeNodeInfos/DuneLocationCalculationsForUserDefinedTargetProbabilityContextTreeNodeInfoTest.cs (.../DuneLocationCalculationsForUserDefinedTargetProbabilityContextTreeNodeInfoTest.cs) (revision 8ca6f19c77af27dd6e93556ae260f80bdff2b86a) @@ -109,21 +109,37 @@ } [Test] - public void Text_WithContext_ReturnsFormattedTargetProbability() + [TestCase(0.025, 0.0025, 0.00025, "1/400")] + [TestCase(0.0025, 0.0025, 0.025, "1/400 (1)")] + [TestCase(0.0025, 0.0025, 0.0025, "1/400 (2)")] + public void Text_WithContext_ReturnsUniquelyFormattedTargetProbability(double userDefinedTargetProbability1, + double userDefinedTargetProbability2, + double userDefinedTargetProbability3, + string expectedText) { // Setup - var assessmentSection = mocks.Stub(); - mocks.ReplayAll(); + var failureMechanism = new DuneErosionFailureMechanism(); + var calculationsForTargetProbability = new DuneLocationCalculationsForTargetProbability(userDefinedTargetProbability2); + var calculationsForTargetProbability2 = new DuneLocationCalculationsForTargetProbability(userDefinedTargetProbability3); + failureMechanism.DuneLocationCalculationsForUserDefinedTargetProbabilities.AddRange(new[] + { + new DuneLocationCalculationsForTargetProbability(userDefinedTargetProbability1), + calculationsForTargetProbability2, + calculationsForTargetProbability + }); - var context = new DuneLocationCalculationsForUserDefinedTargetProbabilityContext(new DuneLocationCalculationsForTargetProbability(0.01), - new DuneErosionFailureMechanism(), - assessmentSection); + var context = new DuneLocationCalculationsForUserDefinedTargetProbabilityContext(calculationsForTargetProbability, + failureMechanism, + new AssessmentSectionStub(new[] + { + failureMechanism + })); // Call string text = info.Text(context); // Assert - Assert.AreEqual("1/100", text); + Assert.AreEqual(expectedText, text); } [Test]