/**
  * Given FileXml from a QPM package definition, this will return a valid QFileInManifest object for that XML element
  * @param SimpleXMLElement $objFileXml
  * @param QDirectoryToken[] $objDirectoryTokenArray
  * @return QFileInManifest
  */
 public static function LoadFromQpmXml(SimpleXMLElement $objFileXml, $objDirectoryTokenArray)
 {
     $objFile = new QFileInManifest();
     $objFile->DirectoryToken = (string) $objFileXml['directoryToken'];
     $objFile->Path = (string) $objFileXml['path'];
     $objFile->Md5 = (string) $objFileXml['md5'];
     if (array_key_exists($objFile->DirectoryToken, $objDirectoryTokenArray)) {
         $objFile->DirectoryTokenObject = $objDirectoryTokenArray[$objFile->DirectoryToken];
     } else {
         return null;
     }
     if (is_file($objFile->GetFullPath())) {
         $objFile->RealPath = realpath($objFile->GetFullPath());
     }
     $objFile->Base64Data = (string) $objFileXml;
     return $objFile;
 }
 protected function SetupFileArray()
 {
     $this->objFileArrayByRealPath = array();
     foreach ($this->objManifestXml->files->file as $objFileXml) {
         $objFileInManifest = new QFileInManifest();
         $objFileInManifest->DirectoryToken = (string) $objFileXml['directoryToken'];
         $objFileInManifest->Path = (string) $objFileXml['path'];
         $objFileInManifest->Md5 = (string) $objFileXml['md5'];
         $objFileInManifest->DirectoryTokenObject = $this->objDirectoryArray[$objFileInManifest->DirectoryToken];
         // Make sure this is valid and in-use DirectoryToken and that this file exists
         if (constant($objFileInManifest->DirectoryTokenObject->Token) && file_exists($objFileInManifest->GetFullPath())) {
             $objFileInManifest->RealPath = realpath($objFileInManifest->GetFullPath());
             if ($objFileInManifest->RealPath) {
                 $this->objFileArrayByRealPath[$objFileInManifest->RealPath] = $objFileInManifest;
             }
         }
     }
 }