/** * {@inheritdoc} */ public function execute(AMQPMessage $msg) { /* @var $message Message */ $message = $msg->getMessage(); $serializer = $this->serializer; $content = $message->getValue('content'); $xml = new \SimpleXMLElement($content); /** @var \Doctrine\Common\Persistence\ObjectRepository $repository */ $repository = $this->objectManager->getRepository($this->atomEntryClass); try { /** @var \Bangpound\Bundle\PubsubBundle\CouchDocument\AtomFeed $feed */ $feed = $serializer->deserialize($content, 'Bangpound\\Bundle\\PubsubBundle\\CouchDocument\\AtomFeed', 'xml'); $source = new SourceType(); $source->setAuthors($feed->getAuthors()); $source->setBase($feed->getBase()); $source->setCategories($feed->getCategories()); $source->setContributors($feed->getContributors()); $source->setGenerator($feed->getGenerator()); $source->setIcon($feed->getIcon()); $source->setLang($feed->getLang()); $source->setLogo($feed->getLogo()); $source->setLinks($feed->getLinks()); $source->setRights($feed->getRights()); $source->setSubtitle($feed->getSubtitle()); $source->setTitle($feed->getTitle()); $source->setUpdated($feed->getUpdated()); $execute = FALSE; /** @var \Bangpound\Bundle\PubsubBundle\CouchDocument\AtomEntry $entry */ foreach ($feed->getEntries() as $key => $entry) { $id = $entry->getId(); $existing = $repository->findOneBy(['id' => $id]); if ($existing) { $this->logger->info(sprintf('Duplicate notification sent for %s - %s', $id, $entry->getTitle()), ['existing' => $existing, 'new' => $entry]); continue; } $execute = TRUE; if (!$entry->getSource()) { $entry->setSource(clone $source); } $entry->setOriginalData($xml->entry[$key]->asXml(), 'text/xml'); $this->objectManager->persist($entry); } if ($execute) { $this->objectManager->flush(); } $this->objectManager->clear(); } catch (RuntimeException $e) { throw $e; } }