/**
  * Desploy all the required files into the provided directories
  *
  * @param core_kernel_classes_Resource $item
  * @param string $language
  * @param tao_models_classes_service_StorageDirectory $publicDirectory
  * @param tao_models_classes_service_StorageDirectory $privateDirectory
  * @return common_report_Report
  */
 protected function deployQtiItem(core_kernel_classes_Resource $item, $language, tao_models_classes_service_StorageDirectory $publicDirectory, tao_models_classes_service_StorageDirectory $privateDirectory)
 {
     $qtiService = Service::singleton();
     // retrieve the media assets
     try {
         $qtiItem = $this->retrieveAssets($item, $language, $publicDirectory);
         //store variable qti elements data into the private directory
         $variableElements = $qtiService->getVariableElements($qtiItem);
         $privateDirectory->write($language . DIRECTORY_SEPARATOR . self::VAR_ELT_FILE_NAME, json_encode($variableElements));
         //create the item.json file in private directory
         $itemPacker = new QtiItemPacker();
         $itemPacker->setReplaceXinclude(false);
         $itemPack = $itemPacker->packQtiItem($item, $language, $qtiItem, $publicDirectory);
         $this->itemJson = $itemPack->JsonSerialize();
         //get the filtered data to avoid cheat
         $data = $qtiItem->getDataForDelivery();
         $this->itemJson['data'] = $data['core'];
         $privateDirectory->write($language . DIRECTORY_SEPARATOR . self::ITEM_FILE_NAME, json_encode($this->itemJson));
         return new common_report_Report(common_report_Report::TYPE_SUCCESS, __('Successfully compiled "%s"', $language));
     } catch (\tao_models_classes_FileNotFoundException $e) {
         return new common_report_Report(common_report_Report::TYPE_ERROR, __('Unable to retrieve asset "%s"', $e->getFilePath()));
     } catch (XIncludeException $e) {
         return new common_report_Report(common_report_Report::TYPE_ERROR, $e->getUserMessage());
     } catch (\Exception $e) {
         return new common_report_Report(common_report_Report::TYPE_ERROR, $e->getMessage());
     }
 }