Index: Ringtoets/GrassCoverErosionInwards/src/Ringtoets.GrassCoverErosionInwards.Service/GrassCoverErosionInwardsCalculationActivity.cs =================================================================== diff -u -r0a51f20ac93373a43f79bb4c6327bce1d46545c6 -r6ccc539ce58e63f0e0fbff0da189c87b65146129 --- Ringtoets/GrassCoverErosionInwards/src/Ringtoets.GrassCoverErosionInwards.Service/GrassCoverErosionInwardsCalculationActivity.cs (.../GrassCoverErosionInwardsCalculationActivity.cs) (revision 0a51f20ac93373a43f79bb4c6327bce1d46545c6) +++ Ringtoets/GrassCoverErosionInwards/src/Ringtoets.GrassCoverErosionInwards.Service/GrassCoverErosionInwardsCalculationActivity.cs (.../GrassCoverErosionInwardsCalculationActivity.cs) (revision 6ccc539ce58e63f0e0fbff0da189c87b65146129) @@ -24,23 +24,21 @@ using Ringtoets.Common.Data.AssessmentSection; using Ringtoets.Common.Service; using Ringtoets.GrassCoverErosionInwards.Data; +using Ringtoets.HydraRing.Calculation.Activities; using Ringtoets.HydraRing.Calculation.Data.Output; -using Ringtoets.HydraRing.Calculation.Services; namespace Ringtoets.GrassCoverErosionInwards.Service { /// /// for running a grass cover erosion inwards calculation. /// - public class GrassCoverErosionInwardsCalculationActivity : Activity + public class GrassCoverErosionInwardsCalculationActivity : HydraRingActivity { private readonly GrassCoverErosionInwardsCalculation calculation; private readonly string hlcdDirectory; private readonly GrassCoverErosionInwardsFailureMechanism failureMechanism; private readonly IAssessmentSection assessmentSection; - private ExceedanceProbabilityCalculationOutput output; - public override string Name { get @@ -67,44 +65,26 @@ protected override void OnRun() { - if (!GrassCoverErosionInwardsCalculationService.Validate(calculation, assessmentSection)) - { - State = ActivityState.Failed; - return; - } - - LogMessages.Clear(); - calculation.ClearOutput(); - var failureMechanismSection = failureMechanism.Sections.First(); // TODO: Obtain dike section based on cross section of structure with reference line - output = GrassCoverErosionInwardsCalculationService.Calculate(calculation, - hlcdDirectory, - failureMechanismSection, - failureMechanismSection.Name, // TODO: Provide name of reference line instead - failureMechanism.GeneralInput); - - if (output == null) - { - State = ActivityState.Failed; - } + PerformRun(() => GrassCoverErosionInwardsCalculationService.Validate(calculation, assessmentSection), + () => calculation.ClearOutput(), + () => GrassCoverErosionInwardsCalculationService.Calculate(calculation, + hlcdDirectory, + failureMechanismSection, + failureMechanismSection.Name, // TODO: Provide name of reference line instead + failureMechanism.GeneralInput)); } - protected override void OnCancel() - { - HydraRingCalculationService.CancelRunningCalculation(); - } - protected override void OnFinish() { - if (State == ActivityState.Executed) + PerformFinish(() => { calculation.Output = ProbabilityAssessmentService.Calculate(assessmentSection.FailureMechanismContribution.Norm, failureMechanism.Contribution, failureMechanism.GeneralInput.N, - output.Beta); - calculation.NotifyObservers(); - } + Output.Beta); + }, calculation); } } } \ No newline at end of file Index: Ringtoets/GrassCoverErosionInwards/test/Ringtoets.GrassCoverErosionInwards.Integration.Test/GrassCoverErosionInwardsCalculationActivityIntegrationTest.cs =================================================================== diff -u -r0a51f20ac93373a43f79bb4c6327bce1d46545c6 -r6ccc539ce58e63f0e0fbff0da189c87b65146129 --- Ringtoets/GrassCoverErosionInwards/test/Ringtoets.GrassCoverErosionInwards.Integration.Test/GrassCoverErosionInwardsCalculationActivityIntegrationTest.cs (.../GrassCoverErosionInwardsCalculationActivityIntegrationTest.cs) (revision 0a51f20ac93373a43f79bb4c6327bce1d46545c6) +++ Ringtoets/GrassCoverErosionInwards/test/Ringtoets.GrassCoverErosionInwards.Integration.Test/GrassCoverErosionInwardsCalculationActivityIntegrationTest.cs (.../GrassCoverErosionInwardsCalculationActivityIntegrationTest.cs) (revision 6ccc539ce58e63f0e0fbff0da189c87b65146129) @@ -56,6 +56,12 @@ } var failureMechanism = new GrassCoverErosionInwardsFailureMechanism(); + failureMechanism.AddSection(new FailureMechanismSection("test section", new[] + { + new Point2D(0, 0), + new Point2D(1, 1) + })); + var calculation = new GrassCoverErosionInwardsCalculation(); var activity = new GrassCoverErosionInwardsCalculationActivity(calculation, "", failureMechanism, assessmentSection); @@ -88,6 +94,12 @@ }; var failureMechanism = new GrassCoverErosionInwardsFailureMechanism(); + failureMechanism.AddSection(new FailureMechanismSection("test section", new[] + { + new Point2D(0, 0), + new Point2D(1, 1) + })); + var calculation = new GrassCoverErosionInwardsCalculation(); var activity = new GrassCoverErosionInwardsCalculationActivity(calculation, "", failureMechanism, assessmentSection); Index: Ringtoets/GrassCoverErosionInwards/test/Ringtoets.GrassCoverErosionInwards.Service.Test/Ringtoets.GrassCoverErosionInwards.Service.Test.csproj =================================================================== diff -u -r0a51f20ac93373a43f79bb4c6327bce1d46545c6 -r6ccc539ce58e63f0e0fbff0da189c87b65146129 --- Ringtoets/GrassCoverErosionInwards/test/Ringtoets.GrassCoverErosionInwards.Service.Test/Ringtoets.GrassCoverErosionInwards.Service.Test.csproj (.../Ringtoets.GrassCoverErosionInwards.Service.Test.csproj) (revision 0a51f20ac93373a43f79bb4c6327bce1d46545c6) +++ Ringtoets/GrassCoverErosionInwards/test/Ringtoets.GrassCoverErosionInwards.Service.Test/Ringtoets.GrassCoverErosionInwards.Service.Test.csproj (.../Ringtoets.GrassCoverErosionInwards.Service.Test.csproj) (revision 6ccc539ce58e63f0e0fbff0da189c87b65146129) @@ -71,6 +71,10 @@ {d4200f43-3f72-4f42-af0a-8ced416a38ec} Ringtoets.Common.Data + + {888d4097-8bc2-4703-9fb1-8744c94d525e} + Ringtoets.HydraRing.Calculation + {70F8CC9C-5BC8-4FB2-B201-EAE7FA8088C2} Ringtoets.HydraRing.Data Index: Ringtoets/HeightStructures/src/Ringtoets.HeightStructures.Service/HeightStructuresCalculationActivity.cs =================================================================== diff -u -r0a51f20ac93373a43f79bb4c6327bce1d46545c6 -r6ccc539ce58e63f0e0fbff0da189c87b65146129 --- Ringtoets/HeightStructures/src/Ringtoets.HeightStructures.Service/HeightStructuresCalculationActivity.cs (.../HeightStructuresCalculationActivity.cs) (revision 0a51f20ac93373a43f79bb4c6327bce1d46545c6) +++ Ringtoets/HeightStructures/src/Ringtoets.HeightStructures.Service/HeightStructuresCalculationActivity.cs (.../HeightStructuresCalculationActivity.cs) (revision 6ccc539ce58e63f0e0fbff0da189c87b65146129) @@ -24,23 +24,21 @@ using Ringtoets.Common.Data.AssessmentSection; using Ringtoets.Common.Service; using Ringtoets.HeightStructures.Data; +using Ringtoets.HydraRing.Calculation.Activities; using Ringtoets.HydraRing.Calculation.Data.Output; -using Ringtoets.HydraRing.Calculation.Services; namespace Ringtoets.HeightStructures.Service { /// /// for running a height structures calculation. /// - public class HeightStructuresCalculationActivity : Activity + public class HeightStructuresCalculationActivity : HydraRingActivity { private readonly HeightStructuresCalculation calculation; private readonly string hlcdDirectory; private readonly HeightStructuresFailureMechanism failureMechanism; private readonly IAssessmentSection assessmentSection; - private ExceedanceProbabilityCalculationOutput output; - public override string Name { get @@ -67,44 +65,26 @@ protected override void OnRun() { - if (!HeightStructuresCalculationService.Validate(calculation, assessmentSection)) - { - State = ActivityState.Failed; - return; - } - - LogMessages.Clear(); - calculation.ClearOutput(); - var failureMechanismSection = failureMechanism.Sections.First(); // TODO: Obtain dike section based on cross section of structure with reference line - output = HeightStructuresCalculationService.Calculate(calculation, - hlcdDirectory, - failureMechanismSection, - failureMechanismSection.Name, // TODO: Provide name of reference line instead - failureMechanism.GeneralInput); - - if (output == null) - { - State = ActivityState.Failed; - } + PerformRun(() => HeightStructuresCalculationService.Validate(calculation, assessmentSection), + () => calculation.ClearOutput(), + () => HeightStructuresCalculationService.Calculate(calculation, + hlcdDirectory, + failureMechanismSection, + failureMechanismSection.Name, // TODO: Provide name of reference line instead + failureMechanism.GeneralInput)); } - protected override void OnCancel() - { - HydraRingCalculationService.CancelRunningCalculation(); - } - protected override void OnFinish() { - if (State == ActivityState.Executed) + PerformFinish(() => { calculation.Output = ProbabilityAssessmentService.Calculate(assessmentSection.FailureMechanismContribution.Norm, failureMechanism.Contribution, failureMechanism.GeneralInput.N, - output.Beta); - calculation.NotifyObservers(); - } + Output.Beta); + }, calculation); } } } \ No newline at end of file Index: Ringtoets/HeightStructures/test/Ringtoets.HeightStructures.Integration.Test/HeightStructuresCalculationActivityIntegrationTest.cs =================================================================== diff -u -r0a51f20ac93373a43f79bb4c6327bce1d46545c6 -r6ccc539ce58e63f0e0fbff0da189c87b65146129 --- Ringtoets/HeightStructures/test/Ringtoets.HeightStructures.Integration.Test/HeightStructuresCalculationActivityIntegrationTest.cs (.../HeightStructuresCalculationActivityIntegrationTest.cs) (revision 0a51f20ac93373a43f79bb4c6327bce1d46545c6) +++ Ringtoets/HeightStructures/test/Ringtoets.HeightStructures.Integration.Test/HeightStructuresCalculationActivityIntegrationTest.cs (.../HeightStructuresCalculationActivityIntegrationTest.cs) (revision 6ccc539ce58e63f0e0fbff0da189c87b65146129) @@ -56,6 +56,12 @@ } var failureMechanism = new HeightStructuresFailureMechanism(); + failureMechanism.AddSection(new FailureMechanismSection("test section", new[] + { + new Point2D(0, 0), + new Point2D(1, 1) + })); + var calculation = new HeightStructuresCalculation(); var activity = new HeightStructuresCalculationActivity(calculation, "", failureMechanism, assessmentSection); @@ -88,6 +94,12 @@ }; var failureMechanism = new HeightStructuresFailureMechanism(); + failureMechanism.AddSection(new FailureMechanismSection("test section", new[] + { + new Point2D(0, 0), + new Point2D(1, 1) + })); + var calculation = new HeightStructuresCalculation(); var activity = new HeightStructuresCalculationActivity(calculation, "", failureMechanism, assessmentSection); Fisheye: Tag 6ccc539ce58e63f0e0fbff0da189c87b65146129 refers to a dead (removed) revision in file `Ringtoets/HydraRing/src/Ringtoets.HydraRing.Calculation/Activities/ExceedanceProbabilityCalculationActivity.cs'. Fisheye: No comparison available. Pass `N' to diff? Index: Ringtoets/HydraRing/src/Ringtoets.HydraRing.Calculation/Activities/HydraRingActivity.cs =================================================================== diff -u -r636a79efa1f104b917c48d043151ada9fc4e69ac -r6ccc539ce58e63f0e0fbff0da189c87b65146129 --- Ringtoets/HydraRing/src/Ringtoets.HydraRing.Calculation/Activities/HydraRingActivity.cs (.../HydraRingActivity.cs) (revision 636a79efa1f104b917c48d043151ada9fc4e69ac) +++ Ringtoets/HydraRing/src/Ringtoets.HydraRing.Calculation/Activities/HydraRingActivity.cs (.../HydraRingActivity.cs) (revision 6ccc539ce58e63f0e0fbff0da189c87b65146129) @@ -20,32 +20,68 @@ // All rights reserved. using System; +using Core.Common.Base; using Core.Common.Base.Service; +using Ringtoets.HydraRing.Calculation.Services; namespace Ringtoets.HydraRing.Calculation.Activities { /// /// for running calculations via Hydra-Ring. /// - public abstract class HydraRingActivity : Activity + public abstract class HydraRingActivity : Activity { - private readonly Action beforeRunAction; + /// + /// The output of the activity. + /// + protected T Output; + protected abstract override void OnRun(); + + protected override void OnCancel() + { + HydraRingCalculationService.CancelRunningCalculation(); + } + + protected abstract override void OnFinish(); + /// - /// Creates a new instance of the class. + /// Template method for performing the run of the activity. /// - /// The action to perform before running a Hydra-Ring calculation (like clearing output, validation, etc.). - protected HydraRingActivity(Action beforeRunAction) + /// The method to perform for validation. + /// The method to perform for clearing the data of the output to set. + /// The method to perform for the calculation. + protected void PerformRun(Func validationFunc, Action clearAction, Func calculationFunc) { - this.beforeRunAction = beforeRunAction; + if (!validationFunc()) + { + State = ActivityState.Failed; + return; + } + + LogMessages.Clear(); + clearAction(); + + Output = calculationFunc(); + + if (Output == null) + { + State = ActivityState.Failed; + } } - protected override void OnRun() + /// + /// Template method for performing the finish of the activity. + /// + /// The method to set the output on the object. + /// The object to notify the observers upon. + protected void PerformFinish(Action setOutputAction, Observable observableObject) { - if (beforeRunAction != null) + if (State == ActivityState.Executed) { - beforeRunAction(); + setOutputAction(); + observableObject.NotifyObservers(); } } } -} +} \ No newline at end of file Fisheye: Tag 6ccc539ce58e63f0e0fbff0da189c87b65146129 refers to a dead (removed) revision in file `Ringtoets/HydraRing/src/Ringtoets.HydraRing.Calculation/Activities/HydraRingActivityFactory.cs'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag 6ccc539ce58e63f0e0fbff0da189c87b65146129 refers to a dead (removed) revision in file `Ringtoets/HydraRing/src/Ringtoets.HydraRing.Calculation/Activities/TargetProbabilityCalculationActivity.cs'. Fisheye: No comparison available. Pass `N' to diff? Index: Ringtoets/HydraRing/src/Ringtoets.HydraRing.Calculation/Ringtoets.HydraRing.Calculation.csproj =================================================================== diff -u -re568165b751acf8d72cdf0d128f76d7792dadb56 -r6ccc539ce58e63f0e0fbff0da189c87b65146129 --- Ringtoets/HydraRing/src/Ringtoets.HydraRing.Calculation/Ringtoets.HydraRing.Calculation.csproj (.../Ringtoets.HydraRing.Calculation.csproj) (revision e568165b751acf8d72cdf0d128f76d7792dadb56) +++ Ringtoets/HydraRing/src/Ringtoets.HydraRing.Calculation/Ringtoets.HydraRing.Calculation.csproj (.../Ringtoets.HydraRing.Calculation.csproj) (revision 6ccc539ce58e63f0e0fbff0da189c87b65146129) @@ -51,7 +51,6 @@ Properties\GlobalAssembly.cs - @@ -65,7 +64,6 @@ - @@ -96,7 +94,6 @@ - Fisheye: Tag 6ccc539ce58e63f0e0fbff0da189c87b65146129 refers to a dead (removed) revision in file `Ringtoets/HydraRing/test/Ringtoets.HydraRing.Calculation.Test/Activities/ExceedanceProbabilityCalculationActivityTest.cs'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag 6ccc539ce58e63f0e0fbff0da189c87b65146129 refers to a dead (removed) revision in file `Ringtoets/HydraRing/test/Ringtoets.HydraRing.Calculation.Test/Activities/HydraRingActivityFactoryTest.cs'. Fisheye: No comparison available. Pass `N' to diff? Index: Ringtoets/HydraRing/test/Ringtoets.HydraRing.Calculation.Test/Activities/HydraRingActivityTest.cs =================================================================== diff -u -r636a79efa1f104b917c48d043151ada9fc4e69ac -r6ccc539ce58e63f0e0fbff0da189c87b65146129 --- Ringtoets/HydraRing/test/Ringtoets.HydraRing.Calculation.Test/Activities/HydraRingActivityTest.cs (.../HydraRingActivityTest.cs) (revision 636a79efa1f104b917c48d043151ada9fc4e69ac) +++ Ringtoets/HydraRing/test/Ringtoets.HydraRing.Calculation.Test/Activities/HydraRingActivityTest.cs (.../HydraRingActivityTest.cs) (revision 6ccc539ce58e63f0e0fbff0da189c87b65146129) @@ -20,7 +20,10 @@ // All rights reserved. using System; +using Core.Common.Base; +using Core.Common.Base.Service; using NUnit.Framework; +using Rhino.Mocks; using Ringtoets.HydraRing.Calculation.Activities; namespace Ringtoets.HydraRing.Calculation.Test.Activities @@ -29,39 +32,139 @@ public class HydraRingActivityTest { [Test] - public void Run_BeforeRunActionSet_BeforeRunActionPerformed() + public void Run_ValidationFuncReturnsFalse_PerformsValidationAndStateFailed() { // Setup - var count = 0; - var hydraRingActivity = new TestHydraRingActivity(() => { count++; }); + TestHydraRingActivity activity = new TestHydraRingActivity(false, null); // Call - hydraRingActivity.Run(); + activity.Run(); // Assert - Assert.AreEqual(1, count); + Assert.AreEqual(ActivityState.Failed, activity.State); } [Test] - public void Run_BeforeRunActionNull_DoesNotThrow() + public void Run_ValidationFuncReturnsTrue_PerformsValidationAndCalculation() { // Setup - var hydraRingActivity = new TestHydraRingActivity(null); + TestHydraRingActivity activity = new TestHydraRingActivity(true, null); // Call - TestDelegate test = () => hydraRingActivity.Run(); + activity.Run(); // Assert - Assert.DoesNotThrow(test); + Assert.IsNaN(activity.Value); } - private class TestHydraRingActivity : HydraRingActivity + [Test] + public void Run_CalculationFuncReturnsNull_PerformsValidationAndCalculationAndStateFailed() { - public TestHydraRingActivity(Action beforeRunAction) : base(beforeRunAction) {} + // Setup + TestHydraRingActivity activity = new TestHydraRingActivity(true, () => null); - protected override void OnCancel() {} + // Call + activity.Run(); - protected override void OnFinish() {} + // Assert + Assert.AreEqual(ActivityState.Failed, activity.State); } + + [Test] + public void Run_CalculationFuncReturnsValue_PerformsValidationAndCalculationAndStateNotFailed() + { + // Setup + TestHydraRingActivity activity = new TestHydraRingActivity(true, () => 2.0); + + // Call + activity.Run(); + + // Assert + Assert.AreNotEqual(ActivityState.Failed, activity.State); + } + + [Test] + public void Finish_StateExecuted_SetsOutputAndNotifiesObservers() + { + // Setup + var mocks = new MockRepository(); + var observerMock = mocks.StrictMock(); + observerMock.Expect(o => o.UpdateObserver()); + mocks.ReplayAll(); + + Observable observableObject = new TestObservable(); + observableObject.Attach(observerMock); + + double newValue = 2.0; + TestHydraRingActivity activity = new TestHydraRingActivity(true, () => newValue, observableObject); + + activity.Run(); + + // Call + activity.Finish(); + + // Assert + Assert.AreEqual(newValue, activity.Value); + mocks.VerifyAll(); + } + + [Test] + public void Finish_OutputNull_DoesNotSetOutputAndDoesNotNotifyObservers() + { + // Setup + var mocks = new MockRepository(); + var observerMock = mocks.StrictMock(); + mocks.ReplayAll(); + + Observable observableObject = new TestObservable(); + observableObject.Attach(observerMock); + + double newValue = 2.0; + TestHydraRingActivity activity = new TestHydraRingActivity(true, () => null, observableObject); + + activity.Run(); + + // Call + activity.Finish(); + + // Assert + Assert.IsNaN(activity.Value); + mocks.VerifyAll(); + } + + private class TestHydraRingActivity : HydraRingActivity + { + private readonly bool valid; + private readonly Func calculationFunc; + private readonly Observable observableObject; + private double value = 3.0; + + public TestHydraRingActivity(bool valid, Func calculationFunc, Observable observableObject = null) + { + this.valid = valid; + this.calculationFunc = calculationFunc; + this.observableObject = observableObject; + } + + public double Value + { + get + { + return value; + } + } + + protected override void OnRun() + { + PerformRun(() => valid, () => value = double.NaN, calculationFunc); + } + + protected override void OnFinish() + { + PerformFinish(() => value = (double)Output, observableObject); + } + } + + private class TestObservable : Observable {} } } \ No newline at end of file Fisheye: Tag 6ccc539ce58e63f0e0fbff0da189c87b65146129 refers to a dead (removed) revision in file `Ringtoets/HydraRing/test/Ringtoets.HydraRing.Calculation.Test/Activities/TargetProbabilityCalculationActivityTest.cs'. Fisheye: No comparison available. Pass `N' to diff? Index: Ringtoets/HydraRing/test/Ringtoets.HydraRing.Calculation.Test/Ringtoets.HydraRing.Calculation.Test.csproj =================================================================== diff -u -re568165b751acf8d72cdf0d128f76d7792dadb56 -r6ccc539ce58e63f0e0fbff0da189c87b65146129 --- Ringtoets/HydraRing/test/Ringtoets.HydraRing.Calculation.Test/Ringtoets.HydraRing.Calculation.Test.csproj (.../Ringtoets.HydraRing.Calculation.Test.csproj) (revision e568165b751acf8d72cdf0d128f76d7792dadb56) +++ Ringtoets/HydraRing/test/Ringtoets.HydraRing.Calculation.Test/Ringtoets.HydraRing.Calculation.Test.csproj (.../Ringtoets.HydraRing.Calculation.Test.csproj) (revision 6ccc539ce58e63f0e0fbff0da189c87b65146129) @@ -59,8 +59,6 @@ - - @@ -99,7 +97,6 @@ - Index: Ringtoets/Integration/src/Ringtoets.Integration.Service/DesignWaterLevelCalculationActivity.cs =================================================================== diff -u -r0a51f20ac93373a43f79bb4c6327bce1d46545c6 -r6ccc539ce58e63f0e0fbff0da189c87b65146129 --- Ringtoets/Integration/src/Ringtoets.Integration.Service/DesignWaterLevelCalculationActivity.cs (.../DesignWaterLevelCalculationActivity.cs) (revision 0a51f20ac93373a43f79bb4c6327bce1d46545c6) +++ Ringtoets/Integration/src/Ringtoets.Integration.Service/DesignWaterLevelCalculationActivity.cs (.../DesignWaterLevelCalculationActivity.cs) (revision 6ccc539ce58e63f0e0fbff0da189c87b65146129) @@ -21,8 +21,8 @@ using Core.Common.Base.Service; using Ringtoets.Common.Data.AssessmentSection; +using Ringtoets.HydraRing.Calculation.Activities; using Ringtoets.HydraRing.Calculation.Data.Output; -using Ringtoets.HydraRing.Calculation.Services; using Ringtoets.HydraRing.Data; using Ringtoets.Integration.Service.Properties; @@ -31,11 +31,10 @@ /// /// for running a design water level calculation. /// - public class DesignWaterLevelCalculationActivity : Activity + public class DesignWaterLevelCalculationActivity : HydraRingActivity { private readonly IAssessmentSection assessmentSection; private readonly HydraulicBoundaryLocation hydraulicBoundaryLocation; - private TargetProbabilityCalculationOutput output; public override string Name { @@ -58,38 +57,17 @@ protected override void OnRun() { - if (!DesignWaterLevelCalculationService.Validate(assessmentSection.HydraulicBoundaryDatabase, hydraulicBoundaryLocation)) - { - State = ActivityState.Failed; - return; - } - - LogMessages.Clear(); - hydraulicBoundaryLocation.DesignWaterLevel = double.NaN; - - output = DesignWaterLevelCalculationService.Calculate(assessmentSection, - assessmentSection.HydraulicBoundaryDatabase, - hydraulicBoundaryLocation, - assessmentSection.Name); // TODO: Provide name of reference line instead - - if (output == null) - { - State = ActivityState.Failed; - } + PerformRun(() => DesignWaterLevelCalculationService.Validate(assessmentSection.HydraulicBoundaryDatabase, hydraulicBoundaryLocation), + () => hydraulicBoundaryLocation.DesignWaterLevel = double.NaN, + () => DesignWaterLevelCalculationService.Calculate(assessmentSection, + assessmentSection.HydraulicBoundaryDatabase, + hydraulicBoundaryLocation, + assessmentSection.Name)); // TODO: Provide name of reference line instead } - protected override void OnCancel() - { - HydraRingCalculationService.CancelRunningCalculation(); - } - protected override void OnFinish() { - if (State == ActivityState.Executed) - { - hydraulicBoundaryLocation.DesignWaterLevel = output.Result; - hydraulicBoundaryLocation.NotifyObservers(); - } + PerformFinish(() => hydraulicBoundaryLocation.DesignWaterLevel = Output.Result, hydraulicBoundaryLocation); } } }