mirror of
https://github.com/Alfresco/alfresco-community-repo.git
synced 2025-08-07 17:49:17 +00:00
Workflow checkpoint.
git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@3399 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261
This commit is contained in:
420
source/java/org/jbpm/webapp/bean/ProcessInstanceBean.java
Normal file
420
source/java/org/jbpm/webapp/bean/ProcessInstanceBean.java
Normal file
@@ -0,0 +1,420 @@
|
||||
/*
|
||||
* JBoss, Home of Professional Open Source
|
||||
* Copyright 2005, JBoss Inc., and individual contributors as indicated
|
||||
* by the @authors tag. See the copyright.txt in the distribution for a
|
||||
* full listing of individual contributors.
|
||||
*
|
||||
* This is free software; you can redistribute it and/or modify it
|
||||
* under the terms of the GNU Lesser General Public License as
|
||||
* published by the Free Software Foundation; either version 2.1 of
|
||||
* the License, or (at your option) any later version.
|
||||
*
|
||||
* This software is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with this software; if not, write to the Free
|
||||
* Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
|
||||
* 02110-1301 USA, or see the FSF site: http://www.fsf.org.
|
||||
*/
|
||||
package org.jbpm.webapp.bean;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Date;
|
||||
import java.util.Iterator;
|
||||
import java.util.Map.Entry;
|
||||
|
||||
import javax.faces.context.FacesContext;
|
||||
|
||||
import org.jbpm.JbpmContext;
|
||||
import org.jbpm.db.GraphSession;
|
||||
import org.jbpm.db.TaskMgmtSession;
|
||||
import org.jbpm.graph.def.Transition;
|
||||
import org.jbpm.graph.exe.ProcessInstance;
|
||||
import org.jbpm.graph.exe.Token;
|
||||
import org.jbpm.taskmgmt.exe.TaskInstance;
|
||||
|
||||
/**
|
||||
* Process Instance Bean Implementation.
|
||||
*
|
||||
* @author David Loiseau
|
||||
*/
|
||||
|
||||
public class ProcessInstanceBean {
|
||||
|
||||
long id;
|
||||
String processDefinitionLabel;
|
||||
long processDefinitionId;
|
||||
Date start;
|
||||
Date end;
|
||||
|
||||
ArrayList tokens;
|
||||
ArrayList variables;
|
||||
ArrayList tasks;
|
||||
ArrayList transitions;
|
||||
|
||||
String variableName;
|
||||
String variableValue;
|
||||
|
||||
long tokenInstanceId;
|
||||
long taskInstanceId;
|
||||
|
||||
public ProcessInstanceBean(long id, Date start, Date end) {
|
||||
this.id = id;
|
||||
this.start = start;
|
||||
this.end = end;
|
||||
}
|
||||
|
||||
public ProcessInstanceBean(long id) {
|
||||
this.id = id;
|
||||
this.initialize();
|
||||
}
|
||||
|
||||
public ProcessInstanceBean(long id, String variableName, String variableValue) {
|
||||
this.id = id;
|
||||
this.variableName = variableName;
|
||||
this.variableValue = variableValue;
|
||||
this.initialize();
|
||||
}
|
||||
|
||||
public String inspectProcessInstance() {
|
||||
ProcessInstanceBean processInstanceBean = new ProcessInstanceBean(this.id);
|
||||
FacesContext.getCurrentInstance().getExternalContext().getSessionMap().put("processInstanceBean", processInstanceBean);
|
||||
return ("inspectInstance");
|
||||
}
|
||||
|
||||
public String deleteProcessInstance() {
|
||||
JbpmContext jbpmContext = JbpmContext.getCurrentJbpmContext();
|
||||
GraphSession graphSession = jbpmContext.getGraphSession();
|
||||
graphSession.deleteProcessInstance(this.id);
|
||||
return ("deleteInstance");
|
||||
}
|
||||
|
||||
private void initialize() {
|
||||
JbpmContext jbpmContext = JbpmContext.getCurrentJbpmContext();
|
||||
GraphSession graphSession = jbpmContext.getGraphSession();
|
||||
ProcessInstance processInstance = graphSession.loadProcessInstance(this.id);
|
||||
this.start = processInstance.getStart();
|
||||
this.end = processInstance.getEnd();
|
||||
this.processDefinitionId = processInstance.getProcessDefinition().getId();
|
||||
this.processDefinitionLabel = processInstance.getProcessDefinition().getName() + " (version " + processInstance.getProcessDefinition().getVersion() + ")";
|
||||
|
||||
initializeVariablesList(processInstance);
|
||||
initializeTokensList(processInstance);
|
||||
initializeTasksList(processInstance);
|
||||
}
|
||||
|
||||
private void initializeAvailableTransitions(TaskInstance taskInstance) {
|
||||
|
||||
transitions = new ArrayList();
|
||||
|
||||
if (taskInstance.getAvailableTransitions().isEmpty() == false) {
|
||||
Iterator availableTransitionsIterator = taskInstance.getAvailableTransitions().iterator();
|
||||
while (availableTransitionsIterator.hasNext()) {
|
||||
Transition transition = (Transition) availableTransitionsIterator.next();
|
||||
transitions.add(transition);
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void initializeAvailableTransitions(Token token) {
|
||||
|
||||
transitions = new ArrayList();
|
||||
|
||||
if (token.getNode().getLeavingTransitions().isEmpty() == false) {
|
||||
Iterator availableTransitionsIterator = token.getNode().getLeavingTransitions().iterator();
|
||||
while (availableTransitionsIterator.hasNext()) {
|
||||
Transition transition = (Transition) availableTransitionsIterator.next();
|
||||
transitions.add(transition);
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void initializeVariablesList(ProcessInstance processInstance) {
|
||||
|
||||
// Variables list
|
||||
variables = new ArrayList();
|
||||
|
||||
if (processInstance.getContextInstance().getVariables() != null && !processInstance.getContextInstance().getVariables().values().isEmpty()) {
|
||||
int mapsize = processInstance.getContextInstance().getVariables().size();
|
||||
Iterator variablesIterator = processInstance.getContextInstance().getVariables().entrySet().iterator();
|
||||
for (int i = 0; i < mapsize; i++) {
|
||||
Entry entry = (Entry) variablesIterator.next();
|
||||
variables.add(new VariableBean((String) entry.getKey(), entry.getValue()));
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
private void initializeTasksList(ProcessInstance processInstance) {
|
||||
|
||||
// Tasks list
|
||||
tasks = new ArrayList();
|
||||
if (processInstance.getTaskMgmtInstance().getTaskInstances().isEmpty() == false) {
|
||||
Iterator tasksIterator = processInstance.getTaskMgmtInstance().getTaskInstances().iterator();
|
||||
while (tasksIterator.hasNext()) {
|
||||
TaskInstance taskInstance = (TaskInstance) tasksIterator.next();
|
||||
tasks.add(new TaskBean(taskInstance.getId(), taskInstance.getName(), taskInstance.getActorId(), taskInstance.getEnd()));
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
private void initializeTokensList(ProcessInstance processInstance) {
|
||||
|
||||
// Tokens list
|
||||
Token rootToken = processInstance.getRootToken();
|
||||
|
||||
tokens = new ArrayList();
|
||||
this.tokenInstanceId = rootToken.getId();
|
||||
this.taskInstanceId = 0;
|
||||
tokens.add(new TokenBean(rootToken.getId(), "Root", rootToken.getNode().getName(), rootToken.getNode().getClass().getName(), rootToken.getStart(),
|
||||
rootToken.getEnd(), 1));
|
||||
try {
|
||||
if (rootToken.getChildren().isEmpty() == false) {
|
||||
AddChildrenTokensToTokensList(this.tokens, rootToken, 2);
|
||||
}
|
||||
} catch (Exception exception) {
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* Add token childs to the current token beans list
|
||||
*
|
||||
* @param tokensList
|
||||
* Current token list to update
|
||||
* @param token
|
||||
* Token where are the token childs
|
||||
* @param level
|
||||
* Level where is the token: 1 for the root token, 2 for the childs
|
||||
* of the root token, ...
|
||||
*/
|
||||
private void AddChildrenTokensToTokensList(ArrayList tokensList, Token token, long level) {
|
||||
|
||||
Iterator childrenIterator = token.getChildren().values().iterator();
|
||||
while (childrenIterator.hasNext()) {
|
||||
Token childToken = (Token) childrenIterator.next();
|
||||
tokensList.add(new TokenBean(childToken.getId(), childToken.getName(), childToken.getNode().getName(), childToken.getNode().getClass().getName(),
|
||||
childToken.getStart(), childToken.getEnd(), level));
|
||||
try {
|
||||
if (childToken.getChildren().isEmpty() == false) {
|
||||
AddChildrenTokensToTokensList(tokensList, childToken, level + 1);
|
||||
}
|
||||
} catch (Exception exception) {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public String updateVariable() {
|
||||
|
||||
if (this.variableName != null) {
|
||||
JbpmContext jbpmContext = JbpmContext.getCurrentJbpmContext();
|
||||
GraphSession graphSession = jbpmContext.getGraphSession();
|
||||
ProcessInstance processInstance = graphSession.loadProcessInstance(this.id);
|
||||
if (this.variableValue != null) {
|
||||
processInstance.getContextInstance().setVariable(this.variableName, this.variableValue);
|
||||
} else {
|
||||
processInstance.getContextInstance().deleteVariable(this.variableName);
|
||||
}
|
||||
initializeVariablesList(processInstance);
|
||||
}
|
||||
return "inspectInstance";
|
||||
}
|
||||
|
||||
public String selectToken() {
|
||||
this.taskInstanceId = 0;
|
||||
this.tokenInstanceId = JsfHelper.getId("tokenInstanceId");
|
||||
return "";
|
||||
}
|
||||
|
||||
public String selectTask() {
|
||||
this.tokenInstanceId = 0;
|
||||
this.taskInstanceId = JsfHelper.getId("taskInstanceId");
|
||||
return "";
|
||||
}
|
||||
|
||||
public String signal() {
|
||||
|
||||
selectToken();
|
||||
|
||||
JbpmContext jbpmContext = JbpmContext.getCurrentJbpmContext();
|
||||
GraphSession graphSession = jbpmContext.getGraphSession();
|
||||
|
||||
Token token = graphSession.loadToken(this.tokenInstanceId);
|
||||
|
||||
if (token.getNode().getLeavingTransitions().size() > 1) {
|
||||
initializeAvailableTransitions(token);
|
||||
return "showTransitions";
|
||||
}
|
||||
|
||||
token.signal();
|
||||
|
||||
this.initializeTokensList(token.getProcessInstance());
|
||||
|
||||
return "inspectInstance";
|
||||
}
|
||||
|
||||
public String selectTransition() {
|
||||
String transitionName;
|
||||
|
||||
transitionName = JsfHelper.getParameter("transitionName");
|
||||
ProcessInstance processInstance = null;
|
||||
|
||||
JbpmContext jbpmContext = JbpmContext.getCurrentJbpmContext();
|
||||
if (this.taskInstanceId > 0) {
|
||||
TaskMgmtSession taskMgmtSession = jbpmContext.getTaskMgmtSession();
|
||||
TaskInstance taskInstance = taskMgmtSession.loadTaskInstance(this.taskInstanceId);
|
||||
if (transitionName.equals("")) {
|
||||
taskInstance.end();
|
||||
} else {
|
||||
taskInstance.end(transitionName);
|
||||
}
|
||||
processInstance = taskInstance.getToken().getProcessInstance();
|
||||
} else if (this.tokenInstanceId > 0) {
|
||||
GraphSession graphSession = jbpmContext.getGraphSession();
|
||||
Token token = graphSession.loadToken(this.tokenInstanceId);
|
||||
if (transitionName.equals("")) {
|
||||
token.signal();
|
||||
} else {
|
||||
token.signal(transitionName);
|
||||
}
|
||||
processInstance = token.getProcessInstance();
|
||||
}
|
||||
|
||||
jbpmContext.save(processInstance);
|
||||
|
||||
this.initializeTasksList(processInstance);
|
||||
this.initializeTokensList(processInstance);
|
||||
|
||||
return "inspectInstance";
|
||||
}
|
||||
|
||||
public String endTask() {
|
||||
|
||||
selectTask();
|
||||
|
||||
JbpmContext jbpmContext = JbpmContext.getCurrentJbpmContext();
|
||||
TaskMgmtSession taskMgmtSession = jbpmContext.getTaskMgmtSession();
|
||||
|
||||
TaskInstance taskInstance = taskMgmtSession.loadTaskInstance(this.taskInstanceId);
|
||||
|
||||
if (taskInstance.getAvailableTransitions().size() > 1) {
|
||||
initializeAvailableTransitions(taskInstance);
|
||||
return "showTransitions";
|
||||
}
|
||||
|
||||
taskInstance.end();
|
||||
|
||||
ProcessInstance processInstance = taskInstance.getToken().getProcessInstance();
|
||||
jbpmContext.save(processInstance);
|
||||
|
||||
this.initializeTasksList(processInstance);
|
||||
this.initializeTokensList(processInstance);
|
||||
|
||||
return "inspectInstance";
|
||||
}
|
||||
|
||||
// Show all the process instances for a given process definition ID
|
||||
public String showProcessInstances() {
|
||||
ProcessDefinitionBean processDefinitionBean = new ProcessDefinitionBean(this.processDefinitionId);
|
||||
FacesContext.getCurrentInstance().getExternalContext().getSessionMap().put("processDefinitionBean", processDefinitionBean);
|
||||
return ("processInstances");
|
||||
}
|
||||
|
||||
public long getId() {
|
||||
return id;
|
||||
}
|
||||
|
||||
public void setId(long id) {
|
||||
this.id = id;
|
||||
}
|
||||
|
||||
public Date getStart() {
|
||||
return start;
|
||||
}
|
||||
|
||||
public void setStart(Date start) {
|
||||
this.start = start;
|
||||
}
|
||||
|
||||
public Date getEnd() {
|
||||
return end;
|
||||
}
|
||||
|
||||
public void setEnd(Date end) {
|
||||
this.end = end;
|
||||
}
|
||||
|
||||
public ArrayList getTokens() {
|
||||
return tokens;
|
||||
}
|
||||
|
||||
public void setTokens(ArrayList tokens) {
|
||||
this.tokens = tokens;
|
||||
}
|
||||
|
||||
public String getProcessDefinitionLabel() {
|
||||
return processDefinitionLabel;
|
||||
}
|
||||
|
||||
public void setProcessDefinitionLabel(String processDefinitionLabel) {
|
||||
this.processDefinitionLabel = processDefinitionLabel;
|
||||
}
|
||||
|
||||
public ArrayList getVariables() {
|
||||
return variables;
|
||||
}
|
||||
|
||||
public ArrayList getTasks() {
|
||||
return tasks;
|
||||
}
|
||||
|
||||
public ArrayList getTransitions() {
|
||||
return transitions;
|
||||
}
|
||||
|
||||
public void setVariables(ArrayList variables) {
|
||||
this.variables = variables;
|
||||
}
|
||||
|
||||
public String getVariableName() {
|
||||
return variableName;
|
||||
}
|
||||
|
||||
public void setVariableName(String variableName) {
|
||||
this.variableName = variableName;
|
||||
}
|
||||
|
||||
public String getVariableValue() {
|
||||
return variableValue;
|
||||
}
|
||||
|
||||
public void setVariableValue(String variableValue) {
|
||||
this.variableValue = variableValue;
|
||||
}
|
||||
|
||||
public long getTokenInstanceId() {
|
||||
return tokenInstanceId;
|
||||
}
|
||||
|
||||
public void setTokenInstanceId(long tokenInstanceId) {
|
||||
this.taskInstanceId = 0;
|
||||
this.tokenInstanceId = tokenInstanceId;
|
||||
}
|
||||
|
||||
public long getTaskInstanceId() {
|
||||
return taskInstanceId;
|
||||
}
|
||||
|
||||
public void setTaskInstanceId(long taskInstanceId) {
|
||||
this.tokenInstanceId = 0;
|
||||
this.taskInstanceId = taskInstanceId;
|
||||
}
|
||||
|
||||
}
|
Reference in New Issue
Block a user