package demo.action;
import java.util.List;
import org.activiti.engine.ActivitiException;
import org.activiti.engine.delegate.DelegateTask;
import org.activiti.engine.delegate.ExecutionListener;
import org.activiti.engine.delegate.TaskListener;
import org.activiti.engine.impl.bpmn.parser.FieldDeclaration;
import org.activiti.engine.impl.context.Context;
import org.activiti.engine.impl.delegate.TaskListenerInvocation;
import org.activiti.engine.impl.util.ReflectUtil;
public class DemoClass implements TaskListener {
protected ExecutionListener executionListenerInstance;
protected TaskListener taskListenerInstance;
protected String className;
protected List<FieldDeclaration> fieldDeclarations;
/**
*
*/
private static final long serialVersionUID = 1L;
/**
* @see org.activiti.engine.delegate.TaskListener#notify(org.activiti.engine.delegate.DelegateTask)
*/
public DemoClass(String className, List<FieldDeclaration> fieldDeclarations) {
this.className = className;
this.fieldDeclarations = fieldDeclarations;
}
public DemoClass(Class<?> clazz, List<FieldDeclaration> fieldDeclarations) {
this(clazz.getName(), fieldDeclarations);
}
@Override
public void notify(DelegateTask delegateTask) {
System.out.println("in notify");
delegateTask.setVariable("input", 0);
if (taskListenerInstance == null) {
taskListenerInstance = getTaskListenerInstance();
}
try {
Context.getProcessEngineConfiguration()
.getDelegateInterceptor()
.handleInvocation(
new TaskListenerInvocation(taskListenerInstance,
delegateTask));
} catch (Exception e) {
throw new ActivitiException(
"Exception while invoking TaskListener: " + e.getMessage(),
e);
}
}
private TaskListener getTaskListenerInstance() {
Object delegateInstance = instantiateDelegate(className,
fieldDeclarations);
if (delegateInstance instanceof TaskListener) {
return (TaskListener) delegateInstance;
} else {
throw new ActivitiException(delegateInstance.getClass().getName()
+ " doesn't implement " + TaskListener.class);
}
}
public static Object instantiateDelegate(String className,
List<FieldDeclaration> fieldDeclarations) {
Object object = ReflectUtil.instantiate(className);
System.out.println("object");
// applyFieldDeclaration(fieldDeclarations, object);
return object;
}
public void setLookupField(String str) {
System.out.println("in lookup");
// str.getVariable("input");
String.valueOf(0);
}
}