All Downloads are FREE. Search and download functionalities are using the official Maven repository.

astra.statement.TryRecover Maven / Gradle / Ivy

package astra.statement;

import astra.core.Intention;

public class TryRecover extends AbstractStatement {
	Statement tryStatement, recoverStatement;
	
	public TryRecover(String clazz, int[] data, Statement ifStatement, Statement elseStatement) {
		this.setLocation(clazz, data[0], data[1], data[2], data[3]);
		this.tryStatement = ifStatement;
		this.recoverStatement = elseStatement;
	}
	
	@Override
	public StatementHandler getStatementHandler() {
		return new AbstractStatementHandler() {
			int state = 0;
			@Override
			public boolean execute(Intention intention) {
				switch(state) {
				case 0:
					executor.addStatement(tryStatement.getStatementHandler());
					state = 2;
					break;
				case 1:
					executor.addStatement(recoverStatement.getStatementHandler());
					state = 3;
					break;
				case 2:
				case 3:
					return false;
				}
				
				return true;
			}

			@Override
			public boolean onFail(Intention context) {
				// Failure in try - switch to recovery plan
				if (state == 2) {
					state = 1;
					return true;
				}
				
				// This reflects failure of the recovery plan
				if (state == 3) return false;
				
				// default return value - failure handled here...
				return true;
			}

			@Override
			public Statement statement() {
				return TryRecover.this;
			}
			
		};
	}

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy