Index: Ringtoets/GrassCoverErosionInwards/src/Ringtoets.GrassCoverErosionInwards.Forms/Views/GrassCoverErosionInwardsInputView.cs
===================================================================
diff -u -r462a9f89d625ca85e6ce2e2ff628db3d83913b99 -r18a53a9b2a6c09a3af46cb9c023de3f323639f30
--- Ringtoets/GrassCoverErosionInwards/src/Ringtoets.GrassCoverErosionInwards.Forms/Views/GrassCoverErosionInwardsInputView.cs (.../GrassCoverErosionInwardsInputView.cs) (revision 462a9f89d625ca85e6ce2e2ff628db3d83913b99)
+++ Ringtoets/GrassCoverErosionInwards/src/Ringtoets.GrassCoverErosionInwards.Forms/Views/GrassCoverErosionInwardsInputView.cs (.../GrassCoverErosionInwardsInputView.cs) (revision 18a53a9b2a6c09a3af46cb9c023de3f323639f30)
@@ -20,15 +20,20 @@
// All rights reserved.
using System.Windows.Forms;
+using Core.Common.Base;
using Core.Components.Charting.Forms;
+using Ringtoets.GrassCoverErosionInwards.Data;
namespace Ringtoets.GrassCoverErosionInwards.Forms.Views
{
///
/// This class is a view to show the grass cover erosion inwards input.
///
- public partial class GrassCoverErosionInwardsInputView : UserControl, IChartView
+ public partial class GrassCoverErosionInwardsInputView : UserControl, IChartView, IObserver
{
+ private object data;
+ private GrassCoverErosionInwardsCalculation calculation;
+
///
/// Creates a new instance of .
///
@@ -37,14 +42,68 @@
InitializeComponent();
}
- public object Data { get; set; }
+ ///
+ /// Gets or sets the calculation the input belongs to.
+ ///
+ public GrassCoverErosionInwardsCalculation Calculation
+ {
+ get
+ {
+ return calculation;
+ }
+ set
+ {
+ DetachFromData();
+ calculation = value;
+ SetChartTitle();
+ AttachToData();
+ }
+ }
+ public object Data
+ {
+ get
+ {
+ return data;
+ }
+ set
+ {
+ data = value as GrassCoverErosionInwardsInput;
+ }
+ }
+
public IChartControl Chart
{
get
{
return chartControl;
}
}
+
+ public void UpdateObserver()
+ {
+ SetChartTitle();
+ }
+
+ private void SetChartTitle()
+ {
+ chartControl.ChartTitle = calculation != null ? calculation.Name : string.Empty;
+ }
+
+ private void DetachFromData()
+ {
+ if (calculation != null)
+ {
+ calculation.Detach(this);
+ }
+ }
+
+ private void AttachToData()
+ {
+ if (calculation != null)
+ {
+ calculation.Attach(this);
+ }
+ }
}
-}
+}
\ No newline at end of file
Index: Ringtoets/GrassCoverErosionInwards/src/Ringtoets.GrassCoverErosionInwards.Plugin/GrassCoverErosionInwardsGuiPlugin.cs
===================================================================
diff -u -r8b9903ce9a5e5b860ee8ba6719737783be7a8cab -r18a53a9b2a6c09a3af46cb9c023de3f323639f30
--- Ringtoets/GrassCoverErosionInwards/src/Ringtoets.GrassCoverErosionInwards.Plugin/GrassCoverErosionInwardsGuiPlugin.cs (.../GrassCoverErosionInwardsGuiPlugin.cs) (revision 8b9903ce9a5e5b860ee8ba6719737783be7a8cab)
+++ Ringtoets/GrassCoverErosionInwards/src/Ringtoets.GrassCoverErosionInwards.Plugin/GrassCoverErosionInwardsGuiPlugin.cs (.../GrassCoverErosionInwardsGuiPlugin.cs) (revision 18a53a9b2a6c09a3af46cb9c023de3f323639f30)
@@ -86,7 +86,8 @@
Image = RingtoetsCommonFormsResources.GenericInputOutputIcon,
GetViewName = (view, input) => GrassCoverErosionInwardsFormsResources.GrassCoverErosionInwardsInputContext_NodeDisplayName,
GetViewData = context => context.WrappedData,
- CloseForData = CloseInputViewForData
+ CloseForData = CloseInputViewForData,
+ AfterCreate = (view, context) => view.Calculation = context.Calculation
};
}
Index: Ringtoets/GrassCoverErosionInwards/test/Ringtoets.GrassCoverErosionInwards.Forms.Test/Views/GrassCoverErosionInwardsInputViewTest.cs
===================================================================
diff -u -r462a9f89d625ca85e6ce2e2ff628db3d83913b99 -r18a53a9b2a6c09a3af46cb9c023de3f323639f30
--- Ringtoets/GrassCoverErosionInwards/test/Ringtoets.GrassCoverErosionInwards.Forms.Test/Views/GrassCoverErosionInwardsInputViewTest.cs (.../GrassCoverErosionInwardsInputViewTest.cs) (revision 462a9f89d625ca85e6ce2e2ff628db3d83913b99)
+++ Ringtoets/GrassCoverErosionInwards/test/Ringtoets.GrassCoverErosionInwards.Forms.Test/Views/GrassCoverErosionInwardsInputViewTest.cs (.../GrassCoverErosionInwardsInputViewTest.cs) (revision 18a53a9b2a6c09a3af46cb9c023de3f323639f30)
@@ -20,9 +20,11 @@
// All rights reserved.
using System.Windows.Forms;
+using Core.Common.Base;
using Core.Components.Charting.Forms;
using Core.Components.OxyPlot.Forms;
using NUnit.Framework;
+using Ringtoets.GrassCoverErosionInwards.Data;
using Ringtoets.GrassCoverErosionInwards.Forms.Views;
using RingtoetsCommonFormsResources = Ringtoets.Common.Forms.Properties.Resources;
@@ -41,6 +43,7 @@
// Assert
Assert.IsInstanceOf(view);
Assert.IsInstanceOf(view);
+ Assert.IsInstanceOf(view);
Assert.IsNotNull(view.Chart);
Assert.IsNull(view.Data);
}
@@ -61,7 +64,148 @@
CollectionAssert.IsEmpty(chartControl.Data.List);
Assert.AreEqual(RingtoetsCommonFormsResources.InputView_Distance_DisplayName, chartControl.BottomAxisTitle);
Assert.AreEqual(RingtoetsCommonFormsResources.InputView_Height_DisplayName, chartControl.LeftAxisTitle);
+ Assert.IsNull(chartControl.ChartTitle);
}
}
+
+ [Test]
+ public void Data_GrassCoverErosionInwardsInput_DataSet()
+ {
+ // Setup
+ using (GrassCoverErosionInwardsInputView view = new GrassCoverErosionInwardsInputView())
+ {
+ GrassCoverErosionInwardsInput input = new GrassCoverErosionInwardsInput();
+
+ // Call
+ view.Data = input;
+
+ // Assert
+ Assert.AreSame(input, view.Data);
+ }
+ }
+
+ [Test]
+ public void Data_OtherThanGrassCoverErosionInwardsInput_DataNull()
+ {
+ // Setup
+ using (GrassCoverErosionInwardsInputView view = new GrassCoverErosionInwardsInputView())
+ {
+ object input = new object();
+
+ // Call
+ view.Data = input;
+
+ // Assert
+ Assert.IsNull(view.Data);
+ }
+ }
+
+ [Test]
+ public void Calculation_Always_SetsCalculationAndUpdateChartTitle()
+ {
+ // Setup
+ using (GrassCoverErosionInwardsInputView view = new GrassCoverErosionInwardsInputView())
+ {
+ GrassCoverErosionInwardsCalculation calculation = new GrassCoverErosionInwardsCalculation()
+ {
+ Name = "Test name"
+ };
+
+ // Call
+ view.Calculation = calculation;
+
+ // Assert
+ Assert.AreSame(calculation, view.Calculation);
+ Assert.AreEqual(calculation.Name, view.Chart.ChartTitle);
+ }
+ }
+
+ [Test]
+ public void Calculation_SetToNull_ChartTitleCleared()
+ {
+ // Setup
+ using (GrassCoverErosionInwardsInputView view = new GrassCoverErosionInwardsInputView())
+ {
+ GrassCoverErosionInwardsCalculation calculation = new GrassCoverErosionInwardsCalculation()
+ {
+ Name = "Test name"
+ };
+
+ view.Calculation = calculation;
+
+ // Precondition
+ Assert.AreSame(calculation, view.Calculation);
+ Assert.AreEqual(calculation.Name, view.Chart.ChartTitle);
+
+ // Call
+ view.Calculation = null;
+
+ // Assert
+ Assert.IsNull(view.Calculation);
+ Assert.AreEqual(string.Empty, view.Chart.ChartTitle);
+ }
+ }
+
+ [Test]
+ public void UpdateObservers_CalculationNameUpdated_ChartTitleUpdated()
+ {
+ // Setup
+ using (GrassCoverErosionInwardsInputView view = new GrassCoverErosionInwardsInputView())
+ {
+ var initialName = "Initial name";
+ var updatedName = "Updated name";
+
+ var calculation = new GrassCoverErosionInwardsCalculation
+ {
+ Name = initialName
+ };
+
+ view.Calculation = calculation;
+
+ // Precondition
+ Assert.AreEqual(initialName, view.Chart.ChartTitle);
+
+ calculation.Name = updatedName;
+
+ // Call
+ calculation.NotifyObservers();
+
+ // Assert
+ Assert.AreEqual(updatedName, view.Chart.ChartTitle);
+ }
+ }
+
+ [Test]
+ public void UpdateObservers_OtherCalculationNameUpdated_ChartTitleNotUpdated()
+ {
+ // Setup
+ using (GrassCoverErosionInwardsInputView view = new GrassCoverErosionInwardsInputView())
+ {
+ var initialName = "Initial name";
+ var updatedName = "Updated name";
+
+ var calculation1 = new GrassCoverErosionInwardsCalculation
+ {
+ Name = initialName
+ };
+ var calculation2 = new GrassCoverErosionInwardsCalculation
+ {
+ Name = initialName
+ };
+
+ view.Calculation = calculation1;
+
+ // Precondition
+ Assert.AreEqual(initialName, view.Chart.ChartTitle);
+
+ calculation2.Name = updatedName;
+
+ // Call
+ calculation1.NotifyObservers();
+
+ // Assert
+ Assert.AreEqual(initialName, view.Chart.ChartTitle);
+ }
+ }
}
}
\ No newline at end of file
Index: Ringtoets/GrassCoverErosionInwards/test/Ringtoets.GrassCoverErosionInwards.Plugin.Test/ViewInfos/GrassCoverErosionInwardsInputViewInfoTest.cs
===================================================================
diff -u -r87fcb2097e3a58e611c0de6913cb48851006f7af -r18a53a9b2a6c09a3af46cb9c023de3f323639f30
--- Ringtoets/GrassCoverErosionInwards/test/Ringtoets.GrassCoverErosionInwards.Plugin.Test/ViewInfos/GrassCoverErosionInwardsInputViewInfoTest.cs (.../GrassCoverErosionInwardsInputViewInfoTest.cs) (revision 87fcb2097e3a58e611c0de6913cb48851006f7af)
+++ Ringtoets/GrassCoverErosionInwards/test/Ringtoets.GrassCoverErosionInwards.Plugin.Test/ViewInfos/GrassCoverErosionInwardsInputViewInfoTest.cs (.../GrassCoverErosionInwardsInputViewInfoTest.cs) (revision 18a53a9b2a6c09a3af46cb9c023de3f323639f30)
@@ -109,18 +109,18 @@
IAssessmentSection assessmentSection = mocks.StrictMock();
mocks.ReplayAll();
- GrassCoverErosionInwardsCalculation pipingCalculation = new GrassCoverErosionInwardsCalculation();
- GrassCoverErosionInwardsCalculationContext pipingCalculationScenarioContext = new GrassCoverErosionInwardsCalculationContext(pipingCalculation,
+ GrassCoverErosionInwardsCalculation calculation = new GrassCoverErosionInwardsCalculation();
+ GrassCoverErosionInwardsCalculationContext calculationContext = new GrassCoverErosionInwardsCalculationContext(calculation,
new GrassCoverErosionInwardsFailureMechanism(),
assessmentSection);
using (GrassCoverErosionInwardsInputView view = new GrassCoverErosionInwardsInputView
{
- Data = pipingCalculation.InputParameters
+ Data = calculation.InputParameters
})
{
// Call
- bool closeForData = info.CloseForData(view, pipingCalculationScenarioContext);
+ bool closeForData = info.CloseForData(view, calculationContext);
// Assert
Assert.IsTrue(closeForData);
@@ -135,20 +135,20 @@
IAssessmentSection assessmentSection = mocks.StrictMock();
mocks.ReplayAll();
- GrassCoverErosionInwardsCalculation pipingCalculation = new GrassCoverErosionInwardsCalculation();
+ GrassCoverErosionInwardsCalculation calculation = new GrassCoverErosionInwardsCalculation();
GrassCoverErosionInwardsCalculation calculationToRemove = new GrassCoverErosionInwardsCalculation();
- GrassCoverErosionInwardsCalculationContext pipingCalculationScenarioContext = new GrassCoverErosionInwardsCalculationContext(calculationToRemove,
+ GrassCoverErosionInwardsCalculationContext calculationContext = new GrassCoverErosionInwardsCalculationContext(calculationToRemove,
new GrassCoverErosionInwardsFailureMechanism(),
assessmentSection);
using (GrassCoverErosionInwardsInputView view = new GrassCoverErosionInwardsInputView
{
- Data = pipingCalculation.InputParameters
+ Data = calculation.InputParameters
})
{
// Call
- bool closeForData = info.CloseForData(view, pipingCalculationScenarioContext);
+ bool closeForData = info.CloseForData(view, calculationContext);
// Assert
Assert.IsFalse(closeForData);
@@ -511,5 +511,31 @@
mocks.VerifyAll();
}
}
+
+ [Test]
+ public void AfterCreate_Always_SetsCalculationOnView()
+ {
+ // Setup
+ IAssessmentSection assessmentSection = mocks.StrictMock();
+ mocks.ReplayAll();
+
+ GrassCoverErosionInwardsCalculation calculation = new GrassCoverErosionInwardsCalculation();
+ GrassCoverErosionInwardsInputContext context = new GrassCoverErosionInwardsInputContext(calculation.InputParameters, calculation,
+ new GrassCoverErosionInwardsFailureMechanism(),
+ assessmentSection);
+
+ using (GrassCoverErosionInwardsInputView view = new GrassCoverErosionInwardsInputView
+ {
+ Data = calculation.InputParameters
+ })
+ {
+ // Call
+ info.AfterCreate(view, context);
+
+ // Assert
+ Assert.AreSame(calculation, view.Calculation);
+ mocks.VerifyAll();
+ }
+ }
}
}