Exemple #1
0
 /**
  * @param WorkflowMessage $message
  * @param NodeName $nodeName
  * @throws \InvalidArgumentException If process definition for message is not defined
  * @return Process
  */
 public function deriveProcessFromMessage(WorkflowMessage $message, NodeName $nodeName)
 {
     if (isset($this->processDefinitions[$message->messageName()])) {
         return $this->createProcessFromDefinition($this->processDefinitions[$message->messageName()], $nodeName);
     }
     throw new \InvalidArgumentException(sprintf("Derive process from message failed due to unknown message: %s", $message->messageName()));
 }
Exemple #2
0
 /**
  * @param Task $task
  * @param WorkflowMessage $message
  * @return bool
  */
 private function isCorrectMessageFor(Task $task, WorkflowMessage $message)
 {
     if (MessageNameUtils::isProcessingCommand($message->messageName())) {
         if (!$task instanceof CollectData || $message->messageName() !== MessageNameUtils::getCollectDataCommandName($task->prototype()->of())) {
             return false;
         }
     }
     return true;
 }
 /**
  * @param WorkflowMessage $workflowMessage
  * @return void
  */
 public function handleWorkflowMessage(WorkflowMessage $workflowMessage)
 {
     if (!MessageNameUtils::isProcessingCommand($workflowMessage->messageName())) {
         $this->workflowEngine->dispatch(LogMessage::logUnsupportedMessageReceived($workflowMessage));
     }
     try {
         if ($workflowMessage->messageType() === MessageNameUtils::COLLECT_DATA) {
             $processingMessage = $this->handleCollectData($workflowMessage);
             if (!$processingMessage instanceof ProcessingMessage) {
                 throw new \RuntimeException(sprintf("%s::handleCollectData method returned %s instead of a ProcessingMessage", get_called_class(), is_object($processingMessage) ? get_class($processingMessage) : gettype($processingMessage)));
             }
         } else {
             if ($workflowMessage->messageType() === MessageNameUtils::PROCESS_DATA) {
                 $processingMessage = $this->handleProcessData($workflowMessage);
                 if (!$processingMessage instanceof ProcessingMessage) {
                     throw new \RuntimeException(sprintf("%s::handleProcessData method returned %s instead of a ProcessingMessage", get_called_class(), is_object($processingMessage) ? get_class($processingMessage) : gettype($processingMessage)));
                 }
             } else {
                 $this->workflowEngine->dispatch(LogMessage::logUnsupportedMessageReceived($workflowMessage));
                 return;
             }
         }
         $this->workflowEngine->dispatch($processingMessage);
         return;
     } catch (\Exception $ex) {
         $this->workflowEngine->dispatch(LogMessage::logException($ex, $workflowMessage));
         return;
     }
 }
 /**
  * @param WorkflowMessage $message
  * @return MessageLogEntry
  */
 public static function logWorkflowMessage(WorkflowMessage $message)
 {
     return self::createFromMessageProps($message->uuid(), $message->messageName(), $message->version(), $message->processTaskListPosition());
 }
Exemple #5
0
 /**
  * @param ManipulatePayload $task
  * @param TaskListPosition $taskListPosition
  * @param WorkflowEngine $workflowEngine
  * @param WorkflowMessage $previousMessage
  */
 protected function performManipulatePayload(ManipulatePayload $task, TaskListPosition $taskListPosition, WorkflowEngine $workflowEngine, WorkflowMessage $previousMessage)
 {
     if (!MessageNameUtils::isProcessingEvent($previousMessage->messageName())) {
         $this->receiveMessage(LogMessage::logWrongMessageReceivedFor($task, $taskListPosition, $previousMessage), $workflowEngine);
         return;
     }
     $payload = $previousMessage->payload();
     try {
         $task->performManipulationOn($payload);
     } catch (\Exception $ex) {
         $this->receiveMessage(LogMessage::logException($ex, $taskListPosition), $workflowEngine);
         return;
     }
     $newEvent = $previousMessage->prepareDataProcessing($taskListPosition, $this->taskList->taskListId()->nodeName())->answerWithDataProcessingCompleted();
     $this->receiveMessage($newEvent, $workflowEngine);
 }
Exemple #6
0
 /**
  * @param WorkflowMessage $workflowMessage
  * @return LogMessage
  */
 public static function logUnsupportedMessageReceived(WorkflowMessage $workflowMessage)
 {
     return new self($workflowMessage->target(), $workflowMessage->processTaskListPosition(), sprintf("Workflow message handler %s received wrong message with name %s for task %s", $workflowMessage->target(), $workflowMessage->messageName(), $workflowMessage->processTaskListPosition()->toString()), self::ERROR_UNSUPPORTED_MESSAGE_RECEIVED, array('workflow_message_handler' => $workflowMessage->target(), 'message_name' => $workflowMessage->messageName()));
 }