/**
  * @return MessageHandler\MessageHandlerId
  */
 public function messageHandlerId()
 {
     if (is_null($this->messageHandlerId)) {
         $this->messageHandlerId = MessageHandler\MessageHandlerId::fromString($this->payload['message_handler_id']);
     }
     return $this->messageHandlerId;
 }
 /**
  * @return MessageHandlerId
  */
 public function messageHandlerId()
 {
     if (is_null($this->messageHandlerId)) {
         $this->messageHandlerId = MessageHandlerId::fromString($this->aggregateId());
     }
     return $this->messageHandlerId;
 }
 public function create($data)
 {
     if (!array_key_exists('name', $data)) {
         return $this->apiProblem(422, "No name given for the message handler");
     }
     if (!array_key_exists('node_name', $data)) {
         return $this->apiProblem(422, "No node_name given for the message handler");
     }
     if (!array_key_exists('type', $data)) {
         return $this->apiProblem(422, "No type given for the message handler");
     }
     if (!array_key_exists('data_direction', $data)) {
         return $this->apiProblem(422, "No data_direction given for the message handler");
     }
     if (!array_key_exists('metadata_riot_tag', $data)) {
         return $this->apiProblem(422, "No metadata_riot_tag given for the message handler");
     }
     if (!array_key_exists('icon', $data)) {
         return $this->apiProblem(422, "No icon given for the message handler");
     }
     if (!array_key_exists('icon_type', $data)) {
         return $this->apiProblem(422, "No icon_type given for the message handler");
     }
     if (!isset($data['processing_types'])) {
         $data['processing_types'] = ProcessingTypes::SUPPORT_ALL;
     }
     if (!isset($data['processing_metadata'])) {
         $data['processing_metadata'] = ProcessingMetadata::noData()->toArray();
     }
     if (!isset($data['preferred_type'])) {
         $data['preferred_type'] = null;
     }
     if (!isset($data['processing_id'])) {
         $data['processing_id'] = null;
     }
     if (!isset($data['additional_data'])) {
         $data['additional_data'] = [];
     }
     $messageHandlerId = MessageHandlerId::generate();
     $this->commandBus->dispatch(InstallMessageHandler::withData($messageHandlerId, $data['name'], $data['node_name'], $data['type'], $data['data_direction'], $data['processing_types'], $data['processing_metadata'], $data['metadata_riot_tag'], $data['icon'], $data['icon_type'], $data['preferred_type'], $data['processing_id'], $data['additional_data']));
     return $this->location($this->url()->fromRoute('prooph.link/process_config/api/message_handler', ['id' => $messageHandlerId->toString()]));
 }
 /**
  * @return MessageHandlerId
  */
 public function nextMessageHandlerId()
 {
     return MessageHandlerId::fromString($this->payload['next_message_handler_id']);
 }
 /**
  * @test
  */
 function it_installs_a_message_handler()
 {
     $messageHandler = ProcessingNode::initializeAs(NodeName::defaultName())->installMessageHandler(MessageHandlerId::generate(), 'Article Exporter', HandlerType::connector(), DataDirection::source(), ProcessingTypes::support([ArticleCollection::prototype()]), ProcessingMetadata::noData(), 'sqlconnector-pm-metadata', 'glyphicon-hdd', 'glyphicon', ArticleCollection::prototype(), ProcessingId::fromString('sqlconnector:::example'));
     $this->assertInstanceOf(MessageHandler::class, $messageHandler);
 }
 /**
  * @param MessageHandlerId $handlerId
  * @return MessageHandler
  */
 public function get(MessageHandlerId $handlerId)
 {
     return $this->getAggregateRoot($handlerId->toString());
 }
 /**
  * @return MessageHandlerId
  */
 public function firstMessageHandlerId()
 {
     return MessageHandlerId::fromString($this->payload['first_message_handler']);
 }
 /**
  * @param MessageHandlerId $other
  * @return bool
  */
 public function equals(MessageHandlerId $other)
 {
     return $this->toString() === $other->toString();
 }
 /**
  * @param bool $singleItemMode
  * @return MessageHandler
  */
 protected function getArticleImporterMessageHandler($singleItemMode = false)
 {
     $supportedProcessingType = $singleItemMode ? Article::prototype() : ArticleCollection::prototype();
     return MessageHandler::fromDefinition(MessageHandlerId::generate(), 'Article Importer', NodeName::defaultName(), MessageHandler\HandlerType::connector(), MessageHandler\DataDirection::target(), MessageHandler\ProcessingTypes::support([$supportedProcessingType]), ProcessingMetadata::fromArray(['chunk_support' => true]), 'sqlconnector-pm-metadata', 'glyphicon-hdd', 'glyphicon');
 }
 /**
  * @return string representation of the unique identifier of the aggregate root
  */
 protected function aggregateId()
 {
     return $this->messageHandlerId->toString();
 }
 /**
  * @param $dataDirection
  * @param null|string $handlerType
  * @param null|array $metadata
  * @return MessageHandler
  */
 private function getMessageHandler($dataDirection, $handlerType = null, array $metadata = null)
 {
     if (!is_null($handlerType)) {
         $handlerType = MessageHandler\HandlerType::fromString($handlerType);
     } else {
         $handlerType = MessageHandler\HandlerType::connector();
     }
     if (!is_null($metadata)) {
         $metadata = ProcessingMetadata::fromArray($metadata);
     } else {
         $metadata = ProcessingMetadata::noData();
     }
     return MessageHandler::fromDefinition(MessageHandlerId::generate(), 'Article Export', NodeName::defaultName(), $handlerType, MessageHandler\DataDirection::fromString($dataDirection), MessageHandler\ProcessingTypes::support([ArticleCollection::prototype(), Article::prototype()]), $metadata, 'sqlconnector-pm-metadata', 'glyphicon-hdd', 'glyphicon', Article::prototype(), MessageHandler\ProcessingId::fromString('sqlconnector:::example'));
 }