/**
  * Updates an existing permission object.
  * 
  * @action update
  * @param string $permissionName The name assigned to the permission
  * @param KalturaPermission $permission The updated permission parameters
  * @return KalturaPermission The updated permission object
  *
  * @throws KalturaErrors::INVALID_OBJECT_ID
  */
 public function updateAction($permissionName, KalturaPermission $permission)
 {
     $dbPermission = PermissionPeer::getByNameAndPartner($permissionName, explode(',', $this->partnerGroup()));
     if (!$dbPermission) {
         throw new KalturaAPIException(KalturaErrors::INVALID_OBJECT_ID, $permissionName);
     }
     // only normal permission types are allowed for updating through this service
     if ($dbPermission->getType() !== PermissionType::NORMAL) {
         throw new KalturaAPIException(KalturaErrors::INVALID_OBJECT_ID, $permissionName);
     }
     if ($permission->name && $permission->name != $permissionName) {
         if (strpos($permission->name, ',') !== false) {
             throw new KalturaAPIException(KalturaErrors::INVALID_FIELD_VALUE, 'name');
         }
         $existingPermission = PermissionPeer::getByNameAndPartner($permission->name, array($dbPermission->getPartnerId(), PartnerPeer::GLOBAL_PARTNER));
         if ($existingPermission) {
             throw new KalturaAPIException(KalturaErrors::PERMISSION_ALREADY_EXISTS, $permission->name, $this->getPartnerId());
         }
     }
     $dbPermission = $permission->toUpdatableObject($dbPermission);
     try {
         $dbPermission->save();
     } catch (kPermissionException $e) {
         $code = $e->getCode();
         if ($code === kPermissionException::PERMISSION_ITEM_NOT_FOUND) {
             throw new KalturaAPIException(KalturaErrors::PERMISSION_ITEM_NOT_FOUND);
         }
     }
     $permission = new KalturaPermission();
     $permission->fromObject($dbPermission);
     return $permission;
 }