Index: Riskeer/Common/src/Riskeer.Common.Forms/ChangeHandlers/FailureMechanismCalculationChangeHandler.cs =================================================================== diff -u -re9b8aa3e972b9f07a3201f143c26de0e3f082d49 -r1d485f4f9416ec6bc8453ed4bb22fa23e0e2984f --- Riskeer/Common/src/Riskeer.Common.Forms/ChangeHandlers/FailureMechanismCalculationChangeHandler.cs (.../FailureMechanismCalculationChangeHandler.cs) (revision e9b8aa3e972b9f07a3201f143c26de0e3f082d49) +++ Riskeer/Common/src/Riskeer.Common.Forms/ChangeHandlers/FailureMechanismCalculationChangeHandler.cs (.../FailureMechanismCalculationChangeHandler.cs) (revision 1d485f4f9416ec6bc8453ed4bb22fa23e0e2984f) @@ -34,7 +34,6 @@ public class FailureMechanismCalculationChangeHandler : IConfirmDataChangeHandler { private readonly string query; - private readonly IFailureMechanism failureMechanism; private readonly IInquiryHelper inquiryHandler; /// @@ -63,19 +62,24 @@ throw new ArgumentNullException(nameof(inquiryHandler)); } - this.failureMechanism = failureMechanism; + FailureMechanism = failureMechanism; this.query = query; this.inquiryHandler = inquiryHandler; } - public bool RequireConfirmation() + public virtual bool RequireConfirmation() { - return failureMechanism.Calculations.Any(calc => calc.HasOutput); + return FailureMechanism.Calculations.Any(calc => calc.HasOutput); } public bool InquireConfirmation() { return inquiryHandler.InquireContinuation(query); } + + /// + /// Gets the . + /// + protected IFailureMechanism FailureMechanism { get; } } } \ No newline at end of file Index: Riskeer/Piping/src/Riskeer.Piping.Forms/ChangeHandlers/PipingFailureMechanismCalculationChangeHandler.cs =================================================================== diff -u --- Riskeer/Piping/src/Riskeer.Piping.Forms/ChangeHandlers/PipingFailureMechanismCalculationChangeHandler.cs (revision 0) +++ Riskeer/Piping/src/Riskeer.Piping.Forms/ChangeHandlers/PipingFailureMechanismCalculationChangeHandler.cs (revision 1d485f4f9416ec6bc8453ed4bb22fa23e0e2984f) @@ -0,0 +1,55 @@ +// Copyright (C) Stichting Deltares 2019. All rights reserved. +// +// This file is part of Riskeer. +// +// Riskeer is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program. If not, see . +// +// All names, logos, and references to "Deltares" are registered trademarks of +// Stichting Deltares and remain full property of Stichting Deltares at all times. +// All rights reserved. + +using System; +using System.Linq; +using Core.Common.Gui.Helpers; +using Riskeer.Common.Forms.ChangeHandlers; +using Riskeer.Piping.Data; +using Riskeer.Piping.Data.Probabilistic; + +namespace Riskeer.Piping.Forms.ChangeHandlers +{ + /// + /// Class which can, if required, inquire the user for a confirmation when a change to the + /// requires calculation results to be altered. + /// + public class PipingFailureMechanismCalculationChangeHandler : FailureMechanismCalculationChangeHandler + { + /// + /// Creates a new instance of . + /// + /// for which to handle changes. + /// The query which should be displayed when inquiring for a confirmation. + /// Object responsible for inquiring required data. + /// Thrown when any input parameter is null. + public PipingFailureMechanismCalculationChangeHandler(PipingFailureMechanism failureMechanism, + string query, IInquiryHelper inquiryHandler) + : base(failureMechanism, query, inquiryHandler) {} + + public override bool RequireConfirmation() + { + return FailureMechanism.Calculations + .OfType() + .Any(c => c.HasOutput); + } + } +} \ No newline at end of file Index: Riskeer/Piping/test/Riskeer.Piping.Forms.Test/ChangeHandlers/PipingFailureMechanismCalculationChangeHandlerTest.cs =================================================================== diff -u --- Riskeer/Piping/test/Riskeer.Piping.Forms.Test/ChangeHandlers/PipingFailureMechanismCalculationChangeHandlerTest.cs (revision 0) +++ Riskeer/Piping/test/Riskeer.Piping.Forms.Test/ChangeHandlers/PipingFailureMechanismCalculationChangeHandlerTest.cs (revision 1d485f4f9416ec6bc8453ed4bb22fa23e0e2984f) @@ -0,0 +1,120 @@ +// Copyright (C) Stichting Deltares 2019. All rights reserved. +// +// This file is part of Riskeer. +// +// Riskeer is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program. If not, see . +// +// All names, logos, and references to "Deltares" are registered trademarks of +// Stichting Deltares and remain full property of Stichting Deltares at all times. +// All rights reserved. + +using Core.Common.Gui.Helpers; +using NUnit.Framework; +using Rhino.Mocks; +using Riskeer.Common.Forms.ChangeHandlers; +using Riskeer.Piping.Data; +using Riskeer.Piping.Data.Probabilistic; +using Riskeer.Piping.Data.SemiProbabilistic; +using Riskeer.Piping.Data.TestUtil; +using Riskeer.Piping.Forms.ChangeHandlers; + +namespace Riskeer.Piping.Forms.Test.ChangeHandlers +{ + [TestFixture] + public class PipingFailureMechanismCalculationChangeHandlerTest + { + [Test] + public void Constructor_ExpectedValues() + { + // Setup + var mocks = new MockRepository(); + var inquiryHelper = mocks.Stub(); + mocks.ReplayAll(); + + // Call + var changeHandler = new PipingFailureMechanismCalculationChangeHandler(new PipingFailureMechanism(), string.Empty, inquiryHelper); + + // Assert + Assert.IsInstanceOf(changeHandler); + mocks.VerifyAll(); + } + + [Test] + public void RequireConfirmation_NoProbabilisticCalculations_ReturnsFalse() + { + // Setup + var mocks = new MockRepository(); + var inquiryHelper = mocks.Stub(); + mocks.ReplayAll(); + + var failureMechanism = new PipingFailureMechanism(); + failureMechanism.CalculationsGroup.Children.AddRange(new IPipingCalculationScenario[] + { + new SemiProbabilisticPipingCalculationScenario(), + new TestPipingCalculationScenario() + }); + + var changeHandler = new PipingFailureMechanismCalculationChangeHandler(failureMechanism, string.Empty, inquiryHelper); + + // Call + bool requireConfirmation = changeHandler.RequireConfirmation(); + + // Assert + Assert.IsFalse(requireConfirmation); + } + + [Test] + public void RequireConfirmation_ProbabilisticCalculationsWithoutOutput_ReturnsFalse() + { + // Setup + var mocks = new MockRepository(); + var inquiryHelper = mocks.Stub(); + mocks.ReplayAll(); + + var failureMechanism = new PipingFailureMechanism(); + failureMechanism.CalculationsGroup.Children.Add(new ProbabilisticPipingCalculationScenario()); + + var changeHandler = new PipingFailureMechanismCalculationChangeHandler(failureMechanism, string.Empty, inquiryHelper); + + // Call + bool requireConfirmation = changeHandler.RequireConfirmation(); + + // Assert + Assert.IsFalse(requireConfirmation); + } + + [Test] + public void RequireConfirmation_ProbabilisticCalculationsWithOutput_ReturnsTrue() + { + // Setup + var mocks = new MockRepository(); + var inquiryHelper = mocks.Stub(); + mocks.ReplayAll(); + + var failureMechanism = new PipingFailureMechanism(); + failureMechanism.CalculationsGroup.Children.Add(new ProbabilisticPipingCalculationScenario + { + Output = PipingTestDataGenerator.GetRandomProbabilisticPipingOutputWithIllustrationPoints() + }); + + var changeHandler = new PipingFailureMechanismCalculationChangeHandler(failureMechanism, string.Empty, inquiryHelper); + + // Call + bool requireConfirmation = changeHandler.RequireConfirmation(); + + // Assert + Assert.IsTrue(requireConfirmation); + } + } +} \ No newline at end of file