if (doc == null) {
throw new EXistException("Resource " + docURI + " not found");
}
//TODO : register the lock within the transaction ?
if (!doc.getPermissions().validate(user, Permission.WRITE))
{throw new PermissionDeniedException("User is not allowed to lock resource " + docURI);}
final SecurityManager manager = factory.getBrokerPool().getSecurityManager();
if (!(userName.equals(user.getName()) || manager.hasAdminPrivileges(user)))
{throw new PermissionDeniedException("User " + user.getName() + " is not allowed " +
"to lock the resource for user " + userName);}
final Account lockOwner = doc.getUserLock();
if(lockOwner != null && (!lockOwner.equals(user)) && (!manager.hasAdminPrivileges(user)))
{throw new PermissionDeniedException("Resource is already locked by user " +
lockOwner.getName());}
doc.setUserLock(user);
broker.storeXMLResource(transaction, doc);
transact.commit(transaction);
return true;