public ProcessDefinitionConfig getProcessDefinition() { return processInstance != null ? processInstance.getDefinition() : null; }
public <T extends ProcessInstanceAttribute> T findAttributeByClass(Class<T> clazz) { Set<ProcessInstanceAttribute> attrs = getProcessAttributes(); for (ProcessInstanceAttribute pia : attrs) { if (clazz.isAssignableFrom(pia.getClass())) { return (T) pia; } } return null; }
@Override public String transform(ProcessInstance obj) { return obj.getInternalId(); } });
@Override public ProcessInstance transform(Object[] row) { ProcessInstance pi = new ProcessInstance(); pi.setId((Long) row[0]); pi.setInternalId((String) row[1]); return pi; } });
/** Method checks if the process is in running or new state */ public boolean isProcessRunning() { if(getStatus() == null) return false; if(getRunning() != null && !getRunning()) return false; return getStatus().equals(ProcessStatus.NEW) || getStatus().equals(ProcessStatus.RUNNING); }
public <T extends ProcessInstanceAttribute> T findOrCreateAttribute(Class<T> attrClass) { T attribute = findAttributeByClass(attrClass); if(attribute == null) { try { attribute = attrClass.newInstance(); addAttribute(attribute); } catch (InstantiationException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } } return attribute; }
public long saveProcessInstance(ProcessInstance processInstance) { UserData creator = processInstance.getCreator(); if (creator != null) { if (creator.getId() != null) { processInstance.setCreator((UserData) session.get(UserData.class, creator.getId())); } else { List users = session.createCriteria(UserData.class) session.saveOrUpdate(creator); } else { processInstance.setCreator((UserData) users.get(0)); if (processInstance.getToDelete() != null) { for (Object o : processInstance.getToDelete()) { session.delete(o); Set<ProcessInstanceAttribute> procAttrib = processInstance.getProcessAttributes(); for (ProcessInstanceAttribute attrib:procAttrib){ if (attrib instanceof ProcessInstanceAttachmentAttribute && attrib.getId()!=null){ ProcessInstanceSearchData searchData = new ProcessInstanceSearchData(processInstance.getId()); {"instance_key", processInstance.getExternalKey()}, {"definition_name", processInstance.getDefinitionName()}, {"instance_description", processInstance.getDescription()}, {"instance_internal_id", processInstance.getInternalId()}, {"instance_keyword", processInstance.getKeyword()}, {"instance_state", processInstance.getState()},//TODO remember about multiple states (when BpmTask is merged) {"instance_create_date", formatShortDate(processInstance.getCreateDate())}, });
@Override public void updateContext(ProcessInstance processInstance) { RuntimeService es = getProcessEngine().getRuntimeService(); for (ProcessInstanceAttribute pia : processInstance.getProcessAttributes()) { if (pia instanceof BpmVariable) { BpmVariable bpmVar = (BpmVariable) pia; if (hasText(bpmVar.getBpmVariableName())) { es.setVariable(processInstance.getInternalId(), bpmVar.getBpmVariableName(), bpmVar.getBpmVariableValue()); } } } }
private void saveComment() { if (skipAddingComment) { return; } ProcessToolContext ctx = getCurrentContext(); ProcessComment pc = dialog.getProcessComment(); pc.setAuthor(ctx.getUserDataDAO().loadOrCreateUserByLogin(loggedUser)); pc.setAuthorSubstitute(substitutingUser != null ? ctx.getUserDataDAO().loadOrCreateUserByLogin(substitutingUser) : null); pc.setCreateTime(new Date()); pc.setProcessState(task.getTaskName()); ProcessInstance pi = task.getProcessInstance().getRootProcessInstance(); ProcessComments comments = pi.findAttributeByClass(ProcessComments.class); if (comments == null) { comments = new ProcessComments(); comments.setProcessInstance(pi); comments.setKey(ProcessComments.class.getName()); pi.getProcessAttributes().add(comments); } comments.getComments().add(pc); pc.setComments(comments); pi.setSimpleAttribute("commentAdded", "true"); } }
protected ProcessInstance startProcessInstance(ProcessDefinitionConfig config, String externalKey, ProcessToolContext ctx, ProcessInstance pi) { ProcessEngine processEngine = getProcessEngine(); final RuntimeService execService = processEngine.getRuntimeService(); Map vars = new HashMap(); vars.put("processInstanceId", String.valueOf(pi.getId())); vars.put("initiator", user.getLogin()); for (ProcessInstanceAttribute pia : pi.getProcessAttributes()) { if (pia instanceof BpmVariable) { BpmVariable bpmVar = (BpmVariable) pia; if (hasText(bpmVar.getBpmVariableName())) { vars.put(bpmVar.getBpmVariableName(), bpmVar.getBpmVariableValue()); } } } org.activiti.engine.runtime.ProcessInstance instance = execService .startProcessInstanceByKey(config.getBpmDefinitionKey(), externalKey, vars); pi.setInternalId(instance.getId()); fillProcessAssignmentData(pi, ctx); return pi; }
IAttributesProvider attributesProvider = widgetHierarchyBean.getAttributesProvider(); if (attributesProvider != null && attributesProvider.getProcessInstance() != null) { Hibernate.initialize(attributesProvider.getProcessInstance().getProcessAttributes()); Hibernate.initialize(attributesProvider.getProcessInstance().getProcessSimpleAttributes()); Hibernate.initialize(attributesProvider.getProcessInstance().getRootProcessInstance()); String processStateConfigurationId = attributesProvider.getProcessInstance().getRootProcessInstance().getSimpleAttributeValue(attributeName); .setParent(divContentNode) .setWidget(childWidget) .setAttributesProvider(attributesProvider.getProcessInstance().getRootProcessInstance()) .setForcePrivileges(forcePrivileges) .setPrivileges(getPrivileges(widget));
@Override public void saveData(BpmTask task) { ProcessInstance pi = task.getProcessInstance().getRootProcessInstance(); ProcessComments comments = pi.findAttributeByClass(ProcessComments.class); if (comments == null) { comments = new ProcessComments(); comments.setProcessInstance(pi); comments.setKey(ProcessComments.class.getName()); pi.getProcessAttributes().add(comments); } comments.setComments(new HashSet()); for (ProcessComment pc : bic.getItemIds()) { comments.getComments().add(pc); pc.setComments(comments); } }
private BpmTask performAction(ProcessStateAction action, ProcessInstance processInstance, ProcessToolContext ctx, Task task) { processInstance = getProcessData(processInstance.getInternalId(), ctx); addActionLogEntry(action, processInstance, ctx); ctx.getProcessInstanceDAO().saveProcessInstance(processInstance); ProcessEngine processEngine = getProcessEngine(); Map<String,Object> variables = new HashMap<String, Object>(); variables.put("ACTION",action.getBpmName()); processEngine.getTaskService().complete(task.getId(), variables); updateSubprocess(processInstance, ctx); String s = getProcessState(processInstance, ctx); fillProcessAssignmentData(processInstance, ctx); processInstance.setState(s); if (s == null && processInstance.getRunning() && !isProcessRunning(processInstance.getInternalId(), ctx)) { processInstance.setRunning(false); } ctx.getProcessInstanceDAO().saveProcessInstance(processInstance); publishEvents(processInstance, processInstance.getRunning() ? BpmEvent.Type.SIGNAL_PROCESS : BpmEvent.Type.END_PROCESS); return collectTask(findProcessTask(processInstance, ctx), processInstance, ctx); }
@Override public List<ProcessStateAction> processWithContext(ProcessToolContext ctx) { final ProcessDefinitionConfig definition = processData.getDefinition(); String state = processData.getState(); if(state==null || state.isEmpty()){//TODO its for compatibility with 1.X aperte data. In future its should be removed if(processData.getStatus().equals(ProcessStatus.NEW)){ List<BpmTask> bpmTasks = getSession(ctx).findProcessTasks(processData, ctx); state=bpmTasks.get(0).getTaskName(); } } List<ProcessStateAction> actionsBasedOnStatus = ctx.getProcessStateActionDAO().getActionsBasedOnStateAndDefinitionId(state, definition.getId()); return actionsBasedOnStatus; } });
protected List<ProcessDefinitionConfig> upToRootInstance(ProcessInstance processInstance) { List<ProcessDefinitionConfig> definitions = new ArrayList<ProcessDefinitionConfig>(); while (processInstance != null) { Hibernate.initialize(processInstance.getDefinition()); definitions.add(processInstance.getDefinition()); processInstance = processInstance.getParent(); } return definitions; }
@Override public void adminReassignProcessTask(ProcessInstance pi, BpmTask bpmTask, String userLogin) { log.severe("User: " + user.getLogin() + " attempting to reassign task " + bpmTask.getInternalTaskId() + " for process: " + pi.getInternalId() + " to user: " + userLogin); ProcessToolContext ctx = ProcessToolContext.Util.getThreadProcessToolContext(); pi = getProcessData(pi.getInternalId(), ctx); ProcessEngine processEngine = getProcessEngine(); TaskService ts = processEngine.getTaskService(); Task task = ts.createTaskQuery().taskId(bpmTask.getInternalTaskId()).singleResult(); if (nvl(userLogin, "").equals(nvl(task.getAssignee(), ""))) { log.severe("User: " + user.getLogin() + " has not reassigned task " + bpmTask.getInternalTaskId() + " for process: " + pi.getInternalId() + " as the user is the same: " + userLogin); return; } //this call should also take care of swimlanes ts.setAssignee(bpmTask.getInternalTaskId(), userLogin); fillProcessAssignmentData(pi, ctx); log.info("Process.running:" + pi.getRunning()); ctx.getProcessInstanceDAO().saveProcessInstance(pi); log.severe("User: " + user.getLogin() + " has reassigned task " + bpmTask.getInternalTaskId() + " for process: " + pi.getInternalId() + " to user: " + userLogin); }
@Override public void adminCancelProcessInstance(ProcessInstance pi) { log.severe("User: " + user.getLogin() + " attempting to cancel process: " + pi.getInternalId()); ProcessToolContext ctx = ProcessToolContext.Util.getThreadProcessToolContext(); pi = getProcessData(pi.getInternalId(), ctx); ProcessEngine processEngine = getProcessEngine(); processEngine.getRuntimeService().deleteProcessInstance(pi.getInternalId(), "admin-cancelled"); fillProcessAssignmentData(pi, ctx); pi.setRunning(false); pi.setState(null); ctx.getProcessInstanceDAO().saveProcessInstance(pi); log.severe("User: " + user.getLogin() + " has cancelled process: " + pi.getInternalId()); }
@Override public void loadData(BpmTask task) { ProcessInstance pi = task.getProcessInstance().getRootProcessInstance(); if (mode.equalsIgnoreCase(MODE_SMART)) { if (!"true".equalsIgnoreCase(pi.getSimpleAttributeValue("commentAdded", "false"))) { showContent = false; } } bic.removeAllItems(); ProcessComments comments = pi.findAttributeByClass(ProcessComments.class); if (comments != null) { List<ProcessComment> lst = new ArrayList<ProcessComment>(comments.getComments()); Collections.sort(lst, new Comparator<ProcessComment>() { @Override public int compare(ProcessComment o1, ProcessComment o2) { return o2.getCreateTime().compareTo(o1.getCreateTime()); } }); for (int i = 0; i < displayedComments && i < lst.size(); ++i) { bic.addBean(lst.get(i)); } } }
ProcessInstance pi = task.getProcessInstance(); processAttributes.clear(); for (ProcessInstanceAttribute attribute : pi.getProcessAttributes()) { processAttributes.put(attribute.getKey(), attribute); pi.setProcessAttributes(new HashSet<ProcessInstanceAttribute>(processAttributes.values()));
@Override public void onQueueAssigne(MutableBpmTask bpmTask) { Long processId = bpmTask.getProcessInstance().getId(); String taskIdString = bpmTask.getInternalTaskId(); /* There is at least one owner - creator by default */ for(String ownerLogin: bpmTask.getProcessInstance().getOwners()) updateUserProcessQueue(taskIdString, processId, ownerLogin, QueueType.OWN_IN_QUEUE); }