/**
  * {@inheritdoc}
  */
 public function denormalize($data, $class, $format = null, array $context = [])
 {
     if (empty($data)) {
         return null;
     }
     return $this->repository->findOneByIdentifier($data['filePath']);
 }
 /**
  * {@inheritdoc}
  */
 public function denormalize($data, $class, $format = null, array $context = [])
 {
     if (null === $data || '' === $data) {
         return null;
     }
     if (is_file($data)) {
         return $this->storer->store(new \SplFileInfo($data), FileStorage::CATALOG_STORAGE_ALIAS);
     }
     return $this->repository->findOneByIdentifier($data);
 }
 /**
  * {@inheritdoc}
  *
  * Expected data input format :
  * {
  *     "originalFilename": "original_filename.extension",
  *     "filePath": "/absolute/file/path/filename.extension"
  * }
  */
 public function setAttributeData(ProductInterface $product, AttributeInterface $attribute, $data, array $options = [])
 {
     $options = $this->resolver->resolve($options);
     $this->checkLocaleAndScope($attribute, $options['locale'], $options['scope'], 'media');
     $this->checkData($attribute, $data);
     if (null === $data || empty($data['filePath'])) {
         $file = null;
     } elseif (null === ($file = $this->repository->findOneByIdentifier($data['filePath']))) {
         $file = $this->storeFile($attribute, $data);
     }
     $this->setMedia($product, $attribute, $file, $options['locale'], $options['scope']);
 }
 /**
  * @param Request $request
  * @param string  $filename
  * @param string  $filter
  *
  * @return RedirectResponse
  */
 public function showAction(Request $request, $filename, $filter = null)
 {
     $filename = urldecode($filename);
     if (self::DEFAULT_IMAGE_KEY === $filename) {
         return $this->renderDefaultImage(FileTypes::MISC, $filter);
     }
     $file = $this->fileRepository->findOneByIdentifier($filename);
     if (null !== $file) {
         if (FileTypes::IMAGE === ($fileType = $this->fileTypeGuesser->guess($file->getMimeType()))) {
             try {
                 return $this->imagineController->filterAction($request, $filename, $filter);
             } catch (NotFoundHttpException $e) {
                 return $this->renderDefaultImage(FileTypes::IMAGE, $filter);
             }
         }
         return $this->renderDefaultImage($fileType, $filter);
     }
     return $this->renderDefaultImage(FileTypes::MISC, $filter);
 }
 /**
  * {@inheritdoc}
  */
 public function compare($data, $originals)
 {
     $default = ['locale' => null, 'scope' => null, 'data' => ['filePath' => null]];
     $originals = array_merge($default, $originals);
     // compare a local file and a stored file (can happen during an import for instance)
     if (isset($data['data']['filePath']) && isset($originals['data']['filePath']) && is_file($data['data']['filePath'])) {
         $originalFile = $this->repository->findOneByIdentifier($originals['data']['filePath']);
         if (null !== $originalFile && $originalFile->getHash() === $this->getHashFile($data['data']['filePath'])) {
             return null;
         }
     }
     // compare the two stored files by their filepaths
     if (isset($data['data']['filePath']) && isset($originals['data']['filePath']) && $data['data']['filePath'] === $originals['data']['filePath']) {
         return null;
     }
     // compare the two stored files by their hashes
     if (isset($data['data']['hash']) && isset($originals['data']['hash']) && $data['data']['hash'] === $originals['data']['hash']) {
         return null;
     }
     if (!isset($data['data']['filePath']) && !isset($originals['data']['filePath'])) {
         return null;
     }
     return $data;
 }