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

org.ow2.bonita.persistence.db.DbJournal 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.persistence.db;

import java.util.Date;

import org.ow2.bonita.definition.ActivityType;
import org.ow2.bonita.facade.def.majorElement.PackageFullDefinition;
import org.ow2.bonita.facade.def.majorElement.ProcessFullDefinition;
import org.ow2.bonita.facade.def.majorElement.PackageDefinition.PackageState;
import org.ow2.bonita.facade.def.majorElement.ProcessDefinition.ProcessState;
import org.ow2.bonita.facade.runtime.ActivityBody;
import org.ow2.bonita.facade.runtime.ActivityFullInstance;
import org.ow2.bonita.facade.runtime.ActivityState;
import org.ow2.bonita.facade.runtime.InstanceState;
import org.ow2.bonita.facade.runtime.ProcessFullInstance;
import org.ow2.bonita.facade.runtime.TaskFullInstance;
import org.ow2.bonita.facade.runtime.TaskInstance;
import org.ow2.bonita.facade.runtime.VariableUpdate;
import org.ow2.bonita.facade.runtime.impl.ActivityBodyFactory;
import org.ow2.bonita.facade.runtime.impl.ActivityBodyImpl;
import org.ow2.bonita.facade.runtime.impl.ActivityFullInstanceImpl;
import org.ow2.bonita.facade.runtime.impl.ProcessFullInstanceImpl;
import org.ow2.bonita.facade.runtime.impl.VariableUpdateFullImpl;
import org.ow2.bonita.facade.uuid.ActivityInstanceUUID;
import org.ow2.bonita.facade.uuid.ProcessInstanceUUID;
import org.ow2.bonita.services.Querier;
import org.ow2.bonita.services.Recorder;
import org.ow2.bonita.services.info.ActivityInstanceCurrentInfo;
import org.ow2.bonita.services.info.ProcessInstanceCurrentInfo;
import org.ow2.bonita.services.info.TaskCurrentInfo;
import org.ow2.bonita.services.util.ServiceEnvTool;
import org.ow2.bonita.util.BonitaConstants;
import org.ow2.bonita.util.Misc;

/**
 * @author Guillaume Porcher
 *
 */
public class DbJournal extends AbstractDbQuerier implements Recorder, Querier {

  public DbJournal(final String persistenceServiceName) {
    super(persistenceServiceName, new DbQuerierBufferImpl());
  }

  public void remove(final PackageFullDefinition pack) {
    Misc.checkArgsNotNull(pack);
    this.buffer.removePackage(pack);
    getQuerierDbSession().delete(pack);
  }

  public void remove(final ProcessFullInstance processInst) {
    Misc.checkArgsNotNull(processInst);
    this.buffer.removeInstance(processInst);
    getQuerierDbSession().delete(processInst);
  }

  public void recordEnterActivity(final ActivityInstanceCurrentInfo activityInstanceCurrentInfo) {

    Misc.checkArgsNotNull(activityInstanceCurrentInfo);

    final ActivityFullInstanceImpl activityRecord = new ActivityFullInstanceImpl(
        activityInstanceCurrentInfo.getActivityInstanceUUID(),
        activityInstanceCurrentInfo.getActivityId(),
        activityInstanceCurrentInfo.getPackageUUID(),
        activityInstanceCurrentInfo.getProcessUUID(),
        activityInstanceCurrentInfo.getInstanceUUID(),
        activityInstanceCurrentInfo.getIterationId(),
        activityInstanceCurrentInfo.getActivityInstanceId());

    final ActivityBodyImpl body = (ActivityBodyImpl)ActivityBodyFactory.getBody(activityRecord.getUUID(),
        activityInstanceCurrentInfo.getActivityType());
    activityRecord.setBody(body);

    body.setActivityState(ActivityState.READY, BonitaConstants.SYSTEM_USER);
    body.setReadyDate(new Date());

    final ProcessFullInstance processInstance = getProcessInstance(activityInstanceCurrentInfo.getInstanceUUID());
    processInstance.addActivity(activityRecord);
    activityRecord.setVariablesBeforeReady(activityInstanceCurrentInfo.getVariables());
  }

  public void recordBodyStarted(final ActivityInstanceCurrentInfo activityInstanceCurrentInfo) {
    Misc.checkArgsNotNull(activityInstanceCurrentInfo);

    final ActivityFullInstance activityInstance =
      getActivityInstance(
          activityInstanceCurrentInfo.getInstanceUUID(),
          activityInstanceCurrentInfo.getActivityId(),
          activityInstanceCurrentInfo.getIterationId(),
          activityInstanceCurrentInfo.getActivityInstanceId());

    final ActivityBodyImpl body = (ActivityBodyImpl)activityInstance.getBody();
    body.setStartedDate(new Date());
    if (!activityInstanceCurrentInfo.getActivityType().equals(ActivityType.task)) {
      body.setActivityState(ActivityState.EXECUTING, BonitaConstants.SYSTEM_USER);
    }
  }

  public void recordBodyEnded(final ActivityInstanceCurrentInfo activityInstanceCurrentInfo) {
    Misc.checkArgsNotNull(activityInstanceCurrentInfo);

    final ActivityFullInstance activityInstance =
      getActivityInstance(
          activityInstanceCurrentInfo.getInstanceUUID(),
          activityInstanceCurrentInfo.getActivityId(),
          activityInstanceCurrentInfo.getIterationId(),
          activityInstanceCurrentInfo.getActivityInstanceId());

    final ActivityBodyImpl body = (ActivityBodyImpl)activityInstance.getBody();
    body.setEndedDate(new Date());

    if (!activityInstanceCurrentInfo.getActivityType().equals(ActivityType.task)) {
      body.setActivityState(ActivityState.FINISHED, BonitaConstants.SYSTEM_USER);
    }
  }

  public void recordBodyAborted(final ActivityInstanceCurrentInfo activityInstanceCurrentInfo) {
    Misc.checkArgsNotNull(activityInstanceCurrentInfo);

    final ActivityFullInstance activityInstance =
      getActivityInstance(
          activityInstanceCurrentInfo.getInstanceUUID(),
          activityInstanceCurrentInfo.getActivityId(),
          activityInstanceCurrentInfo.getIterationId(),
          activityInstanceCurrentInfo.getActivityInstanceId());

    final ActivityBodyImpl body = (ActivityBodyImpl)activityInstance.getBody();
    body.setEndedDate(new Date());

    body.setActivityState(ActivityState.ABORTED, BonitaConstants.SYSTEM_USER);
  }

  public void recordBodyCancelled(final ActivityInstanceCurrentInfo activityInstanceCurrentInfo) {
    Misc.checkArgsNotNull(activityInstanceCurrentInfo);

    final ActivityFullInstance activityInstance =
      getActivityInstance(
          activityInstanceCurrentInfo.getInstanceUUID(),
          activityInstanceCurrentInfo.getActivityId(),
          activityInstanceCurrentInfo.getIterationId(),
          activityInstanceCurrentInfo.getActivityInstanceId());

    final ActivityBodyImpl body = (ActivityBodyImpl)activityInstance.getBody();
    body.setEndedDate(new Date());

    body.setActivityState(ActivityState.CANCELLED, ServiceEnvTool.getUserId());
  }

  public void recordInstanceEnded(final ProcessInstanceCurrentInfo processInstanceCurrentInfo) {
    Misc.checkArgsNotNull(processInstanceCurrentInfo);

    final ProcessFullInstanceImpl instanceRecord =
      (ProcessFullInstanceImpl) getProcessInstance(processInstanceCurrentInfo.getInstanceUUID());

    Misc.badStateIfNull(instanceRecord,
        "Ouch! Can't find the ProcessInstance for: "
        + processInstanceCurrentInfo.getInstanceUUID());
    instanceRecord.setEndedDate(new Date());
    instanceRecord.setEndedBy(processInstanceCurrentInfo.getUserId());
    instanceRecord.setInstanceState(InstanceState.FINISHED, processInstanceCurrentInfo.getUserId());

  }

  public void recordInstanceAborted(final ProcessInstanceCurrentInfo processInstanceCurrentInfo) {
    Misc.checkArgsNotNull(processInstanceCurrentInfo);

    final ProcessFullInstanceImpl instanceRecord =
      (ProcessFullInstanceImpl) getProcessInstance(processInstanceCurrentInfo.getInstanceUUID());

    Misc.badStateIfNull(instanceRecord,
        "Ouch! Can't find the ProcessInstance for: "
        + processInstanceCurrentInfo.getInstanceUUID());
    instanceRecord.setEndedDate(new Date());
    instanceRecord.setEndedBy(BonitaConstants.SYSTEM_USER);
    instanceRecord.setInstanceState(InstanceState.ABORTED, processInstanceCurrentInfo.getUserId());

  }

  public void recordInstanceCancelled(final ProcessInstanceCurrentInfo processInstanceCurrentInfo) {
    Misc.checkArgsNotNull(processInstanceCurrentInfo);

    final ProcessFullInstanceImpl instanceRecord =
      (ProcessFullInstanceImpl) getProcessInstance(processInstanceCurrentInfo.getInstanceUUID());

    Misc.badStateIfNull(instanceRecord,
        "Ouch! Can't find the ProcessInstance for: "
        + processInstanceCurrentInfo.getInstanceUUID());
    instanceRecord.setEndedDate(new Date());
    instanceRecord.setEndedBy(ServiceEnvTool.getUserId());
    instanceRecord.setInstanceState(InstanceState.CANCELLED, processInstanceCurrentInfo.getUserId());
  }

  public void recordInstanceStarted(final ProcessInstanceCurrentInfo processInstanceCurrentInfo) {
    Misc.checkArgsNotNull(processInstanceCurrentInfo);

    if (processInstanceCurrentInfo.getParentInstanceUUID() != null) {
      getProcessInstance(
        processInstanceCurrentInfo.getParentInstanceUUID()
      ).addChildInstance(processInstanceCurrentInfo.getInstanceUUID());
    }
    final ProcessFullInstanceImpl instanceRecord =
      new ProcessFullInstanceImpl(processInstanceCurrentInfo.getInstanceUUID(),
          processInstanceCurrentInfo.getPackageUUID(),
          processInstanceCurrentInfo.getProcessUUID(),
          processInstanceCurrentInfo.getParentInstanceUUID(),
          processInstanceCurrentInfo.getVariables());
    instanceRecord.setStartedDate(new Date());
    Misc.badStateIfNull(processInstanceCurrentInfo.getUserId(), "Ouch! Can't get the user id from the environment!");
    instanceRecord.setStartedBy(processInstanceCurrentInfo.getUserId());
    instanceRecord.setInstanceState(InstanceState.STARTED, processInstanceCurrentInfo.getUserId());
    this.buffer.addInstance(instanceRecord);
    getQuerierDbSession().save(instanceRecord);
  }

  public void recordTaskFinished(final TaskCurrentInfo taskCurrentInfo) {
    Misc.checkArgsNotNull(taskCurrentInfo);

    final ActivityFullInstance< TaskInstance > activity = getTaskInstance(taskCurrentInfo.getTaskUUID());
    final TaskFullInstance taskInst = (TaskFullInstance) activity.getBody();
    Misc.badStateIfNull(taskInst, "Ouch! Can't find the TaskInstance for: " + taskInst.getUUID());
    taskInst.setEndedBy(taskCurrentInfo.getLoggedInUserId());
    taskInst.setActivityState(ActivityState.FINISHED, taskCurrentInfo.getLoggedInUserId());
  }

  public void recordTaskReady(final TaskCurrentInfo taskCurrentInfo) {
    Misc.checkArgsNotNull(taskCurrentInfo);

    final ActivityFullInstance< TaskInstance > activity = getTaskInstance(taskCurrentInfo.getTaskUUID());
    final TaskFullInstance taskRecord = (TaskFullInstance) activity.getBody();
    Misc.badStateIfNull(taskRecord, "Ouch! Can't find the TaskInstance for: " + taskCurrentInfo.getTaskUUID());
    taskRecord.setTaskAssign(ActivityState.READY, BonitaConstants.SYSTEM_USER, taskCurrentInfo.getCandidates(), taskCurrentInfo.getAssignedUserId());
    taskRecord.setDueDate(taskCurrentInfo.getDueDate());
  }

  public void recordTaskStarted(final TaskCurrentInfo taskCurrentInfo) {
    Misc.checkArgsNotNull(taskCurrentInfo);

    final ActivityFullInstance< TaskInstance > activity = getTaskInstance(taskCurrentInfo.getTaskUUID());
    final TaskFullInstance taskRecord = (TaskFullInstance) activity.getBody();
    Misc.badStateIfNull(taskRecord, "Ouch! Can't find the TaskInstance for: " + taskCurrentInfo.getTaskUUID());
    taskRecord.setStartedBy(taskCurrentInfo.getLoggedInUserId());
    taskRecord.setActivityState(ActivityState.EXECUTING, taskCurrentInfo.getLoggedInUserId());
    //taskRecord.setUserId(userId);
  }

  public void recordTaskResumed(final TaskCurrentInfo taskCurrentInfo) {
    Misc.checkArgsNotNull(taskCurrentInfo);

    final ActivityFullInstance< TaskInstance > activity = getTaskInstance(taskCurrentInfo.getTaskUUID());
    final TaskFullInstance taskRecord = (TaskFullInstance) activity.getBody();
    taskRecord.setActivityState(taskCurrentInfo.getTaskState(), taskCurrentInfo.getLoggedInUserId());
    //taskInst.setUserId(userIdBeforeSuspend);
  }
  public void recordTaskSuspended(final TaskCurrentInfo taskCurrentInfo) {
    Misc.checkArgsNotNull(taskCurrentInfo);

    final ActivityFullInstance< TaskInstance > activity = getTaskInstance(taskCurrentInfo.getTaskUUID());
    final TaskFullInstance taskRecord = (TaskFullInstance) activity.getBody();
    taskRecord.setActivityState(ActivityState.SUSPENDED, taskCurrentInfo.getLoggedInUserId());
    //taskInst.setUserId(userId);
  }

  public void recordTaskAssigned(final TaskCurrentInfo taskCurrentInfo) {
    Misc.checkArgsNotNull(taskCurrentInfo);

    final ActivityFullInstance< TaskInstance > activity = getTaskInstance(taskCurrentInfo.getTaskUUID());
    final TaskFullInstance taskRecord = (TaskFullInstance) activity.getBody();
    taskRecord.setTaskAssign(taskCurrentInfo.getTaskState(),
        taskCurrentInfo.getLoggedInUserId(),
        taskCurrentInfo.getCandidates(),
        taskCurrentInfo.getAssignedUserId());
  }

  public void recordPackageDeployed(final PackageFullDefinition packageDef) {
    Misc.checkArgsNotNull(packageDef);
    this.buffer.addPackage(packageDef);
    getQuerierDbSession().save(packageDef);
  }

  public void recordPackageUndeployed(final PackageFullDefinition packageDef, final String userId) {
    Misc.checkArgsNotNull(packageDef, userId);
    packageDef.setUndeployedBy(userId);
    packageDef.setUndeployedDate(new Date());
    packageDef.setState(PackageState.UNDEPLOYED);
    for (ProcessFullDefinition process : packageDef.getProcesses()) {
      process.setState(ProcessState.UNDEPLOYED);
    }
  }

  public void recordActivityVariableUpdated(final String variableId,
      final Object variableValue, final ActivityInstanceUUID activityUUID,
      final String userId) {
    Misc.checkArgsNotNull(variableId, variableValue, activityUUID, userId);

    final ActivityFullInstance activityInst = getActivityInstance(activityUUID);
    final VariableUpdate varUpdate = new VariableUpdateFullImpl(new Date(), userId, variableId, variableValue);
    activityInst.addVariableUpdate(varUpdate);
  }

  public void recordInstanceVariableUpdated(final String variableId, final Object variableValue,
      final ProcessInstanceUUID instanceUUID, final String userId) {
    Misc.checkArgsNotNull(variableId, variableValue, instanceUUID, userId);

    final ProcessFullInstance processInst = getProcessInstance(instanceUUID);
    final VariableUpdate varUpdate = new VariableUpdateFullImpl(new Date(), userId, variableId, variableValue);
    processInst.addVariableUpdate(varUpdate);
  }


}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy