Package org.jbpm.pvm.internal.model

Source Code of org.jbpm.pvm.internal.model.ProcessDefinitionImpl

/*
* 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.pvm.internal.model;

import java.util.Date;
import java.util.HashMap;
import java.util.Map;

import org.jbpm.api.Execution;
import org.jbpm.api.JbpmException;
import org.jbpm.internal.log.Log;
import org.jbpm.pvm.internal.client.ClientProcessDefinition;
import org.jbpm.pvm.internal.client.ClientProcessInstance;
import org.jbpm.pvm.internal.env.Environment;
import org.jbpm.pvm.internal.task.TaskDefinitionImpl;

/**
* @author Tom Baeyens
*/
public class ProcessDefinitionImpl extends CompositeElementImpl implements OpenProcessDefinition, ClientProcessDefinition {

  private static final long serialVersionUID = 1L;
  private static final Log log = Log.getLog(ProcessDefinitionImpl.class.getName());
 
  public static final int UNASSIGNED_VERSION = -1;

  /** user provided short reference for the process definition that
   * has the same scope as the name.  Multiple versions of the same
   * process can have the same key. The key is used to build the
   * globally unique execution ids. */
  protected String key;
 
  /** the unique id (e.g. combination of name and versionnumber) for this
   * process definition. */
  protected String id;

  /** the version number of the process definitions with the same name.*/
  protected int version = UNASSIGNED_VERSION;
 
  /** optional package name similar to the Java package name. */
  protected String packageName;
 
  /** time this process was deployed */
  protected Date deploymentTime;
 
  /** ref to the deployment */
  protected long deploymentDbid;
 
  /** propagated from deployment to process definition during deploy */
  protected boolean isSuspended = false;
 
  /** the activity which is executed when the process starts */
  protected ActivityImpl initial;
 
  protected Map<String, TaskDefinitionImpl> taskDefinitions = new HashMap<String, TaskDefinitionImpl>();
 
  protected String imageResourceName = null;

 
  public ProcessDefinitionImpl() {
    this.processDefinition = this;
  }

  // execution factory method /////////////////////////////////////////////////
 
  public ClientProcessInstance createProcessInstance() {
    return createProcessInstance(null, null);
  }
 
  public ClientProcessInstance createProcessInstance(String key) {
    return createProcessInstance(key, null);
  }

  public ClientProcessInstance createProcessInstance(String key, Execution superProcessExecution) {
    if (isSuspended) {
      throw new JbpmException("process definition "+id+" is suspended");
    }
   
    ExecutionImpl processInstance = newProcessInstance();
    log.debug("creating new execution for process '"+name+"'");
    if (superProcessExecution!=null) {
      // establish the bidirectional relation between super process activity instance
      // and sub process instance
      ExecutionImpl superProcessExecutionImpl = (ExecutionImpl) superProcessExecution;
      processInstance.setSuperProcessExecution(superProcessExecutionImpl);
      superProcessExecutionImpl.setSubProcessInstance(processInstance);
    }
    processInstance.initializeProcessInstance(this, key);
    return processInstance;
  }
 
  public ClientProcessInstance startProcessInstance() {
    ClientProcessInstance processInstance = createProcessInstance(null, null);
    processInstance.start();
    return processInstance;
  }

  public ClientProcessInstance startProcessInstance(String key) {
    ClientProcessInstance processInstance = createProcessInstance(key, null);
    processInstance.start();
    return processInstance;
  }

  protected ExecutionImpl newProcessInstance() {
    return new ExecutionImpl();
  }

  /** by default, during initialization, an id will be generated when
   * an IdGenerator is present in the environment.  By default,  
   * this makes the execution persistent.  So in case the process definition
   * is not persistent and there is an environment present (like in the case
   * of task lifecycle for jpdl processes), this method needs to be overwritten. */
  public IdGenerator getIdGenerator() {
    return Environment.getFromCurrent(IdGenerator.class, false);
  }
 
  // task definitions /////////////////////////////////////////////////////////
 
  public void addTaskDefinitionImpl(TaskDefinitionImpl taskDefinition) {
    taskDefinitions.put(taskDefinition.getName(), taskDefinition);
  }
 
  public TaskDefinitionImpl getTaskDefinition(String name) {
    return taskDefinitions.get(name);
  }

  // basic methods ////////////////////////////////////////////////////////////

  public String toString() {
    return (name!=null ? "process("+name+")" : "process");
  }

  // customized getters and setters ///////////////////////////////////////////
 
  public String getDeploymentId() {
    return Long.toString(deploymentDbid);
  }

  // getters and setters //////////////////////////////////////////////////////
 
  public ActivityImpl getInitial() {
    return initial;
  }
  public void setInitial(ActivityImpl initial) {
    this.initial = initial;
  }
  public int getVersion() {
    return version;
  }
  public void setVersion(int version) {
    this.version = version;
  }
  public Date getDeploymentTime() {
    return deploymentTime;
  }
  public void setDeploymentTime(Date deploymentTime) {
    this.deploymentTime = deploymentTime;
  }
  public String getPackageName() {
    return packageName;
  }
  public void setPackageName(String packageName) {
    this.packageName = packageName;
  }
  public String getKey() {
    return key;
  }
  public void setKey(String key) {
    this.key = key;
  }
  public String getId() {
    return id;
  }
  public void setId(String id) {
    this.id = id;
  }
  public void setDeploymentDbid(long deploymentDbid) {
    this.deploymentDbid = deploymentDbid;
  }
  public String getImageResourceName() {
    return imageResourceName;
  }
  public void setImageResourceName(String imageResourceName) {
    this.imageResourceName = imageResourceName;
  }
  public boolean isSuspended() {
    return isSuspended;
  }
  public void setSuspended(boolean isSuspended) {
    this.isSuspended = isSuspended;
  }
}
TOP

Related Classes of org.jbpm.pvm.internal.model.ProcessDefinitionImpl

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.