/** * @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())); }
/** * @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()); }
/** * @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); }
/** * @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())); }