Package org.jbpm.pvm.internal.hibernate

Source Code of org.jbpm.pvm.internal.hibernate.ExecutionType

package org.jbpm.pvm.internal.hibernate;

import java.io.Serializable;
import java.lang.reflect.Method;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Types;
import java.util.Properties;

import org.hibernate.HibernateException;
import org.hibernate.usertype.ParameterizedType;
import org.hibernate.usertype.UserType;
import org.jbpm.api.Execution;
import org.jbpm.internal.log.Log;
import org.jbpm.pvm.internal.model.ExecutionImpl;
import org.jbpm.pvm.internal.model.ActivityImpl;
import org.jbpm.pvm.internal.model.ProcessDefinitionImpl;
import org.jbpm.pvm.internal.util.ReflectUtil;

public class ExecutionType implements UserType, ParameterizedType {

  private static final long serialVersionUID = 1L;
  private static final Log log = Log.getLog(ExecutionType.class.getName());
 
  int[] sqlTypes = new int[]{Types.VARCHAR};
 
  protected String processResource;
  protected ProcessDefinitionImpl processDefinition;

  public void setParameterValues(Properties properties) {
  }

  public int[] sqlTypes() {
    return sqlTypes;
  }

  // JDBC - object translation
 
  public Object nullSafeGet(ResultSet rs, String[] names, Object owner) throws HibernateException, SQLException {
    ExecutionImpl execution = createExecution(owner);
    String activityName = rs.getString(names[0]);
    ActivityImpl activity = (ActivityImpl) execution.getProcessDefinition().getActivity(activityName);
    execution.setActivity(activity);
    execution.setState(Execution.STATE_ACTIVE_ROOT);
    return execution;
  }

  private ExecutionImpl createExecution(Object owner) {
    ExecutionImpl execution = new ExecutionImpl();
    execution.setProcessDefinition(getProcessDefinition(owner));
    return execution;
  }

  private synchronized ProcessDefinitionImpl getProcessDefinition(Object owner) {
    if (processDefinition!=null) {
      return processDefinition;
    }
    Class<?> ownerClass = owner.getClass();
    try {
      Method method = ownerClass.getDeclaredMethod("getProcessDefinition");
      processDefinition = (ProcessDefinitionImpl) ReflectUtil.invoke(method, null, null);
    } catch (Exception e) {
      throw new RuntimeException("couldn't get process definition for "+owner, e);
    }
   
    return processDefinition;
  }

  public void nullSafeSet(PreparedStatement st, Object owner, int index) throws HibernateException, SQLException {
    if (owner!=null) {
      ExecutionImpl execution = (ExecutionImpl) owner;
      String activityName = execution.getActivity().getName();
      log.trace("binding 'execution-state{"+activityName+"}' to parameter: "+index);
      st.setString(index, activityName);
    }
  }

  // for dirty checking ?

  public Object deepCopy(Object object) throws HibernateException {
    if (object==null) {
      return null;
    }
   
    ExecutionImpl original = (ExecutionImpl) object;

    ActivityImpl activity = new ActivityImpl();
    activity.setName(original.getActivity().getName());
   
    ExecutionImpl copy = new ExecutionImpl();
    copy.setActivity(activity);

    return copy;
  }

  public boolean equals(Object arg0, Object arg1) throws HibernateException {
    if ( (arg0==null) || (arg1==null)) return false;
   
    ExecutionImpl execution0 = (ExecutionImpl) arg0;
    ExecutionImpl execution1 = (ExecutionImpl) arg1;
   
    String activityName0 = execution0.getActivity().getName();
    String activityName1 = execution1.getActivity().getName();
   
    return activityName0.equals(activityName1);
  }

  public int hashCode(Object object) throws HibernateException {
    return object.hashCode();
  }

  public boolean isMutable() {
    return true;
  }

  public Class<?> returnedClass() {
    return Execution.class;
  }

  // merge functionality //////////////////////////////////////////////////////
 
  public Object replace(Object arg0, Object arg1, Object arg2) throws HibernateException {
    return null;
  }

  // serialization for cache //////////////////////////////////////////////////

  public Object assemble(Serializable arg0, Object arg1) throws HibernateException {
    return null;
  }

  public Serializable disassemble(Object arg0) throws HibernateException {
    return null;
  }
}
TOP

Related Classes of org.jbpm.pvm.internal.hibernate.ExecutionType

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.