package ee.telekom.workflow.graph.node.activity; import ee.telekom.workflow.graph.Environment; import ee.telekom.workflow.graph.GraphEngine; import ee.telekom.workflow.graph.GraphInstance; import ee.telekom.workflow.graph.Token; import ee.telekom.workflow.graph.node.AbstractNode; import ee.telekom.workflow.graph.node.input.ArrayMapping; import ee.telekom.workflow.graph.node.input.InputMapping; import ee.telekom.workflow.graph.node.output.OutputMapping; /** * Activity, pausing execution until a task (call of method on a bean with given name) has been completed. * The task is executed asynchronously by an external system. */ public class BeanAsyncCallActivity extends AbstractNode{ private String bean; private String method; private ArrayMapping argumentsMapping; private OutputMapping resultMapping; public BeanAsyncCallActivity( int id, String bean, String method, InputMapping<?>[] argumentsMappings, OutputMapping resultMapping ){ this( id, null, bean, method, argumentsMappings, resultMapping ); } public BeanAsyncCallActivity( int id, String name, String bean, String method, InputMapping<?>[] argumentsMappings, OutputMapping resultMapping ){ super( id, name ); this.bean = bean; this.method = method; this.argumentsMapping = new ArrayMapping( argumentsMappings ); this.resultMapping = resultMapping; } public String getBean(){ return bean; } public String getMethod(){ return method; } public ArrayMapping getArgumentsMapping(){ return argumentsMapping; } public OutputMapping getResultMapping(){ return resultMapping; } @Override public void execute( GraphEngine engine, Token token ){ GraphInstance instance = token.getInstance(); Object[] arguments = argumentsMapping.evaluate( instance ); engine.addTaskItem( instance, token, bean, method, arguments ); } @Override public void cancel( GraphEngine engine, Token token ){ engine.cancelWorkItem( token ); } @Override public void store( Environment environment, Object result ){ if( resultMapping != null ){ resultMapping.map( environment, result ); } } }