tao-test/app/taoDeliveryRdf/scripts/tools/ImportDeliveryAssembly.php

140 lines
4.3 KiB
PHP

<?php
/**
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; under version 2
* of the License (non-upgradable).
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*
* Copyright (c) 2019 (original work) Open Assessment Technologies SA ;
*/
namespace oat\taoDeliveryRdf\scripts\tools;
use common_report_Report as Report;
use oat\generis\model\OntologyAwareTrait;
use oat\oatbox\extension\script\ScriptAction;
use oat\taoDeliveryRdf\model\DeliveryAssemblyService;
use oat\taoDeliveryRdf\model\import\AssemblyImporterService;
use oat\taoDeliveryRdf\model\import\AssemblyImportFailedException;
/**
* php index.php "oat\taoDeliveryRdf\scripts\tools\ImportDeliveryAssembly" -f ~/Documents/file.zip
* Options:
* -uri // will be used same uri for the delivery as in the package
* -class // import to the class
*
* Class ImportDeliveryAssembly
* @package oat\taoDeliveryRdf\scripts\tools
*/
class ImportDeliveryAssembly extends ScriptAction
{
use OntologyAwareTrait;
const OPTION_ASSEMBLY_FILE = 'assembly-file';
const OPTION_CLASS_URI = 'class-uri';
const OPTION_USE_ORIGINAL_URI = 'use-original-uri';
/**
* @var Report
*/
private $report;
/**
* @return string
*/
protected function provideDescription()
{
return 'Import compiled delivery assembly with possibility to specify class and use delivery\'s original URI';
}
/**
* @return array
*/
protected function provideOptions()
{
return [
self::OPTION_ASSEMBLY_FILE => [
'prefix' => 'f',
'required' => true,
'longPrefix' => self::OPTION_ASSEMBLY_FILE,
'description' => 'Path to the compiled assembly file.'
],
self::OPTION_USE_ORIGINAL_URI => [
'prefix' => 'uri',
'required' => true,
'flag' => true,
'longPrefix' => self::OPTION_USE_ORIGINAL_URI,
'description' => 'Use delivery URI from assembly package.',
],
self::OPTION_CLASS_URI => [
'prefix' => 'class',
'longPrefix' => self::OPTION_CLASS_URI,
'description' => 'Import into provided class.',
],
];
}
/**
* @return Report
*/
protected function run()
{
$this->report = Report::createInfo('Delivery assembly import started');
try {
$file = $this->getOption(self::OPTION_ASSEMBLY_FILE);
$importClass = $this->getImportClass();
/** @var AssemblyImporterService $importer */
$importer = $this->getServiceLocator()->get(AssemblyImporterService::class);
$useOriginalUri = $this->hasOption(self::OPTION_USE_ORIGINAL_URI);
$importReport = $importer->importDelivery($importClass, $file, $useOriginalUri);
$this->report->add($importReport);
} catch (\Exception $e) {
$this->report->add(Report::createFailure("Export failed: " . $e->getMessage()));
}
return $this->report;
}
/**
* @return array
*/
protected function provideUsage()
{
return [
'prefix' => 'h',
'longPrefix' => 'help',
'description' => 'Prints a help statement'
];
}
/**
* @return \core_kernel_classes_Class
*/
private function getImportClass()
{
$classUri = $this->hasOption(self::OPTION_CLASS_URI) ? $this->getOption(self::OPTION_CLASS_URI) : DeliveryAssemblyService::CLASS_URI;
$importClass = $this->getClass($classUri);
if (!$importClass->exists()) {
throw new AssemblyImportFailedException("Class with provided URI does not exist: {$importClass}");
}
return $importClass;
}
}