/** * If workflow message handler receives a process-data message it forwards the message to this * method and uses the returned ProcessingMessage as response * * @param WorkflowMessage $workflowMessage * @return ProcessingMessage */ protected function handleProcessData(WorkflowMessage $workflowMessage) { if (array_key_exists($workflowMessage->payload()->getTypeClass(), $this->getSupportedMessagesByTypeMap())) { $dataAsJsonString = json_encode($workflowMessage->payload()); $answer = $workflowMessage->answerWithDataProcessingCompleted(); try { \Zend\Stdlib\ErrorHandler::start(); if (!file_put_contents(__DIR__ . '/../../data/target-data.txt', $dataAsJsonString)) { \Zend\Stdlib\ErrorHandler::stop(true); } } catch (\Exception $ex) { $answer = \Prooph\Processing\Message\LogMessage::logException($ex, $workflowMessage); } return $answer; } else { return LogMessage::logErrorMsg(sprintf('%s: Unknown type %s received', __CLASS__, $workflowMessage->payload()->getTypeClass()), $workflowMessage); } }
/** * @param WorkflowMessage $workflowMessage * @throws \InvalidArgumentException */ private function processData(WorkflowMessage $workflowMessage) { $metadata = $workflowMessage->metadata(); if (isset($metadata[self::META_LOCATION]) && !isset($metadata[self::META_PATH])) { $metadata[self::META_PATH] = $this->locationTranslator->getPathFor($metadata[self::META_LOCATION]); } if (!isset($metadata[self::META_FILENAME_TEMPLATE])) { throw new \InvalidArgumentException("Missing filename_pattern in metadata"); } if (!isset($metadata[self::META_FILE_TYPE])) { throw new \InvalidArgumentException("Missing file_type in metadata"); } if (!isset($metadata[self::META_PATH])) { throw new \InvalidArgumentException("Missing path in metadata"); } $metadata[self::META_PATH] = $this->sanitizePath($metadata[self::META_PATH]); if (!is_dir($metadata[self::META_PATH])) { throw new \InvalidArgumentException(sprintf('Directory %s is invalid', $metadata[self::META_PATH])); } if (!is_writable($metadata[self::META_PATH])) { throw new \InvalidArgumentException(sprintf('Directory %s is not writable', $metadata[self::META_PATH])); } $type = $workflowMessage->payload()->toType(); $fileTypeAdapter = $this->fileTypeAdapters->get($metadata[self::META_FILE_TYPE]); if ($type->description()->nativeType() === NativeType::COLLECTION && isset($metadata[self::META_WRITE_MULTI_FILES]) && $metadata[self::META_WRITE_MULTI_FILES]) { foreach ($type as $index => $item) { $this->writeTypeToFile($item, $metadata, $fileTypeAdapter, $index); } } else { $this->writeTypeToFile($type, $metadata, $fileTypeAdapter); } return $workflowMessage->answerWithDataProcessingCompleted($metadata); }