package org.signalml.plugin.method.logic; import org.signalml.method.ComputationException; import org.signalml.plugin.data.logic.PluginComputationMgrStepResult; import org.signalml.plugin.exception.PluginToolAbortException; import org.signalml.plugin.exception.PluginToolInterruptedException; public abstract class AbstractPluginComputationMgrStep<Data extends PluginComputationMgrStepData<?>> implements IPluginComputationMgrStep { protected final Data data; public AbstractPluginComputationMgrStep(Data data) { this.data = data; } @Override public PluginComputationMgrStepResult run( PluginComputationMgrStepResult prevStepResult) throws ComputationException, PluginToolInterruptedException, PluginToolAbortException { try { return this.doRun(prevStepResult); } finally { this.cleanup(); } } @Override public void initialize() throws ComputationException { try { this.doInitialize(); } catch (Exception e) { this.cleanup(); throw new ComputationException("Error in step initialization", e); } } protected abstract PluginComputationMgrStepResult prepareStepResult(); protected void doInitialize() { } protected abstract PluginComputationMgrStepResult doRun( PluginComputationMgrStepResult prevStepResult) throws PluginToolAbortException, PluginToolInterruptedException, ComputationException; protected void cleanup() { } protected void checkAbortState() throws PluginToolAbortException, PluginToolInterruptedException { if (this.data.tracker.isRequestingAbort()) { throw new PluginToolAbortException(); } if (this.data.tracker.isInterrupted()) { throw new PluginToolInterruptedException(); } } }