Package jadex.bpmn.runtime
Class ProcessThread
- java.lang.Object
-
- jadex.bpmn.runtime.ProcessThread
-
- All Implemented Interfaces:
ITaskContext
public class ProcessThread extends java.lang.Object implements ITaskContext
Representation of a single control flow in a BPMN process instance, i.e. an instance of a sequence flow.
-
-
Field Summary
Fields Modifier and Type Field Description protected MActivity
activity
The next activity.protected boolean
canceled
Is the task canceled.protected ICancelable
cancelinfo
The wait info.protected java.util.Map<java.lang.String,java.lang.Object>
data
The data of the current or last activity.protected java.util.Map<java.lang.String,java.lang.Object>
dataedges
The data of the current data edges.protected MSequenceEdge
edge
The last edge (if any).protected java.lang.Exception
exception
The exception that has just occurred in the process (if any).protected java.lang.String
id
The thread id.int
idcnt
The id counter for sub processes.protected IInternalAccess
instance
The Bpmn instance.protected IResultCommand<java.lang.Boolean,java.lang.Void>
loopcmd
The loop command.protected ProcessThread
parent
The parent process thread.protected SubProcessActivityHandler.SubprocessResultHandler
resulthandler
The subprocess intermediate result received command.java.util.Map<java.lang.String,SplitInfo>
splitinfos
The split infos.protected java.util.List<ProcessThread>
subthreads
The subthreads.protected ITask
task
The current task.protected IFilter<java.lang.Object>
waitfilter
The wait filter.protected boolean
waiting
Is the process in a waiting state.
-
Constructor Summary
Constructors Constructor Description ProcessThread(MActivity activity, ProcessThread parent, IInternalAccess instance)
Create a new process instance.ProcessThread(MActivity activity, ProcessThread parent, IInternalAccess instance, boolean passive)
Create a new process instance.
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description void
addExternalThread(ProcessThread thread)
Add an external thread to this context.void
addSplitInfo(SplitInfo spi)
Add a split info.void
addThread(ProcessThread thread)
Add a thread to this context.boolean
belongsTo(java.lang.String pool, java.lang.String lane)
Test if the thread belongs to the given pool and/or lane.void
copy(ProcessThread ret)
Create a copy of this thread (e.g. for a parallel split).ProcessThread
createCopy()
Create a copy of this thread (e.g. for a parallel split).MActivity
getActivity()
Get the activity.java.util.Set<java.lang.String>
getAllParameterNames()
Get the name of all parameters.java.util.Set<ProcessThread>
getAllThreads()
Get all threads of the context and all subcontexts.protected IInternalBpmnComponentFeature
getBpmnFeature(IInternalAccess ia)
Get the bpmn feature.MBpmnModel
getBpmnModel()
Get the model.java.util.Map<java.lang.String,java.lang.Object>
getData()
Get the data.java.util.Map<java.lang.String,java.lang.Object>
getDataEdges()
Get the data edges.protected java.util.Map<java.lang.String,java.lang.Object>
getDataEdgeValues()
java.lang.Exception
getException()
Get the exception (if any).ProcessThread
getExecutableThread(java.lang.String pool, java.lang.String lane)
Get an executable thread in the context or its sub contexts.java.lang.String
getId()
Get the id.IInternalAccess
getInstance()
Get the instance.MSequenceEdge
getLastEdge()
Get the last edge (if any).IResultCommand<java.lang.Boolean,java.lang.Void>
getLoopCommand()
Get the loopcmd.MActivity
getModelElement()
Get the model element.protected java.lang.String
getNextChildId()
Get a cnt for subprocesses.java.lang.String[]
getParameterNames()
Get the name of all parameters.java.util.Map<java.lang.String,java.lang.Object>
getParameters()
Get the parameters.java.lang.Object
getParameterValue(java.lang.String name)
Get the value of a parameter.ProcessThread
getParent()
Get the parent.java.lang.Object
getPropertyValue(java.lang.String name)
Get the value of a property.java.lang.Object
getPropertyValue(java.lang.String name, MActivity activity)
Hack: method is necessary because thread.activity is not always the activity to execute in case of multiple event.SplitInfo
getSplitInfo(java.lang.String id)
Get a specific split info, if available.java.util.Collection<SplitInfo>
getSplitInfos()
Get the split infos.java.util.List<ProcessThread>
getSubthreads()
Get the subthreads.ITask
getTask()
Gets the current task.ProcessThread
getThread(java.lang.String id)
Get a thread per id.IFilter<java.lang.Object>
getWaitFilter()
Get the wait filter.ICancelable
getWaitInfo()
Get the waitinfo.boolean
hasOwnParameterValue(java.lang.String name)
Test if a parameter has been set on activity.boolean
hasParameterValue(java.lang.String name)
Test if a parameter has been set on activity.boolean
hasPropertyValue(java.lang.String name)
Test, if a property is declared.boolean
hasSubthreads()
Test if thread has subthreads.protected void
internalSetParameterValue(java.lang.String name, java.lang.Object key, java.lang.Object value, ProcessThread start)
Set the value of a parameter.boolean
isCanceled()
Is the current task canceled?boolean
isFinished(java.lang.String pool, java.lang.String lane)
The context is finished, when there are no (more) threads to execute.boolean
isWaiting()
Is the process in a waiting state (i.e. blocked)?void
notifyFinished()
Method that can be used to determine (override) that the thread is finished.void
removeParameterValue(java.lang.String name)
Remove the value of a parameter.void
removeSplitInfo(SplitInfo spi)
Remove the split info.void
removeSubcontext()
Remove a sub context but keep the corresponding thread.void
removeThread(ProcessThread thread)
Remove a thread from this context.protected void
scheduleExecution()
Schedule notification of this thread.void
setActivity(MActivity activity)
Set the next activity.void
setCanceled(boolean canceled)
Set the canceled state.void
setDataEdgeValue(java.lang.String name, java.lang.Object value)
Set the value of a parameter.void
setException(java.lang.Exception exception)
Set the exception.void
setLastEdge(MSequenceEdge edge)
Set the last edge.void
setLoopCommand(IResultCommand<java.lang.Boolean,java.lang.Void> loopcmd)
Set the loopcmd.void
setNonWaiting()
Set to non waiting.void
setOrCreateParameterValue(java.lang.String name, java.lang.Object value)
Set or create a parameter value directly in this thread.void
setOrCreateParameterValue(java.lang.String name, java.lang.Object key, java.lang.Object value)
Set or create a parameter value directly in this thread.void
setParameterValue(java.lang.String name, java.lang.Object value)
Set the value of a parameter.void
setParameterValue(java.lang.String name, java.lang.Object key, java.lang.Object value)
Set the value of a parameter.void
setParent(ProcessThread parent)
Set the parent.void
setTask(ITask task)
Sets the current task.void
setWaitFilter(IFilter<java.lang.Object> waitfilter)
Set the wait filter.void
setWaitInfo(ICancelable cancelinfo)
Set the process waiting info.void
setWaiting(boolean waiting)
Set the waiting state.java.lang.String
toString()
Create a string representation of this process thread.void
updateParametersAfterStep(MActivity activity, IInternalAccess instance)
Remove in parameters after step.void
updateParametersBeforeStep(IInternalAccess instance)
Update parameters based on edge inscriptions and initial values.
-
-
-
Field Detail
-
id
protected java.lang.String id
The thread id.
-
activity
protected MActivity activity
The next activity.
-
edge
protected MSequenceEdge edge
The last edge (if any).
-
data
protected java.util.Map<java.lang.String,java.lang.Object> data
The data of the current or last activity.
-
dataedges
protected java.util.Map<java.lang.String,java.lang.Object> dataedges
The data of the current data edges.
-
parent
protected ProcessThread parent
The parent process thread.
-
subthreads
protected java.util.List<ProcessThread> subthreads
The subthreads.
-
instance
protected IInternalAccess instance
The Bpmn instance.
-
exception
protected java.lang.Exception exception
The exception that has just occurred in the process (if any).
-
waiting
protected boolean waiting
Is the process in a waiting state.
-
cancelinfo
protected ICancelable cancelinfo
The wait info.
-
waitfilter
protected IFilter<java.lang.Object> waitfilter
The wait filter.
-
task
protected ITask task
The current task.
-
canceled
protected boolean canceled
Is the task canceled.
-
idcnt
public int idcnt
The id counter for sub processes.
-
splitinfos
public java.util.Map<java.lang.String,SplitInfo> splitinfos
The split infos.
-
loopcmd
protected IResultCommand<java.lang.Boolean,java.lang.Void> loopcmd
The loop command.
-
resulthandler
protected SubProcessActivityHandler.SubprocessResultHandler resulthandler
The subprocess intermediate result received command.
-
-
Constructor Detail
-
ProcessThread
public ProcessThread(MActivity activity, ProcessThread parent, IInternalAccess instance)
Create a new process instance.- Parameters:
activity
- The current activity.
-
ProcessThread
public ProcessThread(MActivity activity, ProcessThread parent, IInternalAccess instance, boolean passive)
Create a new process instance.- Parameters:
activity
- The current activity.
-
-
Method Detail
-
getBpmnModel
public MBpmnModel getBpmnModel()
Get the model.- Specified by:
getBpmnModel
in interfaceITaskContext
- Returns:
- The bpmn model.
-
getId
public java.lang.String getId()
Get the id.- Returns:
- The id.
-
getActivity
public MActivity getActivity()
Get the activity.- Specified by:
getActivity
in interfaceITaskContext
- Returns:
- The activity.
-
setActivity
public void setActivity(MActivity activity)
Set the next activity. Sets the last edge to null. Should only be used, when no edge available (e.g. start events or event handlers of subprocesses).
-
isCanceled
public boolean isCanceled()
Is the current task canceled?- Returns:
- The canceled flag.
-
setCanceled
public void setCanceled(boolean canceled)
Set the canceled state.- Parameters:
canceled
- True, if canceled.
-
getTask
public ITask getTask()
Gets the current task.- Returns:
- The current task.
-
setTask
public void setTask(ITask task)
Sets the current task.- Parameters:
task
- The current task.
-
getLastEdge
public MSequenceEdge getLastEdge()
Get the last edge (if any).- Returns:
- The edge.
-
setLastEdge
public void setLastEdge(MSequenceEdge edge)
Set the last edge. Also sets the next activity.- Parameters:
edge
- The edge.
-
isWaiting
public boolean isWaiting()
Is the process in a waiting state (i.e. blocked)?- Returns:
- The waiting flag.
-
setWaiting
public void setWaiting(boolean waiting)
Set the waiting state.
-
setNonWaiting
public void setNonWaiting()
Set to non waiting.
-
scheduleExecution
protected void scheduleExecution()
Schedule notification of this thread.
-
setWaitInfo
public void setWaitInfo(ICancelable cancelinfo)
Set the process waiting info.- Parameters:
waiting
- The waiting info.
-
getWaitInfo
public ICancelable getWaitInfo()
Get the waitinfo.- Returns:
- The waitinfo.
-
getWaitFilter
public IFilter<java.lang.Object> getWaitFilter()
Get the wait filter.- Returns:
- The waitfilter.
-
setWaitFilter
public void setWaitFilter(IFilter<java.lang.Object> waitfilter)
Set the wait filter.- Parameters:
waitfilter
- The waitfilter to set.
-
createCopy
public ProcessThread createCopy()
Create a copy of this thread (e.g. for a parallel split).
-
copy
public void copy(ProcessThread ret)
Create a copy of this thread (e.g. for a parallel split).
-
hasOwnParameterValue
public boolean hasOwnParameterValue(java.lang.String name)
Test if a parameter has been set on activity.- Parameters:
name
- The parameter name.- Returns:
- True if parameter is known.
-
hasParameterValue
public boolean hasParameterValue(java.lang.String name)
Test if a parameter has been set on activity.- Specified by:
hasParameterValue
in interfaceITaskContext
- Parameters:
name
- The parameter name.- Returns:
- True if parameter is known.
-
getModelElement
public MActivity getModelElement()
Get the model element.- Specified by:
getModelElement
in interfaceITaskContext
- Returns:
- The model of the task.
-
getParameterValue
public java.lang.Object getParameterValue(java.lang.String name)
Get the value of a parameter.- Specified by:
getParameterValue
in interfaceITaskContext
- Parameters:
name
- The parameter name.- Returns:
- The parameter value.
-
getParameters
public java.util.Map<java.lang.String,java.lang.Object> getParameters()
Get the parameters.- Returns:
- The parameters.
-
setDataEdgeValue
public void setDataEdgeValue(java.lang.String name, java.lang.Object value)
Set the value of a parameter.- Parameters:
name
- The parameter name.value
- The parameter value.
-
setParameterValue
public void setParameterValue(java.lang.String name, java.lang.Object value)
Set the value of a parameter.- Specified by:
setParameterValue
in interfaceITaskContext
- Parameters:
name
- The parameter name.value
- The parameter value.
-
setParameterValue
public void setParameterValue(java.lang.String name, java.lang.Object key, java.lang.Object value)
Set the value of a parameter.- Specified by:
setParameterValue
in interfaceITaskContext
- Parameters:
name
- The parameter name.value
- The parameter value.key
- An optional helper (index, key etc.)
-
internalSetParameterValue
protected void internalSetParameterValue(java.lang.String name, java.lang.Object key, java.lang.Object value, ProcessThread start)
Set the value of a parameter.- Parameters:
name
- The parameter name.value
- The parameter value.
-
setOrCreateParameterValue
public void setOrCreateParameterValue(java.lang.String name, java.lang.Object value)
Set or create a parameter value directly in this thread.- Specified by:
setOrCreateParameterValue
in interfaceITaskContext
- Parameters:
name
- The parameter name.value
- The parameter value.
-
setOrCreateParameterValue
public void setOrCreateParameterValue(java.lang.String name, java.lang.Object key, java.lang.Object value)
Set or create a parameter value directly in this thread.- Specified by:
setOrCreateParameterValue
in interfaceITaskContext
- Parameters:
name
- The parameter name.key
- An optional helper (index, key etc.)value
- The parameter value.
-
removeParameterValue
public void removeParameterValue(java.lang.String name)
Remove the value of a parameter.- Parameters:
name
- The parameter name.
-
getParameterNames
public java.lang.String[] getParameterNames()
Get the name of all parameters.- Returns:
- The parameter names.
-
getAllParameterNames
public java.util.Set<java.lang.String> getAllParameterNames()
Get the name of all parameters.- Returns:
- The parameter names.
-
getPropertyValue
public java.lang.Object getPropertyValue(java.lang.String name)
Get the value of a property.- Specified by:
getPropertyValue
in interfaceITaskContext
- Parameters:
name
- The property name.- Returns:
- The property value.
-
getPropertyValue
public java.lang.Object getPropertyValue(java.lang.String name, MActivity activity)
Hack: method is necessary because thread.activity is not always the activity to execute in case of multiple event. Get the value of a property.- Parameters:
name
- The property name.- Returns:
- The property value.
-
hasPropertyValue
public boolean hasPropertyValue(java.lang.String name)
Test, if a property is declared.- Parameters:
name
- The property name.- Returns:
- True, if the property is declared.
-
getException
public java.lang.Exception getException()
Get the exception (if any).- Returns:
- The exception (if any).
-
setException
public void setException(java.lang.Exception exception)
Set the exception.- Parameters:
exception
- The exception.
-
getInstance
public IInternalAccess getInstance()
Get the instance.- Returns:
- The instance.
-
getDataEdges
public java.util.Map<java.lang.String,java.lang.Object> getDataEdges()
Get the data edges.- Returns:
- The data edges.
-
getData
public java.util.Map<java.lang.String,java.lang.Object> getData()
Get the data.- Returns:
- The data.
-
belongsTo
public boolean belongsTo(java.lang.String pool, java.lang.String lane)
Test if the thread belongs to the given pool and/or lane.- Parameters:
pool
- The pool to be executed or null for any.lane
- The lane to be executed or null for any. Nested lanes may be addressed by dot-notation, e.g. 'OuterLane.InnerLane'.- Returns:
- True, when the thread belongs to the given pool and/or lane. Also returns true when both pool and lane are null.
-
updateParametersBeforeStep
public void updateParametersBeforeStep(IInternalAccess instance)
Update parameters based on edge inscriptions and initial values.- Parameters:
instance
- The calling BPMN instance.
-
getDataEdgeValues
protected java.util.Map<java.lang.String,java.lang.Object> getDataEdgeValues()
-
updateParametersAfterStep
public void updateParametersAfterStep(MActivity activity, IInternalAccess instance)
Remove in parameters after step.- Parameters:
instance
- The calling BPMN instance.
-
getSplitInfos
public java.util.Collection<SplitInfo> getSplitInfos()
Get the split infos.
-
getSplitInfo
public SplitInfo getSplitInfo(java.lang.String id)
Get a specific split info, if available.
-
addSplitInfo
public void addSplitInfo(SplitInfo spi)
Add a split info.
-
removeSplitInfo
public void removeSplitInfo(SplitInfo spi)
Remove the split info.
-
removeSubcontext
public void removeSubcontext()
Remove a sub context but keep the corresponding thread. E.g. when a sub process terminates, the sub context is removed and the initiating thread continues in the outer context.- Parameters:
context
- The sub context to be removed.
-
removeThread
public void removeThread(ProcessThread thread)
Remove a thread from this context.- Parameters:
thread
- The thread to be removed.
-
addThread
public void addThread(ProcessThread thread)
Add a thread to this context.- Parameters:
thread
- The thread to be added.
-
addExternalThread
public void addExternalThread(ProcessThread thread)
Add an external thread to this context.- Parameters:
thread
- The thread to be added.
-
getAllThreads
public java.util.Set<ProcessThread> getAllThreads()
Get all threads of the context and all subcontexts.
-
getParent
public ProcessThread getParent()
Get the parent. return The parent.
-
setParent
public void setParent(ProcessThread parent)
Set the parent.- Parameters:
parent
- The parent to set.
-
getSubthreads
public java.util.List<ProcessThread> getSubthreads()
Get the subthreads.
-
hasSubthreads
public boolean hasSubthreads()
Test if thread has subthreads.
-
isFinished
public boolean isFinished(java.lang.String pool, java.lang.String lane)
The context is finished, when there are no (more) threads to execute.- Parameters:
pool
- The pool to be executed or null for any.lane
- The lane to be executed or null for any. Nested lanes may be addressed by dot-notation, e.g. 'OuterLane.InnerLane'.- Returns:
- True, when the process instance is finished with regards to the specified pool/lane. When both pool and lane are null, true is returned only when all pools/lanes are finished.
-
getExecutableThread
public ProcessThread getExecutableThread(java.lang.String pool, java.lang.String lane)
Get an executable thread in the context or its sub contexts.- Parameters:
pool
- The pool to be executed or null for any.lane
- The lane to be executed or null for any. Nested lanes may be addressed by dot-notation, e.g. 'OuterLane.InnerLane'.- Returns:
- An executable thread (if any).
-
getThread
public ProcessThread getThread(java.lang.String id)
Get a thread per id.- Parameters:
id
- The thread id.- Returns:
- The process thread.
-
getNextChildId
protected java.lang.String getNextChildId()
Get a cnt for subprocesses.
-
getLoopCommand
public IResultCommand<java.lang.Boolean,java.lang.Void> getLoopCommand()
Get the loopcmd.- Returns:
- The loopcmd.
-
setLoopCommand
public void setLoopCommand(IResultCommand<java.lang.Boolean,java.lang.Void> loopcmd)
Set the loopcmd.- Parameters:
loopcmd
- The loopcmd to set.
-
notifyFinished
public void notifyFinished()
Method that can be used to determine (override) that the thread is finished.
-
getBpmnFeature
protected IInternalBpmnComponentFeature getBpmnFeature(IInternalAccess ia)
Get the bpmn feature.
-
toString
public java.lang.String toString()
Create a string representation of this process thread.- Overrides:
toString
in classjava.lang.Object
- Returns:
- A string representation of this process thread.
-
-