/**
  * @param array $aAssetFileOptions
  * @return \AssetsBundle\AssetFile\AssetFilesConfiguration
  * @throws \InvalidArgumentException
  */
 public function addAssetFileFromOptions(array $aAssetFileOptions)
 {
     if (empty($aAssetFileOptions['asset_file_type'])) {
         throw new \InvalidArgumentException('Asset file type is empty');
     }
     // Initialize asset file
     $oAssetFile = new \AssetsBundle\AssetFile\AssetFile();
     $oAssetFile->setAssetFileType($aAssetFileOptions['asset_file_type']);
     unset($aAssetFileOptions['asset_file_type']);
     // Retrieve asset file path
     if (empty($aAssetFileOptions['asset_file_path'])) {
         throw new \InvalidArgumentException('Asset file path is empty');
     }
     if (!is_string($aAssetFileOptions['asset_file_path'])) {
         throw new \InvalidArgumentException('Asset file path expects string, "' . gettype($aAssetFileOptions['asset_file_path']) . '" given');
     }
     // Retrieve asset file realpath
     $sAssetRealPath = $this->getOptions()->getRealPath($aAssetFileOptions['asset_file_path']) ?: $aAssetFileOptions['asset_file_path'];
     if (is_dir($sAssetRealPath)) {
         foreach ($this->getAssetFilesPathFromDirectory($sAssetRealPath, $oAssetFile->getAssetFileType()) as $sChildAssetRealPath) {
             $oNewAssetFile = clone $oAssetFile;
             $this->addAssetFile($oNewAssetFile->setAssetFilePath($sChildAssetRealPath));
         }
         return $this;
     }
     return $this->addAssetFile($oAssetFile->setAssetFilePath($sAssetRealPath));
 }