
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