/**
  * Dereference the file referenced by an assessmentItemRef and add
  * outcome/responseDeclarations to the compact one.
  *
  * @param ExtendedAssessmentItemRef $compactAssessmentItemRef A previously instantiated ExtendedAssessmentItemRef object.
  * @param FileResolver $resolver The Resolver to be used to resolver AssessmentItemRef's href attribute.
  * @throws XmlStorageException If an error occurs (e.g. file not found at URI or unmarshalling issue) during the dereferencing.
  */
 protected static function resolveAssessmentItemRef(ExtendedAssessmentItemRef $compactAssessmentItemRef, FileResolver $resolver)
 {
     try {
         $href = $resolver->resolve($compactAssessmentItemRef->getHref());
         $doc = new XmlDocument();
         $doc->load($href);
         foreach ($doc->getDocumentComponent()->getResponseDeclarations() as $resp) {
             $compactAssessmentItemRef->addResponseDeclaration($resp);
         }
         foreach ($doc->getDocumentComponent()->getOutcomeDeclarations() as $out) {
             $compactAssessmentItemRef->addOutcomeDeclaration($out);
         }
         if ($doc->getDocumentComponent()->hasResponseProcessing() === true) {
             $compactAssessmentItemRef->setResponseProcessing($doc->getDocumentComponent()->getResponseProcessing());
         }
         $compactAssessmentItemRef->setAdaptive($doc->getDocumentComponent()->isAdaptive());
         $compactAssessmentItemRef->setTimeDependent($doc->getDocumentComponent()->isTimeDependent());
     } catch (Exception $e) {
         $msg = "An error occured while unreferencing file '{$href}'.";
         throw new XmlStorageException($msg, $e);
     }
 }
 /**
  * Get the TAO Uri of the Test Definition from an ExtendedAssessmentItemRef object.
  * 
  * @param ExtendedAssessmentItemRef $itemRef
  * @return string A URI.
  */
 protected static function getTestDefinitionUri(ExtendedAssessmentItemRef $itemRef)
 {
     $parts = explode('|', $itemRef->getHref());
     return $parts[2];
 }
 /**
  * Dereference the file referenced by an assessmentItemRef and add
  * outcome/responseDeclarations to the compact one.
  *
  * @param \qtism\data\ExtendedAssessmentItemRef $compactAssessmentItemRef A previously instantiated ExtendedAssessmentItemRef object.
  * @param \qtism\data\storage\FileResolver $resolver The Resolver to be used to resolver AssessmentItemRef's href attribute.
  * @throws \qtism\data\storage\xml\XmlStorageException If an error occurs (e.g. file not found at URI or unmarshalling issue) during the dereferencing.
  */
 protected static function resolveAssessmentItemRef(ExtendedAssessmentItemRef $compactAssessmentItemRef, FileResolver $resolver)
 {
     try {
         $href = $resolver->resolve($compactAssessmentItemRef->getHref());
         $doc = new XmlDocument();
         $doc->load($href);
         $item = $doc->getDocumentComponent();
         foreach ($item->getResponseDeclarations() as $resp) {
             $compactAssessmentItemRef->addResponseDeclaration($resp);
         }
         foreach ($item->getOutcomeDeclarations() as $out) {
             $compactAssessmentItemRef->addOutcomeDeclaration($out);
         }
         foreach ($item->getTemplateDeclarations() as $tpl) {
             $compactAssessmentItemRef->addTemplateDeclaration($tpl);
         }
         foreach ($item->getModalFeedbackRules() as $modalFeedbackRule) {
             $compactAssessmentItemRef->addModalFeedbackRule($modalFeedbackRule);
         }
         if ($item->hasResponseProcessing() === true) {
             $compactAssessmentItemRef->setResponseProcessing($item->getResponseProcessing());
         }
         if ($item->hasTemplateProcessing() === true) {
             $compactAssessmentItemRef->setTemplateProcessing($item->getTemplateProcessing());
         }
         $compactAssessmentItemRef->setShufflings($item->getShufflings());
         $compactAssessmentItemRef->setAdaptive($item->isAdaptive());
         $compactAssessmentItemRef->setTimeDependent($item->isTimeDependent());
         $compactAssessmentItemRef->setEndAttemptIdentifiers($item->getEndAttemptIdentifiers());
     } catch (Exception $e) {
         $msg = "An error occured while unreferencing file '{$href}'.";
         throw new XmlStorageException($msg, XmlStorageException::RESOLUTION, $e);
     }
 }