Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
  package org.openl.rules.repository.jcr;
  
  import java.util.Calendar;
  import java.util.Date;
  
  import javax.jcr.Node;
  
 
 public class JcrLock implements RLock {
     private static final String LOCK_NODE_NAME_PREFIX = "lock~";
 
     private final Log log = LogFactory.getLog(JcrLock.class);
 
     private Node lockNode;
     private Node forNode;
 
     protected JcrLock(Node forNodethrows RepositoryException {
         this. = forNode;
         String projectName = forNode.getName();
         Node parent = forNode.getParent();
 
         String lockNodeName =  + projectName;
 
         if (parent.hasNode(lockNodeName)) {
              = parent.getNode(lockNodeName);
         }
     }
     
     private void createLockNode() throws RepositoryException{
         String projectName = .getName();
         String lockNodeName =  + projectName;
         Node parent = .getParent();
          = NodeUtil.createNode(parentlockNodeName.false);
         parent.save();
     }
 
     protected Calendar currTime() {
         Calendar c = Calendar.getInstance();
         c.setTime(new Date());
         return c;
     }
 
     public Date getLockedAt() {
         try {
             if (.hasProperty(.)) {
                 return .getProperty(.).getDate().getTime();
             }
         } catch (RepositoryException e) {
             .info("getLockedAt"e);
         }
 
         return null;
     }
 
     public CommonUser getLockedBy() {
         try {
             if (.hasProperty(.)) {
                 String whoLocked = .getProperty(.).getString();
                 return new CommonUserImpl(whoLocked);
             }
         } catch (RepositoryException e) {
             .info("getLockedBy"e);
         }
 
         return null;
     }
 
     public boolean isLocked() {
         try {
             return  != null && (.hasProperty(.));
         } catch (RepositoryException e) {
             .info("isLocked"e);
             return false;
         }
     }
 
     public void lock(CommonUser userthrows RRepositoryException {
         try {
             if ( == null) {
                 createLockNode();
             }
 
             if (.hasProperty(.)) {
                 // already locked
                 String whoLocked = .getProperty(.).getString();
                 throw new RRepositoryException("Already locked by ''{0}''."nullwhoLocked);
             }
         } catch (RepositoryException e) {
             throw new RRepositoryException("Cannot check lock."e);
         }
 
        try {
            .save();
        } catch (RepositoryException e) {
            throw new RRepositoryException("Failed to set lock."e);
        }
    }
    public void unlock(CommonUser userthrows RRepositoryException {
        try {
            if ( == null) {
                // no locks
                return;
            }
            if (.hasProperty(.)) {
                .remove();
                .getParent().save();
            }
        } catch (RepositoryException e) {
            throw new RRepositoryException("Failed to remove lock."e);
        }
    }
New to GrepCode? Check out our FAQ X