public User GetDocumentLockOwner(Item item)
    {
        User lockOwner;

        if (LockedDocumentRegistry.TryGetValue(item.Id, out lockOwner))
        {
            return(lockOwner);
        }
        return(null);
    }
    public void RemoveAllLocksForUser(User user)
    {
        List <long> idList = LockedDocumentRegistry.
                             Where(entry => entry.Value.Id == user.Id).
                             Select(entry => entry.Key).
                             ToList();

        foreach (long itemId in idList)
        {
            User lockOwner;
            LockedDocumentRegistry.TryRemove(itemId, out lockOwner);
        }
    }
 public bool TryLockDocument(Item item, User user)
 {
     lock (documentLocker) {
         User lockOwner = GetDocumentLockOwner(item);
         if (lockOwner != null)
         {
             if (user.Id != lockOwner.Id)
             {
                 return(false);
             }
         }
         else
         {
             LockedDocumentRegistry.AddOrUpdate(item.Id, user, (itemId, oldUser) => user);
         }
         return(true);
     }
 }