You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jackrabbit.apache.org by an...@apache.org on 2008/11/06 12:10:45 UTC
svn commit: r711841 - in /jackrabbit/trunk:
jackrabbit-api/src/main/java/org/apache/jackrabbit/api/jsr283/lock/
jackrabbit-core/src/main/java/org/apache/jackrabbit/core/lock/
jackrabbit-core/src/test/java/org/apache/jackrabbit/api/jsr283/lock/
Author: angela
Date: Thu Nov 6 03:10:39 2008
New Revision: 711841
URL: http://svn.apache.org/viewvc?rev=711841&view=rev
Log:
JCR-1590: JSR 283 Locking (work in progress)
- add extended/new interfaces to api
- add comment and dummy methods to existing LockImpl
Added:
jackrabbit/trunk/jackrabbit-api/src/main/java/org/apache/jackrabbit/api/jsr283/lock/
jackrabbit/trunk/jackrabbit-api/src/main/java/org/apache/jackrabbit/api/jsr283/lock/Lock.java (with props)
jackrabbit/trunk/jackrabbit-api/src/main/java/org/apache/jackrabbit/api/jsr283/lock/LockManager.java (with props)
jackrabbit/trunk/jackrabbit-core/src/test/java/org/apache/jackrabbit/api/jsr283/lock/
jackrabbit/trunk/jackrabbit-core/src/test/java/org/apache/jackrabbit/api/jsr283/lock/AbstractLockTest.java (with props)
jackrabbit/trunk/jackrabbit-core/src/test/java/org/apache/jackrabbit/api/jsr283/lock/LockManagerTest.java (with props)
jackrabbit/trunk/jackrabbit-core/src/test/java/org/apache/jackrabbit/api/jsr283/lock/OpenScopedLockTest.java (with props)
jackrabbit/trunk/jackrabbit-core/src/test/java/org/apache/jackrabbit/api/jsr283/lock/SessionScopedLockTest.java (with props)
jackrabbit/trunk/jackrabbit-core/src/test/java/org/apache/jackrabbit/api/jsr283/lock/TestAll.java (with props)
Modified:
jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/lock/LockImpl.java
Added: jackrabbit/trunk/jackrabbit-api/src/main/java/org/apache/jackrabbit/api/jsr283/lock/Lock.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-api/src/main/java/org/apache/jackrabbit/api/jsr283/lock/Lock.java?rev=711841&view=auto
==============================================================================
--- jackrabbit/trunk/jackrabbit-api/src/main/java/org/apache/jackrabbit/api/jsr283/lock/Lock.java (added)
+++ jackrabbit/trunk/jackrabbit-api/src/main/java/org/apache/jackrabbit/api/jsr283/lock/Lock.java Thu Nov 6 03:10:39 2008
@@ -0,0 +1,46 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.jackrabbit.api.jsr283.lock;
+
+/**
+ * This interface holds extensions made in JCR 2.0 while work
+ * is in progress implementing JCR 2.0.
+ *
+ * @since JCR 2.0
+ */
+public interface Lock extends javax.jcr.lock.Lock {
+
+ /**
+ * Returns the seconds remaining until this locks times out
+ * ({@link Long#MAX_VALUE} if the timeout is unknown or infinite).
+ * @return a <code>long</code>
+ * @since JCR 2.0
+ */
+ public long getSecondsRemaining();
+
+ /**
+ * Returns <code>true</code> if the current session is the owner of this
+ * lock, either because it is session-scoped and bound to this session or
+ * open-scoped and this session currently holds the token for this lock.
+ * Returns <code>false</code> otherwise.
+ *
+ * @return a <code>boolean</code>.
+ * @since JCR 2.0
+ */
+ public boolean isLockOwningSession();
+
+}
\ No newline at end of file
Propchange: jackrabbit/trunk/jackrabbit-api/src/main/java/org/apache/jackrabbit/api/jsr283/lock/Lock.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: jackrabbit/trunk/jackrabbit-api/src/main/java/org/apache/jackrabbit/api/jsr283/lock/Lock.java
------------------------------------------------------------------------------
svn:keywords = author date id revision url
Added: jackrabbit/trunk/jackrabbit-api/src/main/java/org/apache/jackrabbit/api/jsr283/lock/LockManager.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-api/src/main/java/org/apache/jackrabbit/api/jsr283/lock/LockManager.java?rev=711841&view=auto
==============================================================================
--- jackrabbit/trunk/jackrabbit-api/src/main/java/org/apache/jackrabbit/api/jsr283/lock/LockManager.java (added)
+++ jackrabbit/trunk/jackrabbit-api/src/main/java/org/apache/jackrabbit/api/jsr283/lock/LockManager.java Thu Nov 6 03:10:39 2008
@@ -0,0 +1,256 @@
+/*
+ * $Id$
+ *
+ * Copyright 1997-2005 Day Management AG
+ * Barfuesserplatz 6, 4001 Basel, Switzerland
+ * All Rights Reserved.
+ *
+ * This software is the confidential and proprietary information of
+ * Day Management AG, ("Confidential Information"). You shall not
+ * disclose such Confidential Information and shall use it only in
+ * accordance with the terms of the license agreement you entered into
+ * with Day.
+ */
+package org.apache.jackrabbit.api.jsr283.lock;
+
+import javax.jcr.lock.LockException;
+import javax.jcr.RepositoryException;
+import javax.jcr.UnsupportedRepositoryOperationException;
+import javax.jcr.AccessDeniedException;
+import javax.jcr.InvalidItemStateException;
+
+/**
+ * This interface holds extensions made in JCR 2.0 while work
+ * is in progress implementing JCR 2.0. It encapsulates methods for the
+ * management of locks.
+ *
+ * @since JCR 2.0
+ */
+
+public interface LockManager{
+
+ /**
+ * Adds the specified lock token to the current <code>Session</code>.
+ * Holding a lock token makes the current <code>Session</code> the owner
+ * of the lock specified by that particular lock token.
+ * <p>
+ * A <code>LockException</code> is thrown if the specified lock token is
+ * already held by another <code>Session</code> and the implementation
+ * does not support simultaneous ownership of open-scoped locks.
+ * @param lockToken a lock token (a string).
+ * @throws LockException if the specified lock token is already held by
+ * another <code>Session</code> and the implementation
+ * does not support simultaneous ownership of open-scoped
+ * locks.
+ * @throws RepositoryException if another error occurs.
+ */
+ public void addLockToken(String lockToken) throws LockException, RepositoryException;
+
+ /**
+ * Returns the <code>Lock</code> object that applies to the node at the
+ * specified <code>absPath</code>. This may be either a lock on that node
+ * itself or a deep lock on a node above that node.
+ * <p>
+ * If the node is not locked (no lock applies to this node), a
+ * <code>LockException</code> is thrown.
+ * <p>
+ * If the current session does not have sufficient privileges to get the
+ * lock, an <code>AccessDeniedException</code> is thrown.
+ * <p>
+ * An <code>UnsupportedRepositoryOperationException</code> is thrown if
+ * this implementation does not support locking.
+ * <p>
+ * A <code>RepositoryException</code> is thrown if another error occurs.
+ *
+ * @param absPath absolute path of node for which to obtain the lock
+ * @return The applicable <code>Lock</code> object.
+ * @throws UnsupportedRepositoryOperationException if this implementation does not support locking.
+ * @throws LockException if no lock applies to this node.
+ * @throws AccessDeniedException if the current session does not have permission to get the lock.
+ * @throws RepositoryException if another error occurs.
+ */
+ public Lock getLock(String absPath) throws UnsupportedRepositoryOperationException, LockException, AccessDeniedException, RepositoryException;
+
+ /**
+ * Returns an array containing all lock tokens currently held by the
+ * current <code>Session</code>. Note that any such tokens will represent
+ * open-scoped locks, since session-scoped locks do not have tokens.
+ *
+ * @return an array of lock tokens (strings)
+ * @throws RepositoryException if an error occurs.
+ */
+ public String[] getLockTokens() throws RepositoryException;
+
+ /**
+ * Returns <code>true</code> if the node at <code>absPath</code> holds a
+ * lock; otherwise returns <code>false</code>. To <i>hold</i> a lock means
+ * that this node has actually had a lock placed on it specifically, as
+ * opposed to just having a lock <i>apply</i> to it due to a deep lock held
+ * by a node above.
+ *
+ * @param absPath absolute path of node
+ * @return a <code>boolean</code>.
+ * @throws RepositoryException if an error occurs.
+ */
+ public boolean holdsLock(String absPath) throws RepositoryException;
+
+ /**
+ * <p>
+ * Places a lock on the node at <code>absPath</code>.
+ * If successful, the node is said to <i>hold</i> the lock.
+ * </p>
+ * <p>
+ * If <code>isDeep</code> is <code>true</code> then the lock
+ * applies to the specified node and all its descendant nodes;
+ * if <code>false</code>, the lock applies only to the specified node.
+ * On a successful lock, the <code>jcr:isDeep</code> property of the
+ * locked node is set to this value.
+ * </p>
+ * <p>
+ * If <code>isSessionScoped</code> is <code>true</code> then this lock
+ * will expire upon the expiration of the current session (either
+ * through an automatic or explicit <code>Session.logout</code>);
+ * if false, this lock does not expire until it is explicitly unlocked,
+ * it times out, or it is automatically unlocked due to a
+ * implementation-specific limitation.
+ * </p>
+ * <p>
+ * The timeout parameter specifies the number of seconds until the lock times out
+ * (if it is not refreshed with <code>Lock.refresh</code> in the meantime).
+ * An implementation may use this information as a hint or ignore it altogether.
+ * Clients can discover the actual timeout by inspecting the returned <code>Lock</code>
+ * object.
+ * </p>
+ * <p>
+ * The <code>ownerInfo</code> parameter can be used to pass a string holding
+ * owner information relevant to the client. An implementation may either use
+ * or ignore this parameter. If it uses the parameter it must set the
+ * <code>jcr:lockOwner</code> property of the locked node to this value and
+ * return this value on <code>Lock.getLockOwner</code>. If it ignores this
+ * parameter the <code>jcr:lockOwner</code> property (and the value returned
+ * by <code>Lock.getLockOwner</code>) is set to either the value returned by
+ * <code>Session.getUserID</code> of the owning session or an
+ * implementation-specific string identifying the owner.
+ * </p>
+ * <p>
+ * The method returns a <code>Lock</code> object representing the new lock.
+ * If the lock is open-scoped the returned lock will include a lock token.
+ * The lock token is also automatically added to the set of lock tokens held
+ * by the current session.
+ * </p>
+ * <p>
+ * The addition or change of the properties <code>jcr:isDeep</code>
+ * and <code>jcr:lockOwner</code> are persisted immediately; there is no
+ * need to call <code>save</code>.
+ * </p>
+ * <p>
+ * It is possible to lock a node even if it is checked-in.
+ * </p>
+ * <p>
+ * If this node is not of mixin node type <code>mix:lockable</code> then an
+ * <code>LockException</code> is thrown.
+ * <p>
+ * If this node is already locked (either because it holds a lock or a
+ * lock above it applies to it), a <code>LockException</code> is thrown.
+ * <p>
+ * If <code>isDeep</code> is <code>true</code> and a descendant node of
+ * this node already holds a lock, then a <code>LockException</code> is
+ * thrown.
+ * <p>
+ * If this node does not have a persistent state (has never been saved
+ * or otherwise persisted), a <code>LockException</code> is thrown.
+ * <p>
+ * If the current session does not have sufficient privileges to place the
+ * lock, an <code>AccessDeniedException</code> is thrown.
+ * <p>
+ * An <code>UnsupportedRepositoryOperationException</code> is thrown if
+ * this implementation does not support locking.
+ * <p>
+ * An InvalidItemStateException is thrown if this node has pending unsaved
+ * changes.
+ * <p>
+ * A <code>RepositoryException</code> is thrown if another error occurs.
+ *
+ * @param absPath absolute path of node to be locked
+ * @param isDeep if <code>true</code> this lock will apply to this node and all its descendants; if
+ * <code>false</code>, it applies only to this node.
+ * @param isSessionScoped if <code>true</code>, this lock expires with the current session; if <code>false</code> it
+ * expires when explicitly or automatically unlocked for some other reason.
+ * @param timeoutHint desired lock timeout in seconds (servers are free to
+ * ignore this value); specify {@link Long#MAX_VALUE} for no timeout.
+ * @param ownerInfo a string containing owner information
+ * supplied by the client; servers are free to ignore this value.
+ * @return A <code>Lock</code> object containing a lock token.
+ * @throws UnsupportedRepositoryOperationException if this implementation does not support locking.
+ * @throws LockException if this node is not <code>mix:lockable</code> or this node is already locked or
+ * <code>isDeep</code> is <code>true</code> and a descendant node of this node already holds a lock.
+ * @throws AccessDeniedException if this session does not have permission to lock this node.
+ * @throws InvalidItemStateException if this node has pending unsaved changes.
+ * @throws RepositoryException if another error occurs.
+ */
+ public Lock lock(String absPath, boolean isDeep, boolean isSessionScoped,
+ long timeoutHint, String ownerInfo) throws RepositoryException;
+
+ /**
+ * Returns <code>true</code> if the node at <code>absPath</code> is locked
+ * either as a result of a lock held by that node or by a deep
+ * lock on a node above that node; otherwise returns <code>false</code>.
+ *
+ * @param absPath absolute path of node
+ * @return a <code>boolean</code>.
+ * @throws RepositoryException if an error occurs.
+ */
+ public boolean isLocked(String absPath) throws RepositoryException;
+
+ /**
+ * Removes the specified lock token from this <code>Session</code>.
+ * <p>
+ * A <code>LockException</code> is thrown if the current <code>Session</code>
+ * does not hold the specified lock token.
+ * <p>
+ * A <code>RepositoryException</code> is thrown if another error occurs.
+ *
+ * @param lockToken a lock token (a string)
+ * @throws LockException if the current <code>Session</code> does not hold
+ * the specified lock token.
+ * @throws RepositoryException if another error occurs.
+ */
+ public void removeLockToken(String lockToken) throws LockException, RepositoryException;
+
+ /**
+ * Removes the lock on the node at <code>absPath</code>. Also removes
+ * the properties <code>jcr:lockOwner</code> and <code>jcr:lockIsDeep</code>
+ * from that node. As well, the corresponding lock token is removed from
+ * the set of lock tokens held by the current <code>Session</code>.
+ * <p>
+ * If the node does not currently hold a lock or holds a lock for which
+ * this <code>Session</code> is not the owner, then a
+ * <code>LockException</code> is thrown. Note however that the system
+ * may give permission to a non-owning session to unlock a lock. Typically
+ * such "lock-superuser" capability is intended to facilitate
+ * administrational clean-up of orphaned open-scoped locks.
+ * <p>
+ * Note that it is possible to unlock a node even if it is checked-in (the
+ * lock-related properties will be changed despite the checked-in status).
+ * <p>
+ * If the current session does not have sufficient privileges to remove the
+ * lock, an <code>AccessDeniedException</code> is thrown.
+ * <p>
+ * An <code>InvalidItemStateException</code> is thrown if this node has
+ * pending unsaved changes.
+ * <p>
+ * An <code>UnsupportedRepositoryOperationException</code> is thrown if
+ * this implementation does not support locking.
+ * <p>
+ * A <code>RepositoryException</code> is thrown if another error occurs.
+ *
+ * @param absPath absolute path of node to be unlocked
+ * @throws UnsupportedRepositoryOperationException if this implementation does not support locking.
+ * @throws LockException if this node does not currently hold a lock or holds a lock for which this Session does not have the correct lock token
+ * @throws AccessDeniedException if the current session does not have permission to unlock this node.
+ * @throws InvalidItemStateException if this node has pending unsaved changes.
+ * @throws RepositoryException if another error occurs.
+ */
+ public void unlock(String absPath) throws UnsupportedRepositoryOperationException, LockException, AccessDeniedException, InvalidItemStateException, RepositoryException;
+}
+
Propchange: jackrabbit/trunk/jackrabbit-api/src/main/java/org/apache/jackrabbit/api/jsr283/lock/LockManager.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: jackrabbit/trunk/jackrabbit-api/src/main/java/org/apache/jackrabbit/api/jsr283/lock/LockManager.java
------------------------------------------------------------------------------
svn:keywords = author date id revision url
Modified: jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/lock/LockImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/lock/LockImpl.java?rev=711841&r1=711840&r2=711841&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/lock/LockImpl.java (original)
+++ jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/lock/LockImpl.java Thu Nov 6 03:10:39 2008
@@ -25,7 +25,7 @@
* Implementation of a <code>Lock</code> that gets returned to clients asking
* for a lock.
*/
-class LockImpl implements Lock {
+class LockImpl implements org.apache.jackrabbit.api.jsr283.lock.Lock {
/**
* Lock info containing latest information
@@ -54,6 +54,8 @@
* {@inheritDoc}
*/
public String getLockOwner() {
+ // TODO: TOBEFIXED for 2.0
+ // TODO - respect ownerInfo supplied by the client -> see LockManager#lock
return info.lockOwner;
}
@@ -75,6 +77,14 @@
* {@inheritDoc}
*/
public String getLockToken() {
+ // TODO: TOBEFIXED for 2.0
+ // TODO - token must not be exposed for session-scoped locks (-> adjust tests and derived projects first)
+ // TODO - openScoped tokens *may* be exposed even if session is not lock holder
+ /*
+ if (info.isSessionScoped()) {
+ return null;
+ }
+ */
try {
return info.getLockToken(node.getSession());
} catch (RepositoryException e) {
@@ -108,18 +118,27 @@
if (getLockToken() == null) {
throw new LockException("Session does not hold lock.");
}
+ // TODO: TOBEFIXED for 2.0
+ // TODO - add refresh if timeout is supported -> see #getSecondsRemaining
// since a lock has no expiration date no other action is required
}
//--------------------------------------------------< new JSR 283 methods >
+
/**
- * Returns <code>true</code> if the current session is the owner of this
- * lock, either because it is session-scoped and bound to this session or
- * open-scoped and this session currently holds the token for this lock.
- * Returns <code>false</code> otherwise.
+ * Always returns {@link Long#MAX_VALUE}.
*
- * @return a <code>boolean</code>.
- * @since JCR 2.0
+ * @return Always returns {@link Long#MAX_VALUE}.
+ * @see org.apache.jackrabbit.api.jsr283.lock.Lock#getSecondsRemaining()
+ */
+ public long getSecondsRemaining() {
+ // TODO: TOBEFIXED for 2.0
+ // TODO - add support for timeout specified by the API user -> LockManager#lock
+ return Long.MAX_VALUE;
+ }
+
+ /**
+ * @see org.apache.jackrabbit.api.jsr283.lock.Lock#isLockOwningSession()
*/
public boolean isLockOwningSession() {
try {
Added: jackrabbit/trunk/jackrabbit-core/src/test/java/org/apache/jackrabbit/api/jsr283/lock/AbstractLockTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-core/src/test/java/org/apache/jackrabbit/api/jsr283/lock/AbstractLockTest.java?rev=711841&view=auto
==============================================================================
--- jackrabbit/trunk/jackrabbit-core/src/test/java/org/apache/jackrabbit/api/jsr283/lock/AbstractLockTest.java (added)
+++ jackrabbit/trunk/jackrabbit-core/src/test/java/org/apache/jackrabbit/api/jsr283/lock/AbstractLockTest.java Thu Nov 6 03:10:39 2008
@@ -0,0 +1,101 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.jackrabbit.api.jsr283.lock;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.apache.jackrabbit.test.AbstractJCRTest;
+import org.apache.jackrabbit.test.NotExecutableException;
+
+import javax.jcr.Node;
+import javax.jcr.Session;
+import javax.jcr.RepositoryException;
+import javax.jcr.lock.*;
+
+/** <code>AbstractLockTest</code>... */
+public abstract class AbstractLockTest extends AbstractJCRTest {
+
+ private static Logger log = LoggerFactory.getLogger(AbstractLockTest.class);
+
+ protected Node lockedNode;
+ protected Node childNode;
+ protected Lock lock;
+
+ protected abstract boolean isSessionScoped();
+ protected abstract boolean isDeep();
+
+ protected void setUp() throws Exception {
+ super.setUp();
+
+ lockedNode = testRootNode.addNode(nodeName1, testNodeType);
+ lockedNode.addMixin(mixLockable);
+ childNode = lockedNode.addNode(nodeName2, testNodeType);
+ testRootNode.save();
+
+ // TODO: remove cast
+ // TODO: replace by LockManager#lock call
+ lock = (Lock) lockedNode.lock(isDeep(), isSessionScoped());
+ }
+
+ protected void tearDown() throws Exception {
+ // make sure all locks are removed
+ try {
+ lockedNode.unlock();
+ } catch (RepositoryException e) {
+ // ignore
+ }
+ super.tearDown();
+ }
+
+ /**
+ *
+ */
+ public void testIsDeep() {
+ assertEquals("Lock.isDeep must be consistent with lock call.", isDeep(), lock.isDeep());
+ }
+
+ /**
+ *
+ */
+ public void testIsSessionScoped() {
+ assertEquals("Lock.isSessionScoped must be consistent with lock call.", isSessionScoped(), lock.isSessionScoped());
+ }
+
+ /**
+ *
+ * @throws RepositoryException
+ */
+ public void testIsLockOwningSession() throws RepositoryException {
+ assertTrue("Session must be lock owner", lock.isLockOwningSession());
+ assertTrue("Session must be lock owner", ((Lock) lockedNode.getLock()).isLockOwningSession());
+
+ Session otherSession = helper.getReadOnlySession();
+ try {
+ Lock lck = (Lock) ((Node) otherSession.getItem(lockedNode.getPath())).getLock();
+ assertFalse("Session must not be lock owner", lck.isLockOwningSession());
+ } finally {
+ otherSession.logout();
+ }
+ }
+
+ /**
+ *
+ */
+ public void testGetSecondsRemaining() {
+ assertTrue("Seconds remaining must be a positive long or 0.", lock.getSecondsRemaining() >= 0);
+ }
+}
\ No newline at end of file
Propchange: jackrabbit/trunk/jackrabbit-core/src/test/java/org/apache/jackrabbit/api/jsr283/lock/AbstractLockTest.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: jackrabbit/trunk/jackrabbit-core/src/test/java/org/apache/jackrabbit/api/jsr283/lock/AbstractLockTest.java
------------------------------------------------------------------------------
svn:keywords = author date id revision url
Added: jackrabbit/trunk/jackrabbit-core/src/test/java/org/apache/jackrabbit/api/jsr283/lock/LockManagerTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-core/src/test/java/org/apache/jackrabbit/api/jsr283/lock/LockManagerTest.java?rev=711841&view=auto
==============================================================================
--- jackrabbit/trunk/jackrabbit-core/src/test/java/org/apache/jackrabbit/api/jsr283/lock/LockManagerTest.java (added)
+++ jackrabbit/trunk/jackrabbit-core/src/test/java/org/apache/jackrabbit/api/jsr283/lock/LockManagerTest.java Thu Nov 6 03:10:39 2008
@@ -0,0 +1,32 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.jackrabbit.api.jsr283.lock;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.apache.jackrabbit.test.AbstractJCRTest;
+import org.apache.jackrabbit.test.NotExecutableException;
+
+/** <code>LockManagerTest</code>... */
+public class LockManagerTest extends AbstractJCRTest {
+
+ private static Logger log = LoggerFactory.getLogger(LockManagerTest.class);
+
+ // TODO - timeout hint
+ // TODO - ownerInfo hint
+
+}
\ No newline at end of file
Propchange: jackrabbit/trunk/jackrabbit-core/src/test/java/org/apache/jackrabbit/api/jsr283/lock/LockManagerTest.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: jackrabbit/trunk/jackrabbit-core/src/test/java/org/apache/jackrabbit/api/jsr283/lock/LockManagerTest.java
------------------------------------------------------------------------------
svn:keywords = author date id revision url
Added: jackrabbit/trunk/jackrabbit-core/src/test/java/org/apache/jackrabbit/api/jsr283/lock/OpenScopedLockTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-core/src/test/java/org/apache/jackrabbit/api/jsr283/lock/OpenScopedLockTest.java?rev=711841&view=auto
==============================================================================
--- jackrabbit/trunk/jackrabbit-core/src/test/java/org/apache/jackrabbit/api/jsr283/lock/OpenScopedLockTest.java (added)
+++ jackrabbit/trunk/jackrabbit-core/src/test/java/org/apache/jackrabbit/api/jsr283/lock/OpenScopedLockTest.java Thu Nov 6 03:10:39 2008
@@ -0,0 +1,43 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.jackrabbit.api.jsr283.lock;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.apache.jackrabbit.test.AbstractJCRTest;
+import org.apache.jackrabbit.test.NotExecutableException;
+
+/** <code>OpenScopedLockTest</code>... */
+public class OpenScopedLockTest extends AbstractLockTest {
+
+ private static Logger log = LoggerFactory.getLogger(OpenScopedLockTest.class);
+
+ protected boolean isSessionScoped() {
+ return false;
+ }
+
+ protected boolean isDeep() {
+ return false;
+ }
+
+ /**
+ *
+ */
+ public void testGetLockToken() {
+ assertNotNull("A open scoped lock must expose the token to the lock holder.", lock.getLockToken());
+ }
+}
\ No newline at end of file
Propchange: jackrabbit/trunk/jackrabbit-core/src/test/java/org/apache/jackrabbit/api/jsr283/lock/OpenScopedLockTest.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: jackrabbit/trunk/jackrabbit-core/src/test/java/org/apache/jackrabbit/api/jsr283/lock/OpenScopedLockTest.java
------------------------------------------------------------------------------
svn:keywords = author date id revision url
Added: jackrabbit/trunk/jackrabbit-core/src/test/java/org/apache/jackrabbit/api/jsr283/lock/SessionScopedLockTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-core/src/test/java/org/apache/jackrabbit/api/jsr283/lock/SessionScopedLockTest.java?rev=711841&view=auto
==============================================================================
--- jackrabbit/trunk/jackrabbit-core/src/test/java/org/apache/jackrabbit/api/jsr283/lock/SessionScopedLockTest.java (added)
+++ jackrabbit/trunk/jackrabbit-core/src/test/java/org/apache/jackrabbit/api/jsr283/lock/SessionScopedLockTest.java Thu Nov 6 03:10:39 2008
@@ -0,0 +1,51 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.jackrabbit.api.jsr283.lock;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.apache.jackrabbit.test.AbstractJCRTest;
+import org.apache.jackrabbit.test.NotExecutableException;
+
+import javax.jcr.lock.LockException;
+import javax.jcr.AccessDeniedException;
+import javax.jcr.UnsupportedRepositoryOperationException;
+import javax.jcr.RepositoryException;
+import javax.jcr.Session;
+import javax.jcr.Node;
+
+/** <code>SessionScopedLockTest</code>... */
+public class SessionScopedLockTest extends AbstractLockTest {
+
+ private static Logger log = LoggerFactory.getLogger(SessionScopedLockTest.class);
+
+ protected boolean isSessionScoped() {
+ return true;
+ }
+
+ protected boolean isDeep() {
+ return false;
+ }
+
+ /**
+ *
+ */
+ public void testGetLockToken() {
+ assertNull("A session scoped lock may never expose the token.", lock.getLockToken());
+ }
+
+}
\ No newline at end of file
Propchange: jackrabbit/trunk/jackrabbit-core/src/test/java/org/apache/jackrabbit/api/jsr283/lock/SessionScopedLockTest.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: jackrabbit/trunk/jackrabbit-core/src/test/java/org/apache/jackrabbit/api/jsr283/lock/SessionScopedLockTest.java
------------------------------------------------------------------------------
svn:keywords = author date id revision url
Added: jackrabbit/trunk/jackrabbit-core/src/test/java/org/apache/jackrabbit/api/jsr283/lock/TestAll.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-core/src/test/java/org/apache/jackrabbit/api/jsr283/lock/TestAll.java?rev=711841&view=auto
==============================================================================
--- jackrabbit/trunk/jackrabbit-core/src/test/java/org/apache/jackrabbit/api/jsr283/lock/TestAll.java (added)
+++ jackrabbit/trunk/jackrabbit-core/src/test/java/org/apache/jackrabbit/api/jsr283/lock/TestAll.java Thu Nov 6 03:10:39 2008
@@ -0,0 +1,42 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.jackrabbit.api.jsr283.lock;
+
+import junit.framework.TestCase;
+import junit.framework.Test;
+import junit.framework.TestSuite;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/** <code>TestAll</code>... */
+public class TestAll extends TestCase {
+
+ private static Logger log = LoggerFactory.getLogger(TestAll.class);
+
+ public static Test suite() {
+ TestSuite suite = new TestSuite("org.apache.jackrabbit.api.jsr283.lock tests");
+
+ /*
+ // TODO uncomment as soon as 283 lock impl is completed.
+ suite.addTestSuite(LockManagerTest.class);
+ suite.addTestSuite(OpenScopedLockTest.class);
+ suite.addTestSuite(SessionScopedLockTest.class);
+ */
+
+ return suite;
+ }
+}
\ No newline at end of file
Propchange: jackrabbit/trunk/jackrabbit-core/src/test/java/org/apache/jackrabbit/api/jsr283/lock/TestAll.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: jackrabbit/trunk/jackrabbit-core/src/test/java/org/apache/jackrabbit/api/jsr283/lock/TestAll.java
------------------------------------------------------------------------------
svn:keywords = author date id revision url