
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