public function resolve()
    {
        $originFile = $this->file->getPhysicalFile();

        // force format storage directory
        $this->filesystem->mkdir(
            $relatedDestDir = sprintf('%s/%s',
                dirname($originFile->getRealPath()),
                $this->inflector->slugify($this->format->getId(), '_')
            )
        );

        // format call
        $this->formatter
            ->open($originFile->getRealPath())
            ->crop(
                new Point($this->options->x, $this->options->y),
                new Box($this->options->width, $this->options->height)
            )
            ->save($formattedFileName = sprintf('%s/%s',
                $relatedDestDir,
                $originFile->getBasename()
            ))
        ;

        // File object creation (if required)
        $file = $this->fileDomain->create(new PhysicalFile($formattedFileName));

        $this->formattedImage = $this->formattedImageLoader->retrieveByFile($file)
            ?: new $this->formattedImageClass()
        ;
        $this->formattedImage
            ->setFormat($this->format)
            ->setFile($file)
        ;

        $this->assertEntityIsValid($this->formattedImage, array('FormattedImage', 'creation'));

        $this->fireEvent(
            FormattedImageEvents::FORMATTED_IMAGE_CREATED,
            new FormattedImageEvent($this->formattedImage, $this)
        );

        return $this->formattedImage;
    }