package hu.sztaki.ilab.longneck.process.kernel; import hu.sztaki.ilab.longneck.Record; import hu.sztaki.ilab.longneck.process.FrameAddress; /** * * @author Lukacs Gabor <lukacsg@sztaki.mta.hu> */ public class SwitchControl implements StartHandler, SuccessHandler, ErrorHandler { public SwitchControl() { } @Override public void beforeChildren(KernelState kernelState, Record record) { record.saveState(); } @Override public void onSuccess(KernelState kernelState, Record record) throws RedirectException { // Clean exit record.removeState(); // Jump to next frame throw new RedirectException(FrameAddress.RETURN); } @Override public void onError(KernelState kernelState, Record record) { // Roll back changes record.restoreState(); record.saveState(); // Clear error kernelState.clearError(); } @Override public SwitchControl clone() { try { return (SwitchControl) super.clone(); } catch (CloneNotSupportedException ex) { throw new AssertionError(ex); } } }