Class ProcessThread

java.lang.Object
jadex.bpmn.runtime.impl.ProcessThread
All Implemented Interfaces:
ITaskContext

public class ProcessThread extends Object implements ITaskContext
Representation of a single control flow in a BPMN process instance, i.e. an instance of a sequence flow.
  • Field Details

    • THREAD_PARAMETER_SERVICE_RESULT

      public static final String THREAD_PARAMETER_SERVICE_RESULT
      The future result parameter name.
      See Also:
    • EVENT_PARAMETER_SERVICE_RESULT

      public static final String EVENT_PARAMETER_SERVICE_RESULT
      The user result parameter name.
      See Also:
    • id

      protected String id
      The thread id.
    • activity

      protected MActivity activity
      The next activity.
    • edge

      protected MSequenceEdge edge
      The last edge (if any).
    • data

      protected Map<String,Object> data
      The data of the current or last activity.
    • dataedges

      protected Map<String,Object> dataedges
      The data of the current data edges.
    • parent

      protected ProcessThread parent
      The parent process thread.
    • subthreads

      protected List<ProcessThread> subthreads
      The subthreads.
    • instance

      protected jadex.core.IComponent instance
      The Bpmn instance.
    • exception

      protected 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 jadex.common.IFilter<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 Map<String,SplitInfo> splitinfos
      The split infos.
    • loopcmd

      protected jadex.common.IResultCommand<Boolean,Void> loopcmd
      The loop command.
    • resulthandler

      The subprocess intermediate result received command.
  • Constructor Details

    • ProcessThread

      public ProcessThread(MActivity activity, ProcessThread parent, jadex.core.IComponent instance)
      Create a new process instance.
      Parameters:
      activity - The current activity.
    • ProcessThread

      public ProcessThread(MActivity activity, ProcessThread parent, jadex.core.IComponent instance, boolean passive)
      Create a new process instance.
      Parameters:
      activity - The current activity.
  • Method Details

    • getBpmnModel

      public MBpmnModel getBpmnModel()
      Get the model.
      Specified by:
      getBpmnModel in interface ITaskContext
      Returns:
      The bpmn model.
    • getId

      public String getId()
      Get the id.
      Returns:
      The id.
    • getActivity

      public MActivity getActivity()
      Get the activity.
      Specified by:
      getActivity in interface ITaskContext
      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 jadex.common.IFilter<Object> getWaitFilter()
      Get the wait filter.
      Returns:
      The waitfilter.
    • setWaitFilter

      public void setWaitFilter(jadex.common.IFilter<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(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(String name)
      Test if a parameter has been set on activity.
      Specified by:
      hasParameterValue in interface ITaskContext
      Parameters:
      name - The parameter name.
      Returns:
      True if parameter is known.
    • getModelElement

      public MActivity getModelElement()
      Get the model element.
      Specified by:
      getModelElement in interface ITaskContext
      Returns:
      The model of the task.
    • getParameterValue

      public Object getParameterValue(String name)
      Get the value of a parameter.
      Specified by:
      getParameterValue in interface ITaskContext
      Parameters:
      name - The parameter name.
      Returns:
      The parameter value.
    • getParameters

      public Map<String,Object> getParameters()
      Get the parameters.
      Returns:
      The parameters.
    • setDataEdgeValue

      public void setDataEdgeValue(String name, Object value)
      Set the value of a parameter.
      Parameters:
      name - The parameter name.
      value - The parameter value.
    • setParameterValue

      public void setParameterValue(String name, Object value)
      Set the value of a parameter.
      Specified by:
      setParameterValue in interface ITaskContext
      Parameters:
      name - The parameter name.
      value - The parameter value.
    • setParameterValue

      public void setParameterValue(String name, Object key, Object value)
      Set the value of a parameter.
      Specified by:
      setParameterValue in interface ITaskContext
      Parameters:
      name - The parameter name.
      key - An optional helper (index, key etc.)
      value - The parameter value.
    • internalSetParameterValue

      protected void internalSetParameterValue(String name, Object key, Object value, ProcessThread start)
      Set the value of a parameter.
      Parameters:
      name - The parameter name.
      value - The parameter value.
    • setOrCreateParameterValue

      public void setOrCreateParameterValue(String name, Object value)
      Set or create a parameter value directly in this thread.
      Specified by:
      setOrCreateParameterValue in interface ITaskContext
      Parameters:
      name - The parameter name.
      value - The parameter value.
    • setOrCreateParameterValue

      public void setOrCreateParameterValue(String name, Object key, Object value)
      Set or create a parameter value directly in this thread.
      Specified by:
      setOrCreateParameterValue in interface ITaskContext
      Parameters:
      name - The parameter name.
      key - An optional helper (index, key etc.)
      value - The parameter value.
    • removeParameterValue

      public void removeParameterValue(String name)
      Remove the value of a parameter.
      Parameters:
      name - The parameter name.
    • getParameterNames

      public String[] getParameterNames()
      Get the name of all parameters.
      Returns:
      The parameter names.
    • getAllParameterNames

      public Set<String> getAllParameterNames()
      Get the name of all parameters.
      Returns:
      The parameter names.
    • getPropertyValue

      public Object getPropertyValue(String name)
      Get the value of a property.
      Specified by:
      getPropertyValue in interface ITaskContext
      Parameters:
      name - The property name.
      Returns:
      The property value.
    • getPropertyValue

      public Object getPropertyValue(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(String name)
      Test, if a property is declared.
      Parameters:
      name - The property name.
      Returns:
      True, if the property is declared.
    • getException

      public Exception getException()
      Get the exception (if any).
      Returns:
      The exception (if any).
    • setException

      public void setException(Exception exception)
      Set the exception.
      Parameters:
      exception - The exception.
    • getInstance

      public jadex.core.IComponent getInstance()
      Get the instance.
      Returns:
      The instance.
    • getDataEdges

      public Map<String,Object> getDataEdges()
      Get the data edges.
      Returns:
      The data edges.
    • getData

      public Map<String,Object> getData()
      Get the data.
      Returns:
      The data.
    • belongsTo

      public boolean belongsTo(String pool, 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(jadex.core.IComponent instance)
      Update parameters based on edge inscriptions and initial values.
      Parameters:
      instance - The calling BPMN instance.
    • getDataEdgeValues

      protected Map<String,Object> getDataEdgeValues()
    • updateParametersAfterStep

      public void updateParametersAfterStep(MActivity activity, jadex.core.IComponent instance)
      Remove in parameters after step.
      Parameters:
      instance - The calling BPMN instance.
    • getSplitInfos

      public Collection<SplitInfo> getSplitInfos()
      Get the split infos.
    • getSplitInfo

      public SplitInfo getSplitInfo(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 Set<ProcessThread> getAllThreads()
      Get all threads of the context and all subcontexts.
    • getTopLevelThread

      public ProcessThread getTopLevelThread()
      Get the top level thread.
    • 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 List<ProcessThread> getSubthreads()
      Get the subthreads.
    • hasSubthreads

      public boolean hasSubthreads()
      Test if thread has subthreads.
    • isFinished

      public boolean isFinished(String pool, 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(String pool, 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(String id)
      Get a thread per id.
      Parameters:
      id - The thread id.
      Returns:
      The process thread.
    • getNextChildId

      protected String getNextChildId()
      Get a cnt for subprocesses.
    • getLoopCommand

      public jadex.common.IResultCommand<Boolean,Void> getLoopCommand()
      Get the loopcmd.
      Returns:
      The loopcmd.
    • setLoopCommand

      public void setLoopCommand(jadex.common.IResultCommand<Boolean,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(jadex.core.IComponent ia)
      Get the bpmn feature.
    • terminateOnEnd

      public void terminateOnEnd()
      Terminate the component when no process thread is active any more.
    • toString

      public String toString()
      Create a string representation of this process thread.
      Overrides:
      toString in class Object
      Returns:
      A string representation of this process thread.