/**
  * Adds a message.
  *
  * @ApiDoc(
  *  input={"class"="sonata_notification_api_form_message", "name"="", "groups"={"sonata_api_write"}},
  *  output={"class"="Sonata\NotificationBundle\Model\Message", "groups"={"sonata_api_read"}},
  *  statusCodes={
  *      200="Returned when successful",
  *      400="Returned when an error has occurred while message creation"
  *  }
  * )
  *
  * @Route(requirements={"_format"="json|xml"})
  *
  * @param Request $request A Symfony request
  *
  * @return MessageInterface
  */
 public function postMessageAction(Request $request)
 {
     $message = null;
     $form = $this->formFactory->createNamed(null, 'sonata_notification_api_form_message', $message, array('csrf_protection' => false));
     $form->bind($request);
     if ($form->isValid()) {
         $message = $form->getData();
         $this->messageManager->save($message);
         $view = FOSRestView::create($message);
         $serializationContext = SerializationContext::create();
         $serializationContext->setGroups(array('sonata_api_read'));
         $serializationContext->enableMaxDepthChecks();
         $view->setSerializationContext($serializationContext);
         return $view;
     }
     return $form;
 }
 /**
  * {@inheritdoc}
  */
 public function handle(MessageInterface $message, EventDispatcherInterface $dispatcher)
 {
     $event = new ConsumerEvent($message);
     try {
         $message->setStartedAt(new \DateTime());
         $message->setState(MessageInterface::STATE_IN_PROGRESS);
         $this->messageManager->save($message);
         $dispatcher->dispatch($message->getType(), $event);
         $message->setCompletedAt(new \DateTime());
         $message->setState(MessageInterface::STATE_DONE);
         $this->messageManager->save($message);
         return $event->getReturnInfo();
     } catch (\Exception $e) {
         $message->setCompletedAt(new \DateTime());
         $message->setState(MessageInterface::STATE_ERROR);
         $this->messageManager->save($message);
         throw new HandlingException('Error while handling a message', 0, $e);
     }
 }