
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.
*
* Modified by Matthieu Chaffotte - BonitaSoft S.A.
**/
package org.ow2.bonita.persistence.db;
import java.util.Date;
import java.util.Map;
import java.util.Set;
import org.ow2.bonita.facade.def.majorElement.ActivityDefinition;
import org.ow2.bonita.facade.def.majorElement.ProcessDefinition;
import org.ow2.bonita.facade.def.majorElement.ProcessDefinition.ProcessState;
import org.ow2.bonita.facade.def.majorElement.impl.ProcessDefinitionImpl;
import org.ow2.bonita.facade.runtime.ActivityInstance;
import org.ow2.bonita.facade.runtime.ActivityState;
import org.ow2.bonita.facade.runtime.InstanceState;
import org.ow2.bonita.facade.runtime.ProcessInstance;
import org.ow2.bonita.facade.runtime.StateUpdate;
import org.ow2.bonita.facade.runtime.TaskInstance;
import org.ow2.bonita.facade.runtime.VariableUpdate;
import org.ow2.bonita.facade.runtime.impl.ActivityInstanceImpl;
import org.ow2.bonita.facade.runtime.impl.ProcessInstanceImpl;
import org.ow2.bonita.facade.runtime.impl.VariableUpdateImpl;
import org.ow2.bonita.facade.uuid.ActivityInstanceUUID;
import org.ow2.bonita.facade.uuid.ProcessInstanceUUID;
import org.ow2.bonita.pvm.internal.type.Variable;
import org.ow2.bonita.services.Querier;
import org.ow2.bonita.services.Recorder;
import org.ow2.bonita.util.BonitaConstants;
import org.ow2.bonita.util.CopyTool;
import org.ow2.bonita.util.EnvTool;
import org.ow2.bonita.util.ExceptionManager;
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 ProcessDefinition pack) {
Misc.checkArgsNotNull(pack);
this.buffer.removeProcess(pack);
getQuerierDbSession().delete(pack);
}
public void remove(final ProcessInstance processInst) {
Misc.checkArgsNotNull(processInst);
this.buffer.removeInstance(processInst);
getQuerierDbSession().delete(processInst);
}
public void recordEnterActivity(
final ActivityDefinition activityDefinition,
final ActivityInstanceUUID activityInstanceUUID,
final String iterationId,
final String activityInstanceId,
Map initialVariables) {
Misc.checkArgsNotNull(activityDefinition, activityInstanceUUID, iterationId, activityInstanceId);
ActivityInstanceImpl activityRecord = new ActivityInstanceImpl(
activityInstanceUUID,
activityDefinition.getName(),
activityDefinition.getLabel(),
activityDefinition.getDescription(),
activityDefinition.getProcessDefinitionUUID(),
activityInstanceUUID.getProcessInstanceUUID(),
iterationId,
activityInstanceId,
!activityDefinition.isAutomatic());
activityRecord.setActivityState(ActivityState.READY, BonitaConstants.SYSTEM_USER);
final ProcessInstance processInstance = getProcessInstance(activityInstanceUUID.getProcessInstanceUUID());
((ProcessInstanceImpl)processInstance).addActivity(activityRecord);
activityRecord.setVariablesBeforeReady(initialVariables);
}
public void recordBodyStarted(final ActivityInstanceUUID activityInstanceUUID) {
Misc.checkArgsNotNull(activityInstanceUUID);
final ActivityInstance activityInstance = getActivityInstance(activityInstanceUUID);
if (!activityInstance.isTask()) {
((ActivityInstanceImpl)activityInstance).setActivityState(ActivityState.EXECUTING, BonitaConstants.SYSTEM_USER);
}
}
public void recordBodyEnded(final ActivityInstanceUUID activityInstanceUUID) {
Misc.checkArgsNotNull(activityInstanceUUID);
final ActivityInstance activityInstance = getActivityInstance(activityInstanceUUID);
if (!activityInstance.isTask()) {
((ActivityInstanceImpl)activityInstance).setActivityState(ActivityState.FINISHED, BonitaConstants.SYSTEM_USER);
}
}
public void recordBodyAborted(final ActivityInstanceUUID activityInstanceUUID) {
Misc.checkArgsNotNull(activityInstanceUUID);
final ActivityInstance activityInstance = getActivityInstance(activityInstanceUUID);
((ActivityInstanceImpl)activityInstance).setActivityState(ActivityState.ABORTED, BonitaConstants.SYSTEM_USER);
}
public void recordBodyCancelled(final ActivityInstanceUUID activityInstanceUUID) {
Misc.checkArgsNotNull(activityInstanceUUID);
final ActivityInstance activityInstance = getActivityInstance(activityInstanceUUID);
((ActivityInstanceImpl)activityInstance).setActivityState(ActivityState.CANCELLED, EnvTool.getUserId());
}
public void recordInstanceEnded(final ProcessInstanceUUID instanceUUID, final String loggedInUserId) {
Misc.checkArgsNotNull(instanceUUID);
final ProcessInstance instanceRecord = getProcessInstance(instanceUUID);
String message = ExceptionManager.getInstance().getFullMessage(
"bsi_DJ_1", instanceUUID);
Misc.badStateIfNull(instanceRecord, message);
((ProcessInstanceImpl)instanceRecord).setInstanceState(InstanceState.FINISHED, loggedInUserId);
}
public void recordInstanceAborted(final ProcessInstanceUUID instanceUUID, final String loggedInUserId) {
Misc.checkArgsNotNull(instanceUUID);
final ProcessInstance instanceRecord = getProcessInstance(instanceUUID);
String message = ExceptionManager.getInstance().getFullMessage(
"bsi_DJ_2", instanceUUID);
Misc.badStateIfNull(instanceRecord, message);
((ProcessInstanceImpl)instanceRecord).setInstanceState(InstanceState.ABORTED, loggedInUserId);
}
public void recordInstanceCancelled(final ProcessInstanceUUID instanceUUID, final String loggedInUserId) {
Misc.checkArgsNotNull(instanceUUID);
final ProcessInstance instanceRecord = getProcessInstance(instanceUUID);
String message = ExceptionManager.getInstance().getFullMessage(
"bsi_DJ_3", instanceUUID);
Misc.badStateIfNull(instanceRecord, message);
((ProcessInstanceImpl)instanceRecord).setInstanceState(InstanceState.CANCELLED, loggedInUserId);
}
public void recordInstanceStarted(final ProcessInstanceUUID instanceUUID, final ProcessInstanceUUID parentInstanceUUID, final String loggedInUserId, Map variables) {
Misc.checkArgsNotNull(instanceUUID);
if (parentInstanceUUID != null) {
ProcessInstance instance = getProcessInstance(parentInstanceUUID);
((ProcessInstanceImpl)instance).addChildInstance(instanceUUID);
}
final ProcessInstance instanceRecord =
new ProcessInstanceImpl(instanceUUID,
instanceUUID.getProcessDefinitionUUID(),
parentInstanceUUID, variables);
String message = ExceptionManager.getInstance().getFullMessage("bsi_DJ_4");
Misc.badStateIfNull(loggedInUserId, message);
((ProcessInstanceImpl)instanceRecord).setInstanceState(InstanceState.STARTED, loggedInUserId);
this.buffer.addInstance(instanceRecord);
getQuerierDbSession().save(instanceRecord);
}
public void recordTaskFinished(final ActivityInstanceUUID taskUUID, final String loggedInUserId) {
Misc.checkArgsNotNull(taskUUID);
final TaskInstance activity = getTaskInstance(taskUUID);
String message = ExceptionManager.getInstance().getFullMessage(
"bsi_DJ_5", taskUUID);
Misc.badStateIfNull(activity, message);
((ActivityInstanceImpl)activity).setActivityState(ActivityState.FINISHED, loggedInUserId);
}
public void recordTaskReady(final ActivityInstanceUUID taskUUID, final Set candidates, final String userId) {
Misc.checkArgsNotNull(taskUUID);
final TaskInstance activity = getTaskInstance(taskUUID);
String message = ExceptionManager.getInstance().getFullMessage(
"bsi_DJ_6", taskUUID);
Misc.badStateIfNull(activity, message);
((ActivityInstanceImpl)activity).setTaskAssign(ActivityState.READY, BonitaConstants.SYSTEM_USER, candidates, userId);
}
public void recordTaskStarted(final ActivityInstanceUUID taskUUID, final String loggedInUserId) {
Misc.checkArgsNotNull(taskUUID);
final TaskInstance activity = getTaskInstance(taskUUID);
String message = ExceptionManager.getInstance().getFullMessage(
"bsi_DJ_7", taskUUID);
Misc.badStateIfNull(activity, message);
((ActivityInstanceImpl)activity).setActivityState(ActivityState.EXECUTING, loggedInUserId);
}
public void recordTaskResumed(final ActivityInstanceUUID taskUUID, final String loggedInUserId) {
Misc.checkArgsNotNull(taskUUID);
final TaskInstance task = getTaskInstance(taskUUID);
ActivityState stateBeforeSuspend = null;
for (StateUpdate su : task.getStateUpdates()) {
if (su.getActivityState().equals(ActivityState.SUSPENDED)) {
stateBeforeSuspend = su.getInitialState();
}
}
((ActivityInstanceImpl)task).setActivityState(stateBeforeSuspend, loggedInUserId);
}
public void recordTaskSuspended(final ActivityInstanceUUID taskUUID, final String loggedInUserId) {
Misc.checkArgsNotNull(taskUUID);
final TaskInstance activity = getTaskInstance(taskUUID);
((ActivityInstanceImpl)activity).setActivityState(ActivityState.SUSPENDED, loggedInUserId);
}
public void recordTaskAssigned(final ActivityInstanceUUID taskUUID,
final ActivityState taskState, final String loggedInUserId,
final Set candidates, final String assignedUserId) {
Misc.checkArgsNotNull(taskUUID);
final TaskInstance activity = getTaskInstance(taskUUID);
((ActivityInstanceImpl)activity).setTaskAssign(taskState, loggedInUserId, candidates, assignedUserId);
}
public void recordProcessDeployed(final ProcessDefinition processDef, final String userId) {
Misc.checkArgsNotNull(processDef);
this.buffer.addProcess(processDef);
((ProcessDefinitionImpl)processDef).setState(ProcessState.ENABLED);
((ProcessDefinitionImpl)processDef).setDeployedDate(new Date());
((ProcessDefinitionImpl)processDef).setDeployedBy(userId);
getQuerierDbSession().save(processDef);
}
public void recordProcessEnable(final ProcessDefinition processDef) {
Misc.checkArgsNotNull(processDef);
this.buffer.addProcess(processDef);
((ProcessDefinitionImpl)processDef).setState(ProcessState.ENABLED);
}
public void recordProcessDisable(final ProcessDefinition processDef) {
Misc.checkArgsNotNull(processDef);
this.buffer.removeProcess(processDef);
((ProcessDefinitionImpl)processDef).setState(ProcessState.DISABLED);
}
public void recordProcessArchive(final ProcessDefinition processDef, final String userId) {
Misc.checkArgsNotNull(processDef);
ProcessDefinitionImpl impl = (ProcessDefinitionImpl) processDef;
impl.setUndeployedBy(userId);
impl.setUndeployedDate(new Date());
impl.setState(ProcessState.ARCHIVED);
}
public void recordProcessUndeployed(final ProcessDefinition processDef) {
recordProcessDisable(processDef);
}
public void recordActivityVariableUpdated(final String variableId,
final Object variableValue, final ActivityInstanceUUID activityUUID,
final String userId) {
Misc.checkArgsNotNull(variableId, variableValue, activityUUID, userId);
final ActivityInstance activityInst = getActivityInstance(activityUUID);
final Variable v = CopyTool.createVariable(variableId, variableValue);
final VariableUpdate varUpdate = new VariableUpdateImpl(new Date(), userId, variableId, v);
((ActivityInstanceImpl)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 ProcessInstance processInst = getProcessInstance(instanceUUID);
final Variable v = CopyTool.createVariable(variableId, variableValue);
final VariableUpdate varUpdate = new VariableUpdateImpl(new Date(), userId, variableId, v);
((ProcessInstanceImpl)processInst).addVariableUpdate(varUpdate);
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy