
org.ow2.bonita.persistence.db.QuerierDbSessionImpl Maven / Gradle / Ivy
/**
* Copyright (C) 2006 Bull S. A. S.
* Bull, Rue Jean Jaures, B.P.68, 78340, Les Clayes-sous-Bois
* This library 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
* version 2.1 of the License.
* This library 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
* program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth
* Floor, Boston, MA 02110-1301, USA.
*
* Modified by Charles Souillard - BonitaSoft S.A.
* Modified by Matthieu Chaffotte - BonitaSoft S.A.
**/
package org.ow2.bonita.persistence.db;
import java.util.Collection;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import org.hibernate.FlushMode;
import org.hibernate.Hibernate;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.type.Type;
import org.ow2.bonita.facade.def.majorElement.ActivityDefinition;
import org.ow2.bonita.facade.def.majorElement.ProcessDefinition;
import org.ow2.bonita.facade.def.majorElement.ProcessDefinition.ProcessState;
import org.ow2.bonita.facade.runtime.ActivityInstance;
import org.ow2.bonita.facade.runtime.ActivityState;
import org.ow2.bonita.facade.runtime.ProcessInstance;
import org.ow2.bonita.facade.runtime.StateUpdate;
import org.ow2.bonita.facade.runtime.TaskInstance;
import org.ow2.bonita.facade.uuid.ActivityDefinitionUUID;
import org.ow2.bonita.facade.uuid.ActivityInstanceUUID;
import org.ow2.bonita.facade.uuid.ProcessDefinitionUUID;
import org.ow2.bonita.facade.uuid.ProcessInstanceUUID;
import org.ow2.bonita.persistence.QuerierDbSession;
import org.ow2.bonita.pvm.internal.hibernate.HibernatePvmDbSession;
import org.ow2.bonita.util.hibernate.GenericEnumUserType;
public class QuerierDbSessionImpl extends HibernatePvmDbSession implements QuerierDbSession {
public QuerierDbSessionImpl(Session session) {
setSession(session);
session.setFlushMode(FlushMode.COMMIT);
}
/*
* QUERIER
*/
private static Type activityStateUserType =
Hibernate.custom(GenericEnumUserType.class, new String[]{"enumClass"}, new String[]{ActivityState.class.getName()});
private static Type processStateUserType =
Hibernate.custom(GenericEnumUserType.class, new String[]{"enumClass"}, new String[]{ProcessState.class.getName()});
@SuppressWarnings("unchecked")
public Set getUserInstanceTasks(String userId,
ProcessInstanceUUID instanceUUID, ActivityState taskState) {
Set result = new HashSet();
Query query = getSession().getNamedQuery("getUserInstanceTasksWithState");
query.setCacheable(true);
query.setString("userId", userId);
query.setString("instanceUUID", instanceUUID.toString());
query.setParameter("state", taskState, activityStateUserType);
result.addAll(query.list());
return result;
}
@SuppressWarnings("unchecked")
public Set getUserTasks(String userId, Collection taskStates) {
Query query = getSession().getNamedQuery("getUserTasksWithStates");
query.setCacheable(true);
query.setString("userId", userId);
query.setParameterList("states", taskStates, activityStateUserType);
Set result = new HashSet();
result.addAll(query.list());
return result;
}
@SuppressWarnings("unchecked")
public Set getUserInstances(String userId) {
Query query = getSession().getNamedQuery("getUserInstances");
query.setCacheable(true);
query.setString("userId", userId);
Set result = new HashSet();
result.addAll(query.list());
return result;
}
@SuppressWarnings("unchecked")
public Set getDependentProcesses(final String className) {
final Query query = getSession().getNamedQuery("getClassDependentProcesses");
query.setCacheable(true);
query.setString("className", className);
query.setParameter("state", ProcessState.ENABLED, processStateUserType);
final List results = query.list();
if (results != null) {
return new HashSet(results);
}
return null;
}
@SuppressWarnings("unchecked")
public Set getActivityInstances(ProcessInstanceUUID instanceUUID) {
Query query = getSession().getNamedQuery("findActivityInstances");
query.setCacheable(true);
query.setString("instanceUUID", instanceUUID.toString());
List results = query.list();
if (results != null) {
return new HashSet(results);
}
return null;
}
public ProcessInstance getProcessInstance(ProcessInstanceUUID instanceUUID) {
Query query = getSession().getNamedQuery("findProcessInstance");
query.setCacheable(true);
query.setString("instanceUUID", instanceUUID.toString());
query.setMaxResults(1);
return (ProcessInstance) query.uniqueResult();
}
@SuppressWarnings("unchecked")
public Set getProcessInstances() {
final Set processInsts = new HashSet();
final Query query = getSession().getNamedQuery("findAllProcessInstances");
query.setCacheable(true);
final List results = query.list();
if (results != null) {
processInsts.addAll(results);
}
return processInsts;
}
@SuppressWarnings("unchecked")
public Set getProcessInstances(
Collection instanceUUIDs) {
final Set processInsts = new HashSet();
final Query query = getSession().getNamedQuery("findMatchingProcessInstances");
query.setCacheable(true);
Set uuids = new HashSet();
for (ProcessInstanceUUID uuid : instanceUUIDs) {
uuids.add(uuid.toString());
}
query.setParameterList("instanceUUIDs", uuids);
final List results = query.list();
if (results != null) {
processInsts.addAll(results);
}
return processInsts;
}
@SuppressWarnings("unchecked")
public Set getProcessInstancesWithTaskState(Collection activityStates) {
final Set processInsts = new HashSet();
final Query query = getSession().getNamedQuery("findProcessInstancesWithTaskState");
query.setCacheable(true);
query.setParameterList("activityStates", activityStates, activityStateUserType);
final List results = query.list();
if (results != null) {
processInsts.addAll(results);
}
return processInsts;
}
@SuppressWarnings("unchecked")
public Set getProcessInstances(final ProcessDefinitionUUID processUUID) {
final Set processInsts = new HashSet();
final Query query = getSession().getNamedQuery("findProcessInstances");
query.setCacheable(true);
query.setString("processUUID", processUUID.toString());
final List results = query.list();
if (results != null) {
processInsts.addAll(results);
}
return processInsts;
}
public TaskInstance getTaskInstance(ActivityInstanceUUID taskUUID) {
Query query = getSession().getNamedQuery("findTaskInstance");
query.setCacheable(true);
query.setString("taskUUID", taskUUID.toString());
query.setMaxResults(1);
return (TaskInstance) query.uniqueResult();
}
@SuppressWarnings("unchecked")
public Set getTaskInstances(final ProcessInstanceUUID instanceUUID) {
final Query query = getSession().getNamedQuery("findTaskInstances");
query.setCacheable(true);
query.setString("instanceUUID", instanceUUID.toString());
final Set taskInstances = new HashSet();
final List results = query.list();
if (results != null) {
taskInstances.addAll(results);
}
return taskInstances;
}
/*
* DEFINITION
*/
@SuppressWarnings("unchecked")
private Set getProcessSet(final Query query) {
final List results = query.list();
if (results != null) {
return new HashSet(results);
}
return null;
}
public Set getProcesses() {
final Query query = getSession().getNamedQuery("getProcesses1");
query.setCacheable(true);
return getProcessSet(query);
}
public Set getProcesses(String processId) {
final Query query = getSession().getNamedQuery("getProcesses2");
query.setCacheable(true);
query.setString("processId", processId);
return getProcessSet(query);
}
public ProcessDefinition getProcess(ProcessDefinitionUUID processUUID) {
final Query query = getSession().getNamedQuery("getProcess");
query.setCacheable(true);
query.setString("processUUID", processUUID.toString());
query.setMaxResults(1);
return (ProcessDefinition) query.uniqueResult();
}
public ProcessDefinition getProcess(String processId, String version) {
final Query query = getSession().getNamedQuery("getProcessFromIdAndVersion");
query.setCacheable(true);
query.setString("processId", processId);
query.setString("version", version);
return (ProcessDefinition) query.uniqueResult();
}
public Set getProcesses(ProcessState processState) {
Query query = getSession().getNamedQuery("getProcessesFromState");
if (processState.equals(ProcessState.ENABLED)) {
query.setParameter("state", ProcessState.ENABLED);
} else if (processState.equals(ProcessState.DISABLED)) {
query.setParameter("state", ProcessState.DISABLED);
} else {
query.setParameter("state", ProcessState.ARCHIVED);
}
query.setCacheable(true);
return getProcessSet(query);
}
public Set getProcesses(String processId, ProcessState processState) {
Query query = getSession().getNamedQuery("getProcessesFromProcessIdAndState");
if (processState.equals(ProcessState.ENABLED)) {
query.setParameter("state", ProcessState.ENABLED);
} else if (processState.equals(ProcessState.DISABLED)) {
query.setParameter("state", ProcessState.DISABLED);
} else {
query.setParameter("state", ProcessState.ARCHIVED);
}
query.setCacheable(true);
query.setString("processId", processId);
return getProcessSet(query);
}
public ProcessDefinition getLastProcess(String processId, ProcessState processState) {
Query query = getSession().getNamedQuery("getLastProcessFromProcessIdAndState");
if (processState.equals(ProcessState.ENABLED)) {
query.setParameter("state", ProcessState.ENABLED);
} else if (processState.equals(ProcessState.DISABLED)) {
query.setParameter("state", ProcessState.DISABLED);
} else {
query.setParameter("state", ProcessState.ARCHIVED);
}
query.setCacheable(true);
query.setString("processId", processId);
query.setMaxResults(1);
return (ProcessDefinition) query.uniqueResult();
}
public Set getDependentProcesses(ProcessDefinitionUUID processUUID) {
Query query = getSession().getNamedQuery("getDependentProcesses");
query.setCacheable(true);
query.setString("processName", processUUID.getProcessName());
query.setString("processUUID", processUUID.getValue());
return getProcessSet(query);
}
public ActivityInstance getActivityInstance(
ProcessInstanceUUID instanceUUID, String activityId, String iterationId, String activityInstanceId) {
Query query = getSession().getNamedQuery("getActivityInstance");
query.setCacheable(true);
query.setString("instanceUUID", instanceUUID.toString());
query.setString("activityId", activityId);
query.setString("iterationId", iterationId);
query.setString("activityInstanceId", activityInstanceId);
return (ActivityInstance)query.uniqueResult();
}
public ActivityInstance getActivityInstance(
ActivityInstanceUUID activityInstanceUUID) {
Query query = getSession().getNamedQuery("getActivityInstanceFromUUID");
query.setCacheable(true);
query.setString("activityUUID", activityInstanceUUID.toString());
return (ActivityInstance)query.uniqueResult();
}
public ActivityState getActivityInstanceState(ActivityInstanceUUID activityInstanceUUID) {
Query query = getSession().getNamedQuery("getActivityInstanceStateFromUUID");
query.setCacheable(true);
query.setString("activityUUID", activityInstanceUUID.toString());
StateUpdate su = (StateUpdate)query.uniqueResult();
if (su != null) {
return su.getActivityState();
}
return null;
}
public ActivityDefinition getActivityDefinition(ActivityDefinitionUUID activityDefinitionUUID) {
final Query query = getSession().getNamedQuery("getActivityDefinition");
query.setCacheable(true);
query.setString("activityUUID", activityDefinitionUUID.toString());
query.setMaxResults(1);
return (ActivityDefinition) query.uniqueResult();
}
@SuppressWarnings("unchecked")
public Set getWebProcessInstances(String labelId) {
final Set processInsts = new HashSet();
Query query = null;
if (labelId == null) {
query = getSession().getNamedQuery("getWebCasesWithoutLabel");
} else {
query = getSession().getNamedQuery("getWebCases");
query.setString("labelId", labelId);
}
query.setCacheable(true);
final List results = query.list();
if (results != null) {
processInsts.addAll(results);
}
return processInsts;
}
@SuppressWarnings("unchecked")
public Set getNewWebProcessInstances(String userId) {
final Set processInsts = new HashSet();
final Query query = getSession().getNamedQuery("getNewWebCases");
query.setCacheable(true);
query.setString("userId", userId);
final List results = query.list();
if (results != null) {
processInsts.addAll(results);
}
return processInsts;
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy