/*
* 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.sql.Connection;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;
import java.util.ListIterator;
import javax.faces.context.FacesContext;
import javax.faces.model.SelectItem;
import org.jbpm.JbpmContext;
import org.jbpm.graph.def.ProcessDefinition;
/**
* Monitoring Bean Implementation.
*
* @author David Loiseau
*/
public class MonitoringBean {
long processInstanceId;
String message;
String variableName;
String variableValue;
String variableNameOperator;
String variableValueOperator;
ArrayList processInstances;
public String showProcessDefinitions() {
return "processDefinitions";
}
public List getProcessDefinitions() {
ArrayList processDefinitionsList = new ArrayList();
JbpmContext jbpmContext = JbpmContext.getCurrentJbpmContext();
List processDefinitions = jbpmContext.getGraphSession().findAllProcessDefinitions();
if (processDefinitions.isEmpty() == false) {
ListIterator listProcessDefinitions = processDefinitions.listIterator();
while (listProcessDefinitions.hasNext() ) {
ProcessDefinition processDefinition = (ProcessDefinition)listProcessDefinitions.next();
int instancesCount = 0;
try {
Connection connection = jbpmContext.getConnection();
Statement statement = connection.createStatement();
String request = "SELECT COUNT(*) AS instancesCount "
+ "FROM jbpm_processinstance "
+ "WHERE processdefinition_='"
+ processDefinition.getId() + "'";
ResultSet resultSet = statement.executeQuery(request);
resultSet.next();
instancesCount = resultSet.getInt("instancesCount");
}
catch (Exception e) {}
processDefinitionsList.add(
new ProcessDefinitionBean(
processDefinition.getId(),
processDefinition.getName(),
processDefinition.getVersion(),
instancesCount
));
}
}
return(processDefinitionsList);
}
public String inspectInstance() {
try {
ProcessInstanceBean processInstanceBean = new ProcessInstanceBean(this.processInstanceId);
FacesContext.getCurrentInstance().getExternalContext().getSessionMap().put("processInstanceBean", processInstanceBean);
this.message = "";
return "inspectInstance";
}
catch (Exception exception) {
this.message = "Error for process instance " + this.processInstanceId;
return "";
}
}
public String showSearchInstances() {
return("showSearchInstances");
}
public String searchInstances() {
long count = 0;
JbpmContext jbpmContext = JbpmContext.getCurrentJbpmContext();
try {
Connection connection = jbpmContext.getConnection();
Statement statement = connection.createStatement();
statement.setMaxRows(100);
String request = "SELECT DISTINCT processinstance_, name_, stringvalue_ FROM jbpm_variableinstance "
+ "WHERE name_ "
+ this.variableNameOperator + " '"
+ variableName + "' AND stringvalue_ "
+ this.variableValueOperator + " '" + variableValue + "'";
ResultSet resultSet = statement.executeQuery(request);
processInstances = new ArrayList();
while (resultSet.next()) {
processInstances.add(new ProcessInstanceBean(
resultSet.getLong("processinstance_"),
resultSet.getString("name_"),
resultSet.getString("stringvalue_")));
count++;
}
statement.close();
}
catch (Exception e) {
this.message = "Search error " + e.getMessage();
}
if (count == 1) {
ProcessInstanceBean processInstanceBean = (ProcessInstanceBean)processInstances.iterator().next();
FacesContext.getCurrentInstance().getExternalContext().getSessionMap().put("processInstanceBean", processInstanceBean);
return("inspectInstance");
}
return "";
}
public List getOperatorsList (){
ArrayList operatorsList = new ArrayList();
SelectItem item = new SelectItem("=", "is equal to");
operatorsList.add(item);
item = new SelectItem("like", "is like");
operatorsList.add(item);
return operatorsList;
}
public long getProcessInstanceId() {
return processInstanceId;
}
public void setProcessInstanceId(long processInstanceId) {
this.processInstanceId = processInstanceId;
}
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
public boolean isShowProcessInstances() {
if (processInstances == null) return false;
if (processInstances.size() == 0) return false;
return true;
}
public ArrayList getProcessInstances() {
return processInstances;
}
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 String getVariableNameOperator() {
return variableNameOperator;
}
public void setVariableNameOperator(String variableNameOperator) {
this.variableNameOperator = variableNameOperator;
}
public String getVariableValueOperator() {
return variableValueOperator;
}
public void setVariableValueOperator(String variableValueOperator) {
this.variableValueOperator = variableValueOperator;
}
}