mirror of
https://github.com/Alfresco/alfresco-community-repo.git
synced 2025-08-07 17:49:17 +00:00
git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@3399 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261
421 lines
12 KiB
Java
421 lines
12 KiB
Java
/*
|
|
* 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;
|
|
}
|
|
|
|
}
|