// Copyright (C) Stichting Deltares 2016. All rights reserved. // // This file is part of Ringtoets. // // Ringtoets 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 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 { /// /// The output of the calculation. /// protected T Output; protected abstract override void OnRun(); protected override void OnCancel() { HydraRingCalculationService.CancelRunningCalculation(); } protected abstract override void OnFinish(); /// /// Method for performing the run of the activity. The calculation will be validated /// and after the validation is successful, the will be performed. /// After that the calculation will be performed. Error and status information is logged during /// the execution of the operation. /// /// 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) { if (!validationFunc()) { State = ActivityState.Failed; return; } LogMessages.Clear(); clearAction(); Output = calculationFunc(); if (Output == null) { State = ActivityState.Failed; } } /// /// Method for performing the finish of the activity. If the calculation is successful /// executed, the output will be set on the calculation. After that the observers of /// will be notified. /// /// The method to set the output on the object. /// The object to notify the observers upon. protected void PerformFinish(Action setOutputAction, IObservable observableObject) { if (State == ActivityState.Executed) { setOutputAction(); } observableObject.NotifyObservers(); } } }