Index: Ringtoets/Common/src/Ringtoets.Common.Forms/FailureMechanismPropertyChangeHandler.cs =================================================================== diff -u -rc016f7af2a4afdc96fc19b8db86dc8d3559de023 -rd819ea1eaeed69d333b425c911c370397a24dc0f --- Ringtoets/Common/src/Ringtoets.Common.Forms/FailureMechanismPropertyChangeHandler.cs (.../FailureMechanismPropertyChangeHandler.cs) (revision c016f7af2a4afdc96fc19b8db86dc8d3559de023) +++ Ringtoets/Common/src/Ringtoets.Common.Forms/FailureMechanismPropertyChangeHandler.cs (.../FailureMechanismPropertyChangeHandler.cs) (revision d819ea1eaeed69d333b425c911c370397a24dc0f) @@ -16,6 +16,15 @@ /// public class FailureMechanismPropertyChangeHandler : IFailureMechanismPropertyChangeHandler where T : IFailureMechanism { + public bool RequiresConfirmation(T failureMechanism) + { + if (failureMechanism == null) + { + throw new ArgumentNullException(nameof(failureMechanism)); + } + return failureMechanism.Calculations.Any(c => c.HasOutput); + } + public bool ConfirmPropertyChange() { DialogResult result = MessageBox.Show(ConfirmationMessage, @@ -28,7 +37,7 @@ { if (failureMechanism == null) { - throw new ArgumentNullException("failureMechanism"); + throw new ArgumentNullException(nameof(failureMechanism)); } var affected = new List(); foreach (var calculation in failureMechanism.Calculations.Where(c => c.HasOutput)) Index: Ringtoets/Common/src/Ringtoets.Common.Forms/PropertyClasses/IFailureMechanismPropertyChangeHandler.cs =================================================================== diff -u -r4d77063761342b4686ef4a56c47874558a53dec7 -rd819ea1eaeed69d333b425c911c370397a24dc0f --- Ringtoets/Common/src/Ringtoets.Common.Forms/PropertyClasses/IFailureMechanismPropertyChangeHandler.cs (.../IFailureMechanismPropertyChangeHandler.cs) (revision 4d77063761342b4686ef4a56c47874558a53dec7) +++ Ringtoets/Common/src/Ringtoets.Common.Forms/PropertyClasses/IFailureMechanismPropertyChangeHandler.cs (.../IFailureMechanismPropertyChangeHandler.cs) (revision d819ea1eaeed69d333b425c911c370397a24dc0f) @@ -12,6 +12,17 @@ public interface IFailureMechanismPropertyChangeHandler where T : IFailureMechanism { /// + /// Checks whether a call to would have any effect in the given + /// . + /// + /// The failure mechanism to check for. + /// true if would result in changes, + /// false otherwise. + /// Thrown when + /// is null. + bool RequiresConfirmation(T failureMechanism); + + /// /// Checks to see if the change of the failure mechanism property should occur or not. /// /// true if the change should occur, false otherwise. Index: Ringtoets/Piping/src/Ringtoets.Piping.Forms/PropertyClasses/PipingFailureMechanismContextProperties.cs =================================================================== diff -u -r4d77063761342b4686ef4a56c47874558a53dec7 -rd819ea1eaeed69d333b425c911c370397a24dc0f --- Ringtoets/Piping/src/Ringtoets.Piping.Forms/PropertyClasses/PipingFailureMechanismContextProperties.cs (.../PipingFailureMechanismContextProperties.cs) (revision 4d77063761342b4686ef4a56c47874558a53dec7) +++ Ringtoets/Piping/src/Ringtoets.Piping.Forms/PropertyClasses/PipingFailureMechanismContextProperties.cs (.../PipingFailureMechanismContextProperties.cs) (revision d819ea1eaeed69d333b425c911c370397a24dc0f) @@ -116,11 +116,7 @@ } set { - if (propertyChangeHandler.ConfirmPropertyChange()) - { - data.WrappedData.GeneralInput.WaterVolumetricWeight = value; - ClearOutputAndNotifyObservers(); - } + SetPropertyValueAfterConfirmation(() => data.WrappedData.GeneralInput.WaterVolumetricWeight = value); } } @@ -168,11 +164,7 @@ } set { - if (propertyChangeHandler.ConfirmPropertyChange()) - { - data.WrappedData.PipingProbabilityAssessmentInput.A = value; - ClearOutputAndNotifyObservers(); - } + SetPropertyValueAfterConfirmation(() => data.WrappedData.PipingProbabilityAssessmentInput.A = value); } } @@ -278,6 +270,22 @@ #endregion + private void SetPropertyValueAfterConfirmation(Action setPropertyAction) + { + if (propertyChangeHandler.RequiresConfirmation(data.WrappedData)) + { + if (propertyChangeHandler.ConfirmPropertyChange()) + { + setPropertyAction(); + ClearOutputAndNotifyObservers(); + } + } + else + { + setPropertyAction(); + } + } + private void ClearOutputAndNotifyObservers() { foreach (IObservable changedObject in propertyChangeHandler.PropertyChanged(data.WrappedData)) Index: Ringtoets/Piping/test/Ringtoets.Piping.Forms.Test/PropertyClasses/PipingFailureMechanismContextPropertiesTest.cs =================================================================== diff -u -r4d77063761342b4686ef4a56c47874558a53dec7 -rd819ea1eaeed69d333b425c911c370397a24dc0f --- Ringtoets/Piping/test/Ringtoets.Piping.Forms.Test/PropertyClasses/PipingFailureMechanismContextPropertiesTest.cs (.../PipingFailureMechanismContextPropertiesTest.cs) (revision 4d77063761342b4686ef4a56c47874558a53dec7) +++ Ringtoets/Piping/test/Ringtoets.Piping.Forms.Test/PropertyClasses/PipingFailureMechanismContextPropertiesTest.cs (.../PipingFailureMechanismContextPropertiesTest.cs) (revision d819ea1eaeed69d333b425c911c370397a24dc0f) @@ -46,7 +46,7 @@ { // Setup var mocks = new MockRepository(); - IFailureMechanismPropertyChangeHandler handler = CreateSimpleHandler(mocks); + var handler = mocks.Stub>(); mocks.ReplayAll(); // Call @@ -84,8 +84,8 @@ var failureMechanism = new PipingFailureMechanism(); var mockRepository = new MockRepository(); - IAssessmentSection assessmentSectionStub = mockRepository.Stub(); - IFailureMechanismPropertyChangeHandler handler = CreateSimpleHandler(mockRepository); + var assessmentSectionStub = mockRepository.Stub(); + var handler = mockRepository.Stub>(); mockRepository.ReplayAll(); // Call @@ -127,8 +127,8 @@ var failureMechanism = new PipingFailureMechanism(); var mockRepository = new MockRepository(); - IAssessmentSection assessmentSectionStub = mockRepository.Stub(); - IFailureMechanismPropertyChangeHandler handler = CreateSimpleHandler(mockRepository); + var assessmentSectionStub = mockRepository.Stub(); + var handler = mockRepository.Stub>(); mockRepository.ReplayAll(); @@ -262,17 +262,18 @@ public void A_SetInvalidValueWithConfirmation_ThrowsArgumentException(double value) { // Setup + var failureMechanism = new PipingFailureMechanism(); + var mocks = new MockRepository(); var assessmentSection = mocks.Stub(); var observerMock = mocks.StrictMock(); var changeHandler = mocks.Stub>(); + changeHandler.Expect(h => h.RequiresConfirmation(failureMechanism)).Return(true); changeHandler.Expect(h => h.ConfirmPropertyChange()).Return(true); mocks.ReplayAll(); - var failureMechanism = new PipingFailureMechanism(); - var properties = new PipingFailureMechanismContextProperties( new PipingFailureMechanismContext(failureMechanism, assessmentSection), changeHandler); @@ -308,6 +309,7 @@ observableMock.Expect(o => o.NotifyObservers()); var changeHandler = mocks.Stub>(); + changeHandler.Expect(h => h.RequiresConfirmation(failureMechanism)).Return(true); changeHandler.Expect(h => h.ConfirmPropertyChange()).Return(true); changeHandler.Expect(h => h.PropertyChanged(failureMechanism)).Return(new [] { observableMock }); @@ -340,17 +342,19 @@ public void A_SetValidNoConfirmation_NoValueChangeNoUpdates(double value) { // Setup + var failureMechanism = new PipingFailureMechanism(); + var mockRepository = new MockRepository(); var observerMock = mockRepository.StrictMock(); var changeHandler = mockRepository.StrictMock>(); + changeHandler.Expect(h => h.RequiresConfirmation(failureMechanism)).Return(true); changeHandler.Expect(h => h.ConfirmPropertyChange()).Return(false); var assessmentSection = mockRepository.Stub(); mockRepository.ReplayAll(); - var failureMechanism = new PipingFailureMechanism(); failureMechanism.Attach(observerMock); var properties = new PipingFailureMechanismContextProperties( @@ -375,17 +379,18 @@ public void WaterVolumetricWeight_SetInvalidValueWithConfirmation_ThrowArgumentExceptionAndDoesNotUpdateObservers(double value) { // Setup + var failureMechanism = new PipingFailureMechanism(); var mocks = new MockRepository(); var observerMock = mocks.StrictMock(); var assessmentSection = mocks.Stub(); var changeHandler = mocks.Stub>(); + changeHandler.Expect(h => h.RequiresConfirmation(failureMechanism)).Return(true); changeHandler.Expect(h => h.ConfirmPropertyChange()).Return(true); mocks.ReplayAll(); - var failureMechanism = new PipingFailureMechanism(); failureMechanism.Attach(observerMock); var properties = new PipingFailureMechanismContextProperties( @@ -418,6 +423,7 @@ observableMock.Expect(o => o.NotifyObservers()); var handler = mocks.Stub>(); + handler.Expect(h => h.RequiresConfirmation(failureMechanism)).Return(true); handler.Expect(h => h.ConfirmPropertyChange()).Return(true); handler.Expect(h => h.PropertyChanged(failureMechanism)).Return(new[] { observableMock }); @@ -449,16 +455,18 @@ public void WaterVolumetricWeight_SetValueNoConfirmation_NoValueChangeNoUpdates(double value) { // Setup + var failureMechanism = new PipingFailureMechanism(); + var mocks = new MockRepository(); var observerMock = mocks.StrictMock(); var assessmentSection = mocks.Stub(); var changeHandler = mocks.StrictMock>(); + changeHandler.Expect(h => h.RequiresConfirmation(failureMechanism)).Return(true); changeHandler.Expect(h => h.ConfirmPropertyChange()).Return(false); mocks.ReplayAll(); - var failureMechanism = new PipingFailureMechanism(); failureMechanism.Attach(observerMock); var properties = new PipingFailureMechanismContextProperties( @@ -474,14 +482,5 @@ Assert.AreEqual(oldValue, failureMechanism.GeneralInput.WaterVolumetricWeight.Value, failureMechanism.GeneralInput.WaterVolumetricWeight.GetAccuracy()); mocks.VerifyAll(); } - - private IFailureMechanismPropertyChangeHandler CreateSimpleHandler(MockRepository mockRepository) - { - var handler = mockRepository.Stub>(); - handler.Stub(h => h.ConfirmPropertyChange()).Return(true); - handler.Stub(h => h.PropertyChanged(Arg.Is.NotNull)).Return(Enumerable.Empty()); - - return handler; - } } } \ No newline at end of file