/**
  * This method allows an application admin to revoke a permission.
  *
  * @param permission The permission to revoke.
  * @throws RemoteException
  * @throws CSMInternalFault
  * @throws AccessDeniedFault
  * @throws CSMTransactionFault
  */
 public void revokePermission(Permission permission)
     throws RemoteException, CSMInternalFault, AccessDeniedFault, CSMTransactionFault {
   if (permission.isGroupPermission()) {
     List<Role> roles = permission.getRoles();
     for (int i = 0; i < roles.size(); i++) {
       revokePermission(permission.getGroup(), roles.get(i), permission.getProtectionGroup());
     }
   } else if (permission.isUserPermission()) {
     List<Role> roles = permission.getRoles();
     for (int i = 0; i < roles.size(); i++) {
       revokePermission(permission.getUser(), roles.get(i), permission.getProtectionGroup());
     }
   }
 }