Class StateMachine
- java.lang.Object
-
- fr.gouv.vitam.processing.management.core.StateMachine
-
- All Implemented Interfaces:
IEventsProcessEngine,IEventsState
public class StateMachine extends java.lang.Object implements IEventsState, IEventsProcessEngine
State Machine class implementing the Interface. Dealing with evolution of workflow
-
-
Constructor Summary
Constructors Constructor Description StateMachine(ProcessWorkflow processWorkflow, ProcessEngine processEngine)StateMachine(ProcessWorkflow processWorkflow, ProcessEngine processEngine, ProcessDataManagement dataManagement, WorkspaceClientFactory workspaceClientFactory)
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description voidcancel()Cancel as soon as possible the processWorkflow, To do that, the step pauseCancelAction is updated to be PauseOrCancelAction.ACTION_CANCEL Unlike pause, - The final step should be executed, - PauseOrCancelAction.ACTION_CANCEL have no impact on the final step - The final step cannot be cancelledprotected voiddoCancel()Change the state of the process to completed Can be called only from running or pause state If running state, the next step will be completedprotected voiddoPause(PauseRecover pauseRecover)Change state of the process to pause Can be called only from running state If last step then change state to completedprotected voiddoReplay(WorkerParameters workerParameters)Change state of the process to running Can be called only from pause stateprotected voiddoRunning(WorkerParameters workerParameters, ProcessState targetState)Change state of the process to running Can be called only from pause stateprotected voidexecuteFinalStep(WorkerParameters workerParameters)Execute the final step of the workflow Update global status of the workflow Persist the process workflowprotected voidfinalizeOperation()protected voidfindAndExecuteNextStep(WorkerParameters workerParameters, boolean replayCurrentStep)java.lang.StringgetContextId()StatusCodegetCurrentProcessWorkflowStatus()ProcessStepgetCurrentStep()LogbookTypeProcessgetLogbookTypeProcess()intgetStepIndex()intgetTenant()java.lang.StringgetWorkflowId()java.util.Map<java.lang.String,java.lang.String>getWorkflowParameters()booleanisCompleted()Check if the state is completedbooleanisDone()protected booleanisLastStep()Check if the current step is the last oneprotected booleanisPause()Check if the state is pausebooleanisRecover()protected booleanisRunning()Check if the state is runningbooleanisStepByStep()voidnext(WorkerParameters workerParameters)Like a resume but pause at the next stepvoidonError(java.lang.Throwable throwable)The ProcessEngine callback on system error occurredvoidonProcessEngineCancel(WorkerParameters workerParameters)The ProcessEngine callback when the step is cancelledvoidonProcessEngineCompleteStep(ItemStatus itemStatus, WorkerParameters workerParameters)The ProcessEngine callback on complete step (for any status code)voidonUpdate(StatusCode statusCode)Update the current step status codevoidonUpdate(java.lang.String messageIdentifier, java.lang.String originatingAgency)voidpause()Pause the processWorkflow, If the last step the just wait the final step Else pause the processWorkflow as soon as possible Do not wait all elements of the current step to be executed The step pauseCancelAction will be updated to PauseOrCancelAction.ACTION_PAUSE If all elements of the current step are executed then stop correctly and step pauseCancelAction will be updated to PauseOrCancelAction.ACTION_COMPLETE After next or resume occurs on paused processWorkflow, It will starts from the step pauseCancelAction equals to PauseOrCancelAction.ACTION_PAUSE if exists and update pauseCancelAction to be PauseOrCancelAction.ACTION_RECOVER Else starts normally from the next stepvoidreplay(WorkerParameters workerParameters)Replay the last executed step, or if it s stated, the step passed as a parametervoidresume(WorkerParameters workerParameters)Do an evaluation of the State RUNNING If the state is not permitted a StateNotAllowedException is thrown Else call doRunning methodvoidshutdown()Should used only when server is shutting down To prevent deadlock, this method is not synchronized, Because onComplete and onPauseOrCancel are synchronized and called from ProcessEngineprotected booleantryPersistProcessWorkflow()Persist the process workflow in the workspace
-
-
-
Constructor Detail
-
StateMachine
public StateMachine(ProcessWorkflow processWorkflow, ProcessEngine processEngine)
-
StateMachine
public StateMachine(ProcessWorkflow processWorkflow, ProcessEngine processEngine, ProcessDataManagement dataManagement, WorkspaceClientFactory workspaceClientFactory)
-
-
Method Detail
-
resume
public void resume(WorkerParameters workerParameters) throws StateNotAllowedException, ProcessingException
Description copied from interface:IEventsStateDo an evaluation of the State RUNNING If the state is not permitted a StateNotAllowedException is thrown Else call doRunning method- Specified by:
resumein interfaceIEventsState- Throws:
StateNotAllowedExceptionProcessingException
-
next
public void next(WorkerParameters workerParameters) throws StateNotAllowedException, ProcessingException
Description copied from interface:IEventsStateLike a resume but pause at the next step- Specified by:
nextin interfaceIEventsState- Throws:
StateNotAllowedExceptionProcessingException
-
replay
public void replay(WorkerParameters workerParameters) throws StateNotAllowedException, ProcessingException
Description copied from interface:IEventsStateReplay the last executed step, or if it s stated, the step passed as a parameter- Specified by:
replayin interfaceIEventsState- Throws:
StateNotAllowedExceptionProcessingException
-
pause
public void pause() throws StateNotAllowedExceptionDescription copied from interface:IEventsStatePause the processWorkflow, If the last step the just wait the final step Else pause the processWorkflow as soon as possible Do not wait all elements of the current step to be executed The step pauseCancelAction will be updated to PauseOrCancelAction.ACTION_PAUSE If all elements of the current step are executed then stop correctly and step pauseCancelAction will be updated to PauseOrCancelAction.ACTION_COMPLETE After next or resume occurs on paused processWorkflow, It will starts from the step pauseCancelAction equals to PauseOrCancelAction.ACTION_PAUSE if exists and update pauseCancelAction to be PauseOrCancelAction.ACTION_RECOVER Else starts normally from the next step- Specified by:
pausein interfaceIEventsState- Throws:
StateNotAllowedException
-
shutdown
public void shutdown()
Description copied from interface:IEventsStateShould used only when server is shutting down To prevent deadlock, this method is not synchronized, Because onComplete and onPauseOrCancel are synchronized and called from ProcessEngine- Specified by:
shutdownin interfaceIEventsState
-
cancel
public void cancel() throws StateNotAllowedExceptionDescription copied from interface:IEventsStateCancel as soon as possible the processWorkflow, To do that, the step pauseCancelAction is updated to be PauseOrCancelAction.ACTION_CANCEL Unlike pause, - The final step should be executed, - PauseOrCancelAction.ACTION_CANCEL have no impact on the final step - The final step cannot be cancelled- Specified by:
cancelin interfaceIEventsState- Throws:
StateNotAllowedException
-
isDone
public boolean isDone()
- Specified by:
isDonein interfaceIEventsState- Returns:
- true is processWorkflow is completed or Pause
-
getTenant
public int getTenant()
- Specified by:
getTenantin interfaceIEventsState- Returns:
- The tenantId of the processWorkflow
-
getWorkflowId
public java.lang.String getWorkflowId()
- Specified by:
getWorkflowIdin interfaceIEventsState- Returns:
- The workflow Id
-
getContextId
public java.lang.String getContextId()
- Specified by:
getContextIdin interfaceIEventsState
-
getWorkflowParameters
public java.util.Map<java.lang.String,java.lang.String> getWorkflowParameters()
- Specified by:
getWorkflowParametersin interfaceIEventsState
-
isStepByStep
public boolean isStepByStep()
- Specified by:
isStepByStepin interfaceIEventsState- Returns:
- true if processWorkflow is running in stepByStep (next) mode or in continue mode (resume)
-
getLogbookTypeProcess
public LogbookTypeProcess getLogbookTypeProcess()
- Specified by:
getLogbookTypeProcessin interfaceIEventsState- Returns:
- The LogbookTypeProcess
-
doPause
protected void doPause(PauseRecover pauseRecover)
Change state of the process to pause Can be called only from running state If last step then change state to completed- Parameters:
pauseRecover- if RECOVER_FROM_SERVER_PAUSE then wait until pause is done
-
doCancel
protected void doCancel()
Change the state of the process to completed Can be called only from running or pause state If running state, the next step will be completed
-
doRunning
protected void doRunning(WorkerParameters workerParameters, ProcessState targetState) throws ProcessingException
Change state of the process to running Can be called only from pause state- Parameters:
workerParameters- the parameters to be passed to the distributortargetState- if true, run ony the next step- Throws:
ProcessingException
-
doReplay
protected void doReplay(WorkerParameters workerParameters) throws ProcessingException
Change state of the process to running Can be called only from pause state- Parameters:
workerParameters- the parameters to be passed to the distributor- Throws:
ProcessingException
-
findAndExecuteNextStep
protected void findAndExecuteNextStep(WorkerParameters workerParameters, boolean replayCurrentStep)
- Parameters:
workerParameters-replayCurrentStep-
-
executeFinalStep
protected void executeFinalStep(WorkerParameters workerParameters)
Execute the final step of the workflow Update global status of the workflow Persist the process workflow- Parameters:
workerParameters-
-
onUpdate
public void onUpdate(StatusCode statusCode)
Description copied from interface:IEventsProcessEngineUpdate the current step status code- Specified by:
onUpdatein interfaceIEventsProcessEngine
-
getCurrentProcessWorkflowStatus
public StatusCode getCurrentProcessWorkflowStatus()
- Specified by:
getCurrentProcessWorkflowStatusin interfaceIEventsProcessEngine
-
onUpdate
public void onUpdate(java.lang.String messageIdentifier, java.lang.String originatingAgency)- Specified by:
onUpdatein interfaceIEventsProcessEngine
-
onError
public void onError(java.lang.Throwable throwable)
Description copied from interface:IEventsProcessEngineThe ProcessEngine callback on system error occurred- Specified by:
onErrorin interfaceIEventsProcessEngine
-
onProcessEngineCancel
public void onProcessEngineCancel(WorkerParameters workerParameters)
Description copied from interface:IEventsProcessEngineThe ProcessEngine callback when the step is cancelled- Specified by:
onProcessEngineCancelin interfaceIEventsProcessEngine
-
onProcessEngineCompleteStep
public void onProcessEngineCompleteStep(ItemStatus itemStatus, WorkerParameters workerParameters)
Description copied from interface:IEventsProcessEngineThe ProcessEngine callback on complete step (for any status code)- Specified by:
onProcessEngineCompleteStepin interfaceIEventsProcessEngine
-
isRunning
protected boolean isRunning()
Check if the state is running- Returns:
- true if the current state is running
-
isPause
protected boolean isPause()
Check if the state is pause- Returns:
- true if the current state is pause
-
isCompleted
public boolean isCompleted()
Check if the state is completed- Returns:
- true if the current state is completed
-
isRecover
public boolean isRecover()
- Specified by:
isRecoverin interfaceIEventsState- Returns:
- true is processWorkflow is Pause
-
isLastStep
protected boolean isLastStep()
Check if the current step is the last one- Returns:
- true if the current step is the last one
-
tryPersistProcessWorkflow
protected boolean tryPersistProcessWorkflow()
Persist the process workflow in the workspace- Returns:
- true is success, false else
-
finalizeOperation
protected void finalizeOperation()
-
getCurrentStep
public ProcessStep getCurrentStep()
-
getStepIndex
public int getStepIndex()
-
-