/* * Copyright (C) 2003-2010 eXo Platform SAS. * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU Affero General Public License * as published by the Free Software Foundation; either version 3 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see<http://www.gnu.org/licenses/>. */ package org.exoplatform.services.jcr.impl.core.lock; import org.exoplatform.services.jcr.core.SessionLifecycleListener; import org.exoplatform.services.jcr.datamodel.NodeData; import org.exoplatform.services.jcr.impl.core.NodeImpl; import javax.jcr.RepositoryException; import javax.jcr.lock.Lock; import javax.jcr.lock.LockException; /** * Created by The eXo Platform SAS<br> * * This interface encapsulates methods for the management of locks by session. * * @author <a href="karpenko.sergiy@gmail.com">Karpenko Sergiy</a> * @version $Id: SessionLockManager.java 111 2008-11-11 11:11:11Z serg $ * @LevelAPI Unsupported */ public interface SessionLockManager extends SessionLifecycleListener { /** * Invoked by a session to inform that a lock token has been added. * * @param lt * added lock token */ void addLockToken(String lt); /** * Add lock for node. * * @param node - NodeImpl * @param isDeep - lock is deep * @param isSessionScoped - lock is session scoped * @param timeOut - lock live time * @return Lock * @throws LockException * @throws RepositoryException */ Lock addLock(NodeImpl node, boolean isDeep, boolean isSessionScoped, long timeOut) throws LockException, RepositoryException; /** * Returns the Lock object that applies to a node. This may be either a lock on this node itself * or a deep lock on a node above this node. * * @param node * node * @return lock object * @throws LockException * if this node is not locked * @see javax.jcr.Node#getLock */ LockImpl getLock(NodeImpl node) throws LockException, RepositoryException; /** * Return lock tokens enshrined by session * @return array of lock tokens. */ String[] getLockTokens(); /** * Returns <code>true</code> if the node given holds a lock; otherwise returns <code>false</code>. * * @param node * node * @return <code>true</code> if the node given holds a lock; otherwise returns <code>false</code> * @see javax.jcr.Node#holdsLock */ boolean holdsLock(NodeData node) throws RepositoryException; /** * Returns <code>true</code> if this node is locked either as a result of a lock held by this node * or by a deep lock on a node above this node; otherwise returns <code>false</code> * * @param node * node * @return <code>true</code> if this node is locked either as a result of a lock held by this node * or by a deep lock on a node above this node; otherwise returns <code>false</code> * @throws LockException * @see javax.jcr.Node#isLocked */ boolean isLocked(NodeData node) throws LockException; /** * Returns <code>true</code> if the specified session holds a lock on the given node; otherwise * returns <code>false</code>. <br> Note that <code>isLockHolder(session, node)==true</code> * implies <code>holdsLock(node)==true</code>. * * @param nodeImpl * node implementation * @return if the specified session holds a lock on the given node; otherwise returns * <code>false</code> */ boolean isLockHolder(NodeImpl nodeImpl) throws RepositoryException; /** * Invoked by a session to inform that a lock token has been removed. * * @param lt * removed lock token */ void removeLockToken(String lt); /** * Checks this node, is it accessible according to possible locks. If node is locked and current * session is not lockHolder <code> false</code> will be returned. * * @param data - node that must be checked * @return true - if lock not exist or current session is LockOwner; false - in other case; * @throws LockException - if lock engine exception happens */ boolean checkLocking(NodeData data) throws LockException; }