/**
  * Update an existing metadata object
  * 
  * @action update
  * @param int $id 
  * @param KalturaMetadataProfile $metadataProfile
  * @param string $xsdData XSD metadata definition
  * @param string $viewsData UI views definition
  * @return KalturaMetadataProfile
  * @throws KalturaErrors::INVALID_OBJECT_ID
  * @throws MetadataErrors::METADATA_UNABLE_TO_TRANSFORM
  * @throws MetadataErrors::METADATA_TRANSFORMING
  */
 function updateAction($id, KalturaMetadataProfile $metadataProfile, $xsdData = null, $viewsData = null)
 {
     $dbMetadataProfile = MetadataProfilePeer::retrieveByPK($id);
     if (!$dbMetadataProfile) {
         throw new KalturaAPIException(KalturaErrors::INVALID_OBJECT_ID, $id);
     }
     if ($dbMetadataProfile->getStatus() != MetadataProfile::STATUS_ACTIVE) {
         throw new KalturaAPIException(MetadataErrors::METADATA_TRANSFORMING);
     }
     kMetadataManager::validateMetadataProfileField($this->getPartnerId(), $xsdData, false, $dbMetadataProfile->getObjectType(), $id);
     $dbMetadataProfile = $metadataProfile->toUpdatableObject($dbMetadataProfile);
     $key = $dbMetadataProfile->getSyncKey(MetadataProfile::FILE_SYNC_METADATA_DEFINITION);
     $oldXsd = kFileSyncUtils::getLocalFilePathForKey($key);
     $oldVersion = $dbMetadataProfile->getVersion();
     if ($xsdData) {
         $xsdData = html_entity_decode($xsdData);
         $dbMetadataProfile->incrementVersion();
     }
     if (!is_null($viewsData) && $viewsData != '') {
         $viewsData = html_entity_decode($viewsData);
         $dbMetadataProfile->incrementViewsVersion();
     }
     if ($xsdData) {
         $xsdPath = sys_get_temp_dir() . '/' . uniqid() . '.xsd';
         file_put_contents($xsdPath, $xsdData);
         try {
             kMetadataManager::diffMetadataProfile($dbMetadataProfile, $oldVersion, $oldXsd, $dbMetadataProfile->getVersion(), $xsdPath);
         } catch (kXsdException $e) {
             throw new KalturaAPIException(MetadataErrors::METADATA_UNABLE_TO_TRANSFORM, $e->getMessage());
         }
         $dbMetadataProfile->save();
         $key = $dbMetadataProfile->getSyncKey(MetadataProfile::FILE_SYNC_METADATA_DEFINITION);
         kFileSyncUtils::moveFromFile($xsdPath, $key);
     } else {
         $dbMetadataProfile->save();
     }
     if (!is_null($viewsData) && $viewsData != '') {
         $key = $dbMetadataProfile->getSyncKey(MetadataProfile::FILE_SYNC_METADATA_VIEWS);
         kFileSyncUtils::file_put_contents($key, $viewsData);
     }
     kMetadataManager::parseProfileSearchFields($this->getPartnerId(), $dbMetadataProfile);
     $metadataProfile->fromObject($dbMetadataProfile);
     return $metadataProfile;
 }