All Downloads are FREE. Search and download functionalities are using the official Maven repository.

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