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

org.ow2.bonita.persistence.db.RuntimeDbSessionImpl 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.
 **/
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.Query;
import org.hibernate.Session;
import org.ow2.bonita.definition.ClassData;
import org.ow2.bonita.definition.InternalProcess;
import org.ow2.bonita.facade.def.element.MetaData;
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.RuntimeDbSession;
import org.ow2.bonita.pvm.internal.hibernate.HibernatePvmDbSession;
import org.ow2.bonita.pvm.internal.job.TimerImpl;
import org.ow2.bonita.pvm.job.Timer;
import org.ow2.bonita.runtime.ActivityInstanceKey;
import org.ow2.bonita.runtime.InternalExecution;
import org.ow2.bonita.runtime.InternalInstance;
import org.ow2.bonita.runtime.ProcessInstanceKey;
import org.ow2.bonita.runtime.ProcessVersion;


public class RuntimeDbSessionImpl extends HibernatePvmDbSession implements RuntimeDbSession {

  public RuntimeDbSessionImpl(final Session session) {
    setSession(session);
    session.setFlushMode(FlushMode.COMMIT);
  }
  
  public InternalInstance getInstance(final ProcessInstanceUUID instanceUUID) {
    final Query query = getSession().getNamedQuery("getInternalInstance");
    query.setString("instanceUUID", instanceUUID.toString());
    query.setCacheable(true);
    query.setMaxResults(1);
    return (InternalInstance) query.uniqueResult();
  }

  @SuppressWarnings("unchecked")
  public Set getInstances(final ProcessDefinitionUUID processUUID) {
    final Query query = getSession().getNamedQuery("getInternalInstances");
    query.setCacheable(true);
    query.setString("processUUID", processUUID.toString());
    final List list = query.list();
    final Set result = new HashSet();
    if (list != null && !list.isEmpty()) {
      result.addAll(list);
    }
    return result;
  }

  public InternalProcess getProcess(final ProcessDefinitionUUID processUUID) {
    final Query query = getSession().getNamedQuery("getInternalProcess");
    query.setString("processUUID", processUUID.toString());
    query.setCacheable(true);
    query.setMaxResults(1);
    final InternalProcess processDefinition = (InternalProcess) query.uniqueResult();
    return processDefinition;
  }

  @SuppressWarnings("unchecked")
public Collection getProcessClassDatas(final ProcessDefinitionUUID processUUID) {
    final Query query = getSession().getNamedQuery("getProcessClassDatas");
    query.setCacheable(true);
    query.setString("processUUID", processUUID.toString());
    final List classDatas = query.list();
    return classDatas;
  }

  public ProcessVersion getLastProcessVersion(final String processId) {
    final Query query = getSession().getNamedQuery("getLastProcessVersion");
    query.setCacheable(true);
    query.setString("processId", processId);
    query.setMaxResults(1);
    final ProcessVersion pv = (ProcessVersion) query.uniqueResult();
    return pv;
  }

  public InternalExecution getExecutionPointingOnNode(final ActivityInstanceUUID activityUUID) {
    final Query query = getSession().getNamedQuery("findInstanceExecutionPointingOnNode");
    query.setCacheable(true);
    query.setString("activityUUID", activityUUID.toString());
    return (InternalExecution) query.uniqueResult();
  }

  @SuppressWarnings("unchecked")
  public Set getDependentProcesses(final String className) {
    final Query query = getSession().getNamedQuery("getClassDependentProcesses");
    query.setCacheable(true);
    query.setString("className", className);
    final List results = query.list();
    if (results != null) {
      return new HashSet(results);
    }
    return null;
  }
  /*

  public ProcessDependency getProcessDependency(final ProcessDefinitionUUID processUUID) {
    final Query query = getSession().getNamedQuery("getProcessDependency");
    query.setCacheable(true);
    query.setString("processUUID", processUUID.toString());
    return (ProcessDependency) query.uniqueResult();
  }
  */

  public InternalProcess findLatestProcessById(final String processId) {
    final Query query = getSession().getNamedQuery("findLatestProcessById");
    query.setCacheable(true);
    query.setString("processId", processId);
    return (InternalProcess)query.uniqueResult();
  }

  public ActivityInstanceKey getActivityInstanceKey(final ProcessInstanceUUID instanceUUID,
      final String activityName) {
    final Query query = getSession().getNamedQuery("getActivityInstanceKey");
    query.setCacheable(true);
    query.setString("instanceUUID", instanceUUID.toString());
    query.setString("activityId", activityName);
    return (ActivityInstanceKey)query.uniqueResult();
  }

  public ProcessInstanceKey getProcessInstanceKey(final ProcessDefinitionUUID processUUID) {
    final Query query = getSession().getNamedQuery("getProcessInstanceKey");
    query.setCacheable(true);
    query.setString("processUUID", processUUID.toString());
    return (ProcessInstanceKey)query.uniqueResult();
  }

  @SuppressWarnings("unchecked")
  public Collection getExecutionTimers(final InternalExecution internalExecution) {
    final Query query = getSession().createQuery("from " + TimerImpl.class.getName() + " as timer where timer.execution = :exec");
    query.setEntity("exec", internalExecution);
    return query.list();
  }

  @SuppressWarnings("unchecked")
  public Set getInstanceTimers(final ProcessInstanceUUID instanceUUID) {
    final Query query = getSession().getNamedQuery("getInstanceTimers");
    query.setCacheable(true);
    query.setString("instanceUUID", instanceUUID.toString());
    final List list = query.list();
    final Set result = new HashSet();
    if (list != null && !list.isEmpty()) {
      result.addAll(list);
    }
    return result;
  }
  
  public MetaData getMetaData(String key) {
    final Query query = getSession().getNamedQuery("getMetaData");
    query.setCacheable(true);
    query.setString("key", key);
    return (MetaData) query.uniqueResult();
  }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy