package org.joget.workflow.shark;
import java.util.ArrayList;
import java.util.Collection;
import org.joget.commons.util.LogUtil;
import org.joget.workflow.model.WorkflowProcess;
import org.joget.workflow.model.service.WorkflowManager;
import org.joget.workflow.util.WorkflowUtil;
import java.util.List;
import java.util.Set;
import org.enhydra.shark.api.client.wfmc.wapi.WMSessionHandle;
import org.enhydra.shark.api.internal.assignment.PerformerData;
import org.enhydra.shark.assignment.HistoryRelatedAssignmentManager;
import org.joget.workflow.model.service.WorkflowUserManager;
import org.springframework.context.ApplicationContext;
public class WorkflowAssignmentManager extends HistoryRelatedAssignmentManager {
@Override
public List<String> getDefaultAssignments(WMSessionHandle shandle, String instanceId,
String actId, String processRequesterId,
PerformerData xpdlParticipant, List xpdlResponsibleParticipants)
throws Exception {
//initialization
ApplicationContext appContext = WorkflowUtil.getApplicationContext();
WorkflowManager workflowManager = (WorkflowManager) appContext.getBean("workflowManager");
String actDefId = actId.substring(actId.indexOf(instanceId) + instanceId.length() + 1);
List<String> migrationUser = workflowManager.getMigrationAssignmentUserList(instanceId, actDefId);
if (migrationUser != null) {
return migrationUser;
}
String procDefId = workflowManager.getProcessDefIdByInstanceId(instanceId);
WorkflowProcess process = workflowManager.getProcess(procDefId);
String currentUsername = (String) shandle.getVendorData();
if (currentUsername.equals(WorkflowUserManager.ROLE_ANONYMOUS)) {
currentUsername = processRequesterId;
}
String[] temp = procDefId.split("#");
String version = temp[1];
List<String> resultList = WorkflowUtil.getAssignmentUsers(process.getPackageId(), procDefId, instanceId, version, actId, currentUsername, xpdlParticipant.participantIdOrExpression);
if (resultList == null || resultList.isEmpty()) {
resultList = super.getDefaultAssignments(shandle, procDefId, actId, currentUsername, xpdlParticipant, xpdlResponsibleParticipants);
}
LogUtil.info(getClass().getName(), "[processId=" + instanceId + ", processDefId=" + procDefId + ", participantId=" + xpdlParticipant.participantIdOrExpression + ", next user=" + resultList + "]");
Collection<Class> paramTypes = new ArrayList<Class>();
Collection<Object> args = new ArrayList<Object>();
paramTypes.add(String.class);
args.add(instanceId);//process instance id
paramTypes.add(String.class);
args.add(actId);//activity instance id
paramTypes.add(WorkflowProcess.class);
args.add(process); //process object
//write to audit trail
WorkflowUtil.addAuditTrail(this.getClass().getName(), "getDefaultAssignments", actId, paramTypes.toArray(new Class[]{}), args.toArray(), resultList);
return resultList;
}
@Override
protected Set findResources(WMSessionHandle shandle, PerformerData p) throws Exception {
return super.findResources(shandle, p);
}
}