/**
  * addAction
  *
  * @param string      $node
  * @param null|string $document
  *
  * @return \Symfony\Component\HttpFoundation\RedirectResponse|\Symfony\Component\HttpFoundation\Response
  */
 public function addAction($node, $document = null)
 {
     $documentNode = $this->findNodeOrThrowError($node);
     $request = $this->get('request');
     if (null !== $document) {
         $document = $this->findDocumentOrThrowError($document, $node);
         $firstEdition = false;
     } else {
         $document = new Document($documentNode);
         $firstEdition = true;
     }
     if ($request->isMethod('GET')) {
         $params = array('node' => $documentNode);
         if (null !== $document->getId()) {
             $params['document'] = $document;
         }
         return $this->render('ErichardDmsBundle:Standard/Document:add.html.twig', $params);
     } else {
         $filename = $request->request->get('filename');
         $documentNode->removeEmptyMetadatas();
         if (null === $document->getId()) {
             $document->setName($filename);
         }
         $document->setOriginalName($filename);
         $document->setFilename($request->request->get('token'));
         $document->removeEmptyMetadatas();
         foreach ($document->getNode()->getDocuments() as $sibling) {
             $sibling->removeEmptyMetadatas();
         }
         $emn = $this->get('doctrine')->getManager();
         $emn->persist($document);
         $emn->flush();
         $storageTmpPath = $this->container->getParameter('dms.storage.tmp_path');
         $storagePath = $this->container->getParameter('dms.storage.path');
         $filesystem = $this->get('filesystem');
         $absTmpFilename = $storageTmpPath . '/' . $document->getFilename();
         $absFilename = $storagePath . '/' . $document->getComputedFilename();
         // Delete existing thumbnails
         if (is_dir($this->container->getParameter('dms.cache.path'))) {
             $finder = new Finder();
             $finder->files()->in($this->container->getParameter('dms.cache.path'))->name("{$document->getSlug()}.png");
             foreach ($finder as $file) {
                 $filesystem->remove($file);
             }
         }
         // overwrite file
         if (is_file($absFilename)) {
             unlink($absFilename);
         } elseif (!$filesystem->exists(dirname($absFilename))) {
             $filesystem->mkdir(dirname($absFilename));
         }
         $filesystem->rename($absTmpFilename, $absFilename);
         $document->setFilename($document->getComputedFilename());
         $emn->persist($document);
         $emn->flush();
         if ($this->get('event_dispatcher')->hasListeners(DmsEvents::DOCUMENT_ADD)) {
             $event = new DmsDocumentEvent($document);
             $this->get('event_dispatcher')->dispatch(DmsEvents::DOCUMENT_ADD, $event);
         }
         return $this->redirect($this->get('router')->generate('erichard_dms_edit_document', array('document' => $document->getSlug(), 'node' => $documentNode->getSlug(), 'first' => $firstEdition)));
     }
 }