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

org.ow2.bonita.pvm.internal.model.PVMProcessDefinitionImpl Maven / Gradle / Ivy

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

import java.util.Date;
import java.util.List;

import org.ow2.bonita.pvm.Execution;
import org.ow2.bonita.pvm.client.ClientProcessDefinition;
import org.ow2.bonita.pvm.client.ClientProcessInstance;
import org.ow2.bonita.pvm.model.OpenProcessDefinition;
import org.ow2.bonita.util.Log;

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

  private static final long serialVersionUID = 1L;
  private static final Log log = Log.getLog(PVMProcessDefinitionImpl.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;

  /** the node which is executed when the process starts */
  protected NodeImpl initial;


  public PVMProcessDefinitionImpl() {
    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) {
    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 beginProcessInstance() {
    ClientProcessInstance processInstance = createProcessInstance(null, null);
    processInstance.begin();
    return processInstance;
  }

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

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

  public void setVariableDefinitions(List variableDefinitions) {
    this.variableDefinitions = variableDefinitions;
    hasVariableDefinitions = true;
  }
  
  // basic methods ////////////////////////////////////////////////////////////

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

  // getters and setters //////////////////////////////////////////////////////

  public NodeImpl getInitial() {
    return initial;
  }

  public void setInitial(NodeImpl 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;
  }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy