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

org.ow2.bonita.facade.runtime.impl.ProcessFullInstanceImpl Maven / Gradle / Ivy

/**
 * Copyright (C) 2007  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.facade.runtime.impl;

import java.util.ArrayList;
import java.util.Date;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;

import org.ow2.bonita.facade.runtime.ActivityBody;
import org.ow2.bonita.facade.runtime.ActivityFullInstance;
import org.ow2.bonita.facade.runtime.InstanceState;
import org.ow2.bonita.facade.runtime.InstanceStateUpdate;
import org.ow2.bonita.facade.runtime.ProcessFullInstance;
import org.ow2.bonita.facade.runtime.VariableUpdate;
import org.ow2.bonita.facade.uuid.PackageDefinitionUUID;
import org.ow2.bonita.facade.uuid.ProcessDefinitionUUID;
import org.ow2.bonita.facade.uuid.ProcessInstanceUUID;
import org.ow2.bonita.pvm.internal.type.Variable;
import org.ow2.bonita.util.FullCopyTool;
import org.ow2.bonita.util.Misc;

/**
 * @author Pierre Vigneras
 * @date Feb 5, 2008
 */
public class ProcessFullInstanceImpl extends ProcessInstanceImpl implements ProcessFullInstance {

  /**
   * 
   */
  private static final long serialVersionUID = -8045268979018751525L;

  protected long dbid;

  protected Map persistableInitialVariableValues;

  protected Set> activities;

  protected ProcessFullInstanceImpl() {
    super();
  }

  public ProcessFullInstanceImpl(final ProcessInstanceUUID recordUUID, final PackageDefinitionUUID packageUUID,
      final ProcessDefinitionUUID processUUID,
      final ProcessInstanceUUID parentInstanceUUID,
      final Map initialVariableValues) {
    super(recordUUID, packageUUID, processUUID, parentInstanceUUID, null);

    this.persistableInitialVariableValues =
      FullCopyTool.createVariableMap(initialVariableValues);
  }

  public ProcessFullInstanceImpl(final ProcessFullInstance src) {
    super(src);
    this.initialVariableValues = null;
    this.persistableInitialVariableValues = FullCopyTool.createVariableMap(src.getInitialVariableValues());
    final Set> acts = src.getActivities();
    if (acts != null) {
      this.activities = new HashSet>();
      for (final ActivityFullInstance activity : acts) {
        this.activities.add(new ActivityFullInstanceImpl(activity));
      }
    }
    final List list = src.getVariableUpdates();
    if (list != null && !list.isEmpty()) {
      this.variableUpdates = new ArrayList();
      for (final VariableUpdate varUpdate : list) {
        this.variableUpdates.add(new VariableUpdateFullImpl(varUpdate));
      }
    }
  }

  public void addActivity(final ActivityFullInstance activity) {
    if (getActivities() == null)  {
      this.activities = new HashSet>();
    }
    this.activities.add(activity);
  }

  public Set> getActivities() {
    return this.activities;
  }

  public Set> getActivities(final String activityId) {
    final Set> matchingActivities = new HashSet>();
    if (getActivities() != null) {
      for (final ActivityFullInstance activity : getActivities()) {
        if (activity.getActivityId().equals(activityId)) {
          matchingActivities.add(activity);
        }
      }
    }
    return matchingActivities;
  }

  public ActivityFullInstance getActivity(final String activityId,
      final String iterationId, final String activityInstanceId) {
    if (getActivities() != null) {
      for (final ActivityFullInstance activity : getActivities()) {
        if (activity.getActivityId().equals(activityId)
            &&
            (
                (activity.getIterationId() == null && iterationId == null)
                ||
                activity.getIterationId().equals(iterationId)
            )
            &&
            (
                (activity.getActivityInstanceId() == null && activityInstanceId == null)
                ||
                activity.getActivityInstanceId().equals(activityInstanceId)
            )
        ) {
          return activity;
        }
      }
    }
    return null;
  }

  public void setStartedBy(final String userId) {
    Misc.badStateIfNotNull(getStartedBy(), "startedBy can not be set twice!");
    this.startedBy = userId;
  }

  public void setStartedDate(final Date date) {
    Misc.badStateIfNotNull(getStartedDate(), "startedDate can not be set twice!");
    this.startedDate = date;
  }

  public void setEndedBy(final String userId) {
    Misc.badStateIfNotNull(getEndedBy(), "endedBy can not be set twice!");
    this.endedBy = userId;
  }

  public void setEndedDate(final Date date) {
    Misc.badStateIfNotNull(getEndedDate(), "endedDate can not be set twice!");
    this.endedDate = date;
  }

  @Override
  public Map getInitialVariableValues() {
    return FullCopyTool.getVariableValues(this.persistableInitialVariableValues);
  }

  public void addVariableUpdate(final VariableUpdate varUpdate) {
    this.variableUpdates.add(new VariableUpdateFullImpl(varUpdate));
  }

  public void setInstanceState(final InstanceState newState, final String userId) {
    InstanceState oldState;
    if (getInstanceStateUpdates() == null) {
      this.instanceStateUpdates = new ArrayList();
      oldState = InstanceState.INITIAL;
    } else if (getInstanceStateUpdates().isEmpty()) {
      oldState = InstanceState.INITIAL;
    } else {
      if (!getInstanceStateUpdates().isEmpty()
        && new Date().before(getInstanceStateUpdates().get(getInstanceStateUpdates().size() - 1).getUpdatedDate())) {
        UpdateImpl.logClockInconsistency();
      }
      //get the old instance state from the previous update
      oldState = this.getInstanceStateUpdates().get(getInstanceStateUpdates().size() - 1).getInstanceState();
    }
    //add a state update
    this.getInstanceStateUpdates().add(new InstanceStateUpdateImpl(new Date(), userId, oldState, newState));
  }

  public void addChildInstance(final ProcessInstanceUUID childInstanceUUID) {
    if (this.childrenInstanceUUID == null) {
      this.childrenInstanceUUID = new HashSet();
    }
    this.childrenInstanceUUID.add(childInstanceUUID);
  }

/*
  public void end() {
    if (this.activities != null) {
      for (ActivityFullInstance activity : activities) {
        ActivityBody body = activity.getBody();
        if (body instanceof TaskFullInstance) {
          ((TaskFullInstance)body).setTaskRuntime(null);
        }
      }
    }
  }
  */
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy