/**
  * Get the ServiceCall object representing how to call the current Assessment Item to be
  * presented to a candidate in a given Assessment Test $session.
  *
  * @param AssessmentTestSession $session An AssessmentTestSession Object.
  * @param string $testDefinition URI The URI of the knowledge base resource representing the folder where the QTI Test Definition is stored.
  * @param string $testCompilation URI The URI of the knowledge base resource representing the folder where the QTI Test Compilation is stored.
  * @return tao_models_classes_service_ServiceCall A ServiceCall object.
  */
 public static function buildItemServiceCall(AssessmentTestSession $session, $testDefinitionUri, $testCompilationUri)
 {
     $href = $session->getCurrentAssessmentItemRef()->getHref();
     // retrive itemUri & itemPath.
     $parts = explode('|', $href);
     $definition = new core_kernel_classes_Resource(INSTANCE_QTITEST_ITEMRUNNERSERVICE);
     $serviceCall = new tao_models_classes_service_ServiceCall($definition);
     $uriResource = new core_kernel_classes_Resource(INSTANCE_FORMALPARAM_ITEMURI);
     $uriParam = new tao_models_classes_service_ConstantParameter($uriResource, $parts[0]);
     $serviceCall->addInParameter($uriParam);
     $pathResource = new core_kernel_classes_Resource(INSTANCE_FORMALPARAM_ITEMPATH);
     $pathParam = new tao_models_classes_service_ConstantParameter($pathResource, $parts[1]);
     $serviceCall->addInParameter($pathParam);
     $dataPathResource = new core_kernel_classes_Resource(INSTANCE_FORMALPARAM_ITEMDATAPATH);
     $dataPathParam = new tao_models_classes_service_ConstantParameter($dataPathResource, $parts[2]);
     $serviceCall->addInParameter($dataPathParam);
     $parentServiceCallIdResource = new core_kernel_classes_Resource(INSTANCE_FORMALPARAM_QTITESTITEMRUNNER_PARENTCALLID);
     $parentServiceCallIdParam = new tao_models_classes_service_ConstantParameter($parentServiceCallIdResource, $session->getSessionId());
     $serviceCall->addInParameter($parentServiceCallIdParam);
     $testDefinitionResource = new core_kernel_classes_Resource(INSTANCE_FORMALPARAM_QTITEST_TESTDEFINITION);
     $testDefinitionParam = new tao_models_classes_service_ConstantParameter($testDefinitionResource, $testDefinitionUri);
     $serviceCall->addInParameter($testDefinitionParam);
     $testCompilationResource = new core_kernel_classes_Resource(INSTANCE_FORMALPARAM_QTITEST_TESTCOMPILATION);
     $testCompilationParam = new tao_models_classes_service_ConstantParameter($testCompilationResource, $testCompilationUri);
     $serviceCall->addInParameter($testCompilationParam);
     return $serviceCall;
 }
 private function buildCompiledDelivery(core_kernel_classes_Resource $delivery, core_kernel_classes_Resource $workflow)
 {
     $directory = $this->getCompilationDirectory($delivery);
     $this->replaceItemRunner($workflow, $directory);
     $serviceCall = new tao_models_classes_service_ServiceCall(new core_kernel_classes_Resource(INSTANCE_SERVICE_PROCESSRUNNER));
     $param = new tao_models_classes_service_ConstantParameter(new core_kernel_classes_Resource(INSTANCE_FORMALPARAM_PROCESSDEFINITION), $workflow);
     $serviceCall->addInParameter($param);
     $compilationClass = new core_kernel_classes_Class(CLASS_COMPILEDDELIVERY);
     $compilationInstance = $compilationClass->createInstanceWithProperties(array(RDFS_LABEL => $delivery->getLabel(), PROPERTY_COMPILEDDELIVERY_DELIVERY => $delivery, PROPERTY_COMPILEDDELIVERY_FOLDER => $directory, PROPERTY_COMPILEDDELIVERY_TIME => time(), PROPERTY_COMPILEDDELIVERY_RUNTIME => $serviceCall->toOntology()));
     return $compilationInstance;
 }
 function compile()
 {
     $content = $this->getResource()->getUniquePropertyValue(new core_kernel_classes_Property(TEST_TESTCONTENT_PROP));
     $ltiLaunchUrl = $content->getOnePropertyValue(new core_kernel_classes_Property(PROPERTY_LTI_LINK_LAUNCHURL));
     $ltiLinkConsumer = $content->getOnePropertyValue(new core_kernel_classes_Property(PROPERTY_LTI_LINK_CONSUMER));
     if (empty($ltiLaunchUrl)) {
         throw new tao_models_classes_CompilationFailedException('Missing launch Url for test ' . $this->getResource()->getUri());
     }
     if (empty($ltiLinkConsumer)) {
         throw new tao_models_classes_CompilationFailedException('Missing LTI consumer for test ' . $this->getResource()->getUri());
     }
     // Build the service call.
     $service = new tao_models_classes_service_ServiceCall(new core_kernel_classes_Resource(INSTANCE_LTI_CONSUMER_SERVICE));
     $param = new tao_models_classes_service_ConstantParameter(new core_kernel_classes_Resource(INSTANCE_FORMALPARAM_LTI_LAUNCH_URL), $ltiLaunchUrl);
     $service->addInParameter($param);
     $param = new tao_models_classes_service_ConstantParameter(new core_kernel_classes_Resource(INSTANCE_FORMALPARAM_LTI_CONSUMER), $ltiLinkConsumer->getUri());
     $service->addInParameter($param);
     common_Logger::d("LTI Test successfully compiled.");
     return $service;
 }
 /**
  * (non-PHPdoc)
  * @see tao_models_classes_Compiler::compile()
  */
 public function compile()
 {
     $report = new common_report_Report(common_report_Report::TYPE_SUCCESS, __('Published test "%s"', $this->getResource()->getLabel()));
     common_ext_ExtensionsManager::singleton()->getExtensionById('taoWfTest');
     // loads the extension
     $test = $this->getResource();
     common_Logger::i('Compiling test ' . $test->getLabel() . ' items');
     $process = $test->getUniquePropertyValue(new core_kernel_classes_Property(TEST_TESTCONTENT_PROP));
     if (count(wfEngine_models_classes_ProcessDefinitionService::singleton()->getAllActivities($process)) == 0) {
         return new common_report_Report(common_report_Report::TYPE_ERROR, __('An empty test cannot be published.'));
     }
     $processCloner = new wfAuthoring_models_classes_ProcessCloner();
     try {
         $processClone = $processCloner->cloneProcess($process);
         $report->add(new common_report_Report(common_report_Report::TYPE_SUCCESS, __('Cloned the process %s', $process->getLabel())));
         $itemsServiceReport = $this->process($processClone);
         foreach ($itemsServiceReport as $subReport) {
             $report->add($subReport);
         }
         if ($itemsServiceReport->getType() == common_report_Report::TYPE_SUCCESS) {
             $serviceCall = new tao_models_classes_service_ServiceCall(new core_kernel_classes_Resource(INSTANCE_SERVICE_PROCESSRUNNER));
             $param = new tao_models_classes_service_ConstantParameter(new core_kernel_classes_Resource(INSTANCE_FORMALPARAM_PROCESSDEFINITION), $processClone->getUri());
             $serviceCall->addInParameter($param);
             $report->setData($serviceCall);
         } else {
             $report->setType(common_report_Report::TYPE_ERROR);
         }
     } catch (common_Exception $e) {
         $report->add(new common_report_Report(common_report_Report::TYPE_ERROR, __('Failed to clone the process')));
         $report->setType(common_report_Report::TYPE_ERROR);
     }
     if ($report->getType() != common_report_Report::TYPE_SUCCESS) {
         $report->setMessage(__('Failed to publish test "%s".', $this->getResource()->getLabel()));
     }
     return $report;
 }
 /**
  * Create the item's ServiceCall.
  * 
  * @param core_kernel_classes_Resource $item
  * @param tao_models_classes_service_StorageDirectory $destinationDirectory
  * @return tao_models_classes_service_ServiceCall
  */
 protected function createService(core_kernel_classes_Resource $item, tao_models_classes_service_StorageDirectory $destinationDirectory)
 {
     $service = new tao_models_classes_service_ServiceCall(new core_kernel_classes_Resource(INSTANCE_SERVICE_ITEMRUNNER));
     $service->addInParameter(new tao_models_classes_service_ConstantParameter(new core_kernel_classes_Resource(INSTANCE_FORMALPARAM_ITEMPATH), $destinationDirectory->getId()));
     $service->addInParameter(new tao_models_classes_service_ConstantParameter(new core_kernel_classes_Resource(INSTANCE_FORMALPARAM_ITEMURI), $item));
     return $service;
 }
 /**
  * Build the Service Call definition that makes TAO able to run the compiled test
  * later on at delivery time.
  * 
  * @return tao_models_classes_service_ServiceCall
  */
 protected function buildServiceCall()
 {
     $service = new tao_models_classes_service_ServiceCall(new core_kernel_classes_Resource(INSTANCE_QTITEST_TESTRUNNERSERVICE));
     $param = new tao_models_classes_service_ConstantParameter(new core_kernel_classes_Resource(INSTANCE_FORMALPARAM_QTITEST_TESTDEFINITION), $this->getResource());
     $service->addInParameter($param);
     $param = new tao_models_classes_service_ConstantParameter(new core_kernel_classes_Resource(INSTANCE_FORMALPARAM_QTITEST_TESTCOMPILATION), $this->getPrivateDirectory()->getId() . '|' . $this->getPublicDirectory()->getId());
     $service->addInParameter($param);
     return $service;
 }
 protected function createLinearSuperProcess($processes)
 {
     $processDefinitionClass = new core_kernel_classes_Class(CLASS_PROCESS);
     $processDefinition = $processDefinitionClass->createInstance('process for ' . __CLASS__);
     $this->assertIsA($processDefinition, 'core_kernel_classes_Resource');
     $activityService = wfAuthoring_models_classes_ActivityService::singleton();
     $connectorService = wfAuthoring_models_classes_ConnectorService::singleton();
     $processRunnerService = new core_kernel_classes_Resource(INSTANCE_SERVICE_PROCESSRUNNER);
     $processRunnerParam = new core_kernel_classes_Resource(INSTANCE_FORMALPARAM_PROCESSDEFINITION);
     $last = null;
     foreach ($processes as $subProcess) {
         $serviceCall = new tao_models_classes_service_ServiceCall($processRunnerService);
         $serviceCall->addInParameter(new tao_models_classes_service_ConstantParameter($processRunnerParam, $subProcess));
         $current = $activityService->createActivity($processDefinition);
         $current->setPropertyValue(new core_kernel_classes_Property(PROPERTY_ACTIVITIES_INTERACTIVESERVICES), $serviceCall->toOntology());
         if (is_null($last)) {
             $current->editPropertyValues(new core_kernel_classes_Property(PROPERTY_ACTIVITIES_ISINITIAL), GENERIS_TRUE);
         } else {
             $connectorService->createSequential($last, $current);
         }
         $last = $current;
     }
     return $processDefinition;
 }