/**
  * Update an existing metadata object definition file
  *
  * @action updateDefinitionFromFile
  * @param int $id
  * @param file $xsdFile XSD metadata definition
  * @return KalturaMetadataProfile
  * @throws MetadataErrors::METADATA_PROFILE_NOT_FOUND
  * @throws MetadataErrors::METADATA_FILE_NOT_FOUND
  * @throws MetadataErrors::METADATA_UNABLE_TO_TRANSFORM
  */
 function updateDefinitionFromFileAction($id, $xsdFile)
 {
     $dbMetadataProfile = MetadataProfilePeer::retrieveByPK($id);
     if (!$dbMetadataProfile) {
         throw new KalturaAPIException(MetadataErrors::METADATA_PROFILE_NOT_FOUND, $id);
     }
     $filePath = null;
     if ($xsdFile) {
         $filePath = $xsdFile['tmp_name'];
         if (!file_exists($filePath)) {
             throw new KalturaAPIException(MetadataErrors::METADATA_FILE_NOT_FOUND, $xsdFile['name']);
         }
     }
     $newXsd = file_get_contents($filePath);
     if (!$newXsd) {
         throw new KalturaAPIException(MetadataErrors::METADATA_FILE_NOT_FOUND, $xsdFile['name']);
     }
     if (!kMetadataProfileManager::validateXsdData($newXsd, $errorMessage)) {
         throw new KalturaAPIException(MetadataErrors::INVALID_METADATA_PROFILE_SCHEMA, $errorMessage);
     }
     $key = $dbMetadataProfile->getSyncKey(MetadataProfile::FILE_SYNC_METADATA_DEFINITION);
     $oldXsd = kFileSyncUtils::file_get_contents($key);
     if (!$oldXsd) {
         throw new KalturaAPIException(MetadataErrors::METADATA_PROFILE_FILE_NOT_FOUND, $id);
     }
     $dbMetadataProfile->setXsdData($newXsd);
     try {
         kMetadataManager::diffMetadataProfile($dbMetadataProfile, $oldXsd, $newXsd);
     } catch (kXsdException $e) {
         throw new KalturaAPIException(MetadataErrors::METADATA_UNABLE_TO_TRANSFORM, $e->getMessage());
     }
     $dbMetadataProfile->save();
     $metadataProfile = new KalturaMetadataProfile();
     $metadataProfile->fromObject($dbMetadataProfile, $this->getResponseProfile());
     return $metadataProfile;
 }
 /**
  * Update an existing metadata object definition file
  * 
  * @action updateDefinitionFromFile
  * @param int $id 
  * @param file $xsdFile XSD metadata definition
  * @return KalturaMetadataProfile
  * @throws KalturaErrors::INVALID_OBJECT_ID
  * @throws MetadataErrors::METADATA_FILE_NOT_FOUND
  * @throws MetadataErrors::METADATA_UNABLE_TO_TRANSFORM
  */
 function updateDefinitionFromFileAction($id, $xsdFile)
 {
     $dbMetadataProfile = MetadataProfilePeer::retrieveByPK($id);
     if (!$dbMetadataProfile) {
         throw new KalturaAPIException(KalturaErrors::INVALID_OBJECT_ID, $id);
     }
     $filePath = null;
     if ($xsdFile) {
         $filePath = $xsdFile['tmp_name'];
         if (!file_exists($filePath)) {
             throw new KalturaAPIException(MetadataErrors::METADATA_FILE_NOT_FOUND, $xsdFile['name']);
         }
     }
     $key = $dbMetadataProfile->getSyncKey(MetadataProfile::FILE_SYNC_METADATA_DEFINITION);
     $oldXsd = kFileSyncUtils::getLocalFilePathForKey($key);
     $oldVersion = $dbMetadataProfile->getVersion();
     $dbMetadataProfile->incrementVersion();
     try {
         kMetadataManager::diffMetadataProfile($dbMetadataProfile, $oldVersion, $oldXsd, $dbMetadataProfile->getVersion(), $filePath);
     } catch (kXsdException $e) {
         throw new KalturaAPIException(MetadataErrors::METADATA_UNABLE_TO_TRANSFORM);
     }
     $dbMetadataProfile->save();
     $key = $dbMetadataProfile->getSyncKey(MetadataProfile::FILE_SYNC_METADATA_DEFINITION);
     kFileSyncUtils::moveFromFile($filePath, $key);
     kMetadataManager::parseProfileSearchFields($dbMetadataProfile);
     $metadataProfile = new KalturaMetadataProfile();
     $metadataProfile->fromObject($dbMetadataProfile);
     return $metadataProfile;
 }