/**
  * TODO
  * 
  * @param mixed $object
  * @param IPermission $permission
  * @param LoginContext $context
  * @return bool TRUE if the handler performed the permission check successfully, FALSE otherwise.
  * 
  * @throws EyeInvalidArgumentException
  * @throws EyeUnexpectedValueException
  * @throws EyeAccessControlException
  */
 public function checkPermission($object, IPermission $permission, LoginContext $context)
 {
     if (!$object instanceof VirtualFileMetaData) {
         throw new EyeInvalidArgumentException('$object must be a VirtualFileMetaData.');
     }
     try {
         $eyeosUser = $context->getEyeosUser();
     } catch (EyeNullPointerException $e) {
         $this->failureException = new EyeHandlerFailureException('No eyeos user found in login context.');
         return false;
     }
     foreach ($permission->getActions() as $action) {
         if ($action == 'delete') {
             // DELETE metadata requires WRITE access to the file
             $fileObject = $permission->getRelatedObject();
             if ($fileObject === null) {
                 throw new EyeNullPointerException('$permission->getRelatedObject()');
             }
             $fileObject->checkWritePermission();
         } else {
             if ($action == 'write') {
                 // Retrieve old metadata (and original owner)
                 $oldMetaData = $permission->getOriginalMetaData();
                 if ($oldMetaData === null) {
                     throw new EyeNullPointerException('$permission->getOriginalMetaData()');
                 }
                 $ownerName = $oldMetaData->get(EyeosAbstractVirtualFile::METADATA_KEY_OWNER);
                 // Compare new and old meta
                 //				$updatedKeys = array_keys(array_diff($object->getAll(), $oldMetaData->getAll()));
                 // Updating the following value means that we have write access on the file
                 //				$publicKeys = array(EyeosAbstractVirtualFile::METADATA_KEY_MODIFICATIONTIME);
                 //				if ($updatedKeys == $publicKeys) {
                 $fileObject = $permission->getRelatedObject();
                 if ($fileObject === null) {
                     throw new EyeNullPointerException('$permission->getRelatedObject()');
                 }
                 $fileObject->checkWritePermission();
                 //				}
                 //				// Some more sensitive values have been updated: only the owner has this right
                 //				else if ($eyeosUser->getName() != $ownerName) {
                 //					throw new EyeAccessControlException('Only the owner of the file (' . $ownerName . ') can write metadata to it.');
                 //				}
             }
         }
     }
     return true;
 }