package com.mossle.bpm.listener; import java.util.List; import javax.annotation.Resource; import com.mossle.bpm.persistence.domain.BpmConfUser; import com.mossle.bpm.persistence.manager.BpmConfUserManager; import com.mossle.bpm.support.DefaultTaskListener; import org.activiti.engine.delegate.DelegateTask; import org.activiti.engine.impl.context.Context; import org.activiti.engine.impl.el.ExpressionManager; import org.slf4j.Logger; import org.slf4j.LoggerFactory; public class ConfUserTaskListener extends DefaultTaskListener { private static Logger logger = LoggerFactory .getLogger(ConfUserTaskListener.class); private BpmConfUserManager bpmConfUserManager; @Override public void onCreate(DelegateTask delegateTask) throws Exception { List<BpmConfUser> bpmConfUsers = bpmConfUserManager .find("from BpmConfUser where bpmConfNode.bpmConfBase.processDefinitionId=? and bpmConfNode.code=?", delegateTask.getProcessDefinitionId(), delegateTask .getExecution().getCurrentActivityId()); logger.debug("{}", bpmConfUsers); ExpressionManager expressionManager = Context .getProcessEngineConfiguration().getExpressionManager(); try { for (BpmConfUser bpmConfUser : bpmConfUsers) { logger.debug("status : {}, type: {}", bpmConfUser.getStatus(), bpmConfUser.getType()); logger.debug("value : {}", bpmConfUser.getValue()); String value = expressionManager .createExpression(bpmConfUser.getValue()) .getValue(delegateTask).toString(); if (bpmConfUser.getStatus() == 1) { if (bpmConfUser.getType() == 0) { delegateTask.setAssignee(value); } else if (bpmConfUser.getType() == 1) { delegateTask.addCandidateUser(value); } else if (bpmConfUser.getType() == 2) { delegateTask.addCandidateGroup(value); } } else if (bpmConfUser.getStatus() == 2) { if (bpmConfUser.getType() == 0) { if (delegateTask.getAssignee().equals(value)) { delegateTask.setAssignee(null); } } else if (bpmConfUser.getType() == 1) { delegateTask.deleteCandidateUser(value); } else if (bpmConfUser.getType() == 2) { delegateTask.deleteCandidateGroup(value); } } } } catch (Exception ex) { logger.debug(ex.getMessage(), ex); } } @Resource public void setBpmConfUserManager(BpmConfUserManager bpmConfUserManager) { this.bpmConfUserManager = bpmConfUserManager; } }