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/11 09:16:38 UTC

svn commit: r712984 - in /jackrabbit/trunk: jackrabbit-api/src/main/java/org/apache/jackrabbit/api/jsr283/ jackrabbit-core/src/main/java/org/apache/jackrabbit/core/ jackrabbit-core/src/test/java/org/apache/jackrabbit/api/jsr283/ jackrabbit-core/src/tes...

Author: angela
Date: Tue Nov 11 00:16:38 2008
New Revision: 712984

URL: http://svn.apache.org/viewvc?rev=712984&view=rev
Log:
JCR-1588: JSR 283 Access Control
JCR-1104: JSR 283 support
          > add implemented methods to jsr283.Node.java, 
          > add jsr283.Session.java,
          > let SessionImpl implement jsr283.Session
          > add Session.removeItem

Added:
    jackrabbit/trunk/jackrabbit-api/src/main/java/org/apache/jackrabbit/api/jsr283/Session.java   (with props)
    jackrabbit/trunk/jackrabbit-core/src/test/java/org/apache/jackrabbit/api/jsr283/SessionRemoveItemTest.java   (with props)
    jackrabbit/trunk/jackrabbit-core/src/test/java/org/apache/jackrabbit/api/jsr283/TestAll.java   (with props)
Modified:
    jackrabbit/trunk/jackrabbit-api/src/main/java/org/apache/jackrabbit/api/jsr283/Node.java
    jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/NodeImpl.java
    jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/SessionImpl.java
    jackrabbit/trunk/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/security/authorization/AbstractEvaluationTest.java
    jackrabbit/trunk/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/security/authorization/acl/EvaluationTest.java
    jackrabbit/trunk/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/security/authorization/combined/EvaluationTest.java

Modified: jackrabbit/trunk/jackrabbit-api/src/main/java/org/apache/jackrabbit/api/jsr283/Node.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-api/src/main/java/org/apache/jackrabbit/api/jsr283/Node.java?rev=712984&r1=712983&r2=712984&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-api/src/main/java/org/apache/jackrabbit/api/jsr283/Node.java (original)
+++ jackrabbit/trunk/jackrabbit-api/src/main/java/org/apache/jackrabbit/api/jsr283/Node.java Tue Nov 11 00:16:38 2008
@@ -18,8 +18,10 @@
 
 import javax.jcr.NodeIterator;
 import javax.jcr.RepositoryException;
+import javax.jcr.PropertyIterator;
 import javax.jcr.lock.LockException;
 import javax.jcr.nodetype.ConstraintViolationException;
+import javax.jcr.nodetype.NoSuchNodeTypeException;
 import javax.jcr.version.VersionException;
 
 /**
@@ -29,7 +31,108 @@
  * @since JCR 2.0
  */
 public interface Node extends javax.jcr.Node {
-  
+
+    /**
+     * Returns the identifier of this node. Applies to both referenceable and
+     * non-referenceable nodes.
+     * <p/>
+     * A <code>RepositoryException</code> is thrown if an error occurs.
+     *
+     * @return the identifier of this node
+     * @throws RepositoryException If an error occurs.
+     * @since JCR 2.0
+     */
+    public String getIdentifier() throws RepositoryException;
+
+    /**
+     * This method returns all <code>REFERENCE</code> properties that refer to
+     * this node, have the specified <code>name</code> and that are accessible
+     * through the current <code>Session</code>.
+     * <p/>
+     * If the <code>name</code> parameter is <code>null</code> then all
+     * referring <code>REFERENCES</code> are returned regardless of name.
+     * <p/>
+     * Some level 2 implementations may only return properties that have been
+     * saved (in a transactional setting this includes both those properties
+     * that have been saved but not yet committed, as well as properties that
+     * have been committed). Other level 2 implementations may additionally
+     * return properties that have been added within the current <code>Session</code>
+     * but are not yet saved.
+     * <p/>
+     * In implementations that support versioning, this method does not return
+     * properties that are part of the frozen state of a version in version
+     * storage.
+     * <p/>
+     * If this node has no referring properties with the specified name,
+     * an empty iterator is returned.
+     *
+     * @param name name of referring <code>REFERENCE</code> properties to be
+     *             returned; if <code>null</code> then all referring <code>REFERENCE</code>s
+     *             are returned
+     * @return A <code>PropertyIterator</code>.
+     * @throws RepositoryException if an error occurs
+     * @since JCR 2.0
+     */
+    public PropertyIterator getReferences(String name) throws RepositoryException;
+
+    /**
+     * Changes the primary node type of this node to <code>nodeTypeName</code>.
+     * Also immediately changes this node's <code>jcr:primaryType</code> property
+     * appropriately. Semantically, the new node type may take effect
+     * immediately and <i>must</i> take effect on <code>save</code>. Whichever
+     * behavior is adopted it must be the same as the behavior adopted for
+     * <code>addMixin()</code> (see below) and the behavior that occurs when a
+     * node is first created.
+     * <p/>
+     * If the presence of an existing property or child node would cause an
+     * incompatibility with the new node type a <code>ConstraintViolationException</code>
+     * is thrown either immediately or on <code>save</code>.
+     * <p/>
+     * If the new node type would cause this node to be incompatible with the
+     * node type of its parent then a <code>ConstraintViolationException</code>
+     * is thrown either immediately or on <code>save</code>.
+     * <p/>
+     * A <code>ConstraintViolationException</code> is also thrown either
+     * immediately or on <code>save</code> if a conflict with an already
+     * assigned mixin occurs.
+     * <p/>
+     * A <code>ConstraintViolationException</code> may also be thrown either
+     * immediately or on <code>save</code> if the attempted change violates
+     * implementation-specific node type transition rules. A repository that
+     * disallows all primary node type changes would simple throw this
+     * exception in all cases.
+     * <p/>
+     * If the specified node type is not recognized a
+     * <code>NoSuchNodeTypeException</code> is thrown either immediately
+     * or on <code>save</code>.
+     * <p/>
+     * A <code>VersionException</code> is thrown either immediately or on
+     * <code>save</code> if this node is versionable and checked-in, or is
+     * non-versionable but its nearest versionable ancestor is checked-in.
+     * <p/>
+     * A <code>LockException</code> is thrown either immediately or on
+     * <code>save</code> if a lock prevents the change of node type.
+     * <p/>
+     * A <code>RepositoryException</code> will be thrown if another error occurs.
+     *
+     * @param nodeTypeName the name of the new node type.
+     * @throws ConstraintViolationException If the specified primary node type
+     *                                      is prevented from being assigned.
+     * @throws NoSuchNodeTypeException      If the specified <code>nodeTypeName</code>
+     *                                      is not recognized and this implementation performs this validation
+     *                                      immediately instead of waiting until <code>save</code>.
+     * @throws VersionException             if this node is versionable and checked-in or is
+     *                                      non-versionable but its nearest versionable ancestor is checked-in and this
+     *                                      implementation performs this validation immediately instead of waiting until
+     *                                      <code>save</code>.
+     * @throws LockException                if a lock prevents the change of the primary node type
+     *                                      and this implementation performs this validation immediately instead of
+     *                                      waiting until <code>save</code>.
+     * @throws RepositoryException          if another error occurs.
+     * @since JCR 2.0
+     */
+    public void setPrimaryType(String nodeTypeName) throws NoSuchNodeTypeException, VersionException, ConstraintViolationException, LockException, RepositoryException;
+
     /**
      * Returns an iterator over all nodes that are in the shared set of this
      * node. If this node is not shared then the returned iterator contains

Added: jackrabbit/trunk/jackrabbit-api/src/main/java/org/apache/jackrabbit/api/jsr283/Session.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-api/src/main/java/org/apache/jackrabbit/api/jsr283/Session.java?rev=712984&view=auto
==============================================================================
--- jackrabbit/trunk/jackrabbit-api/src/main/java/org/apache/jackrabbit/api/jsr283/Session.java (added)
+++ jackrabbit/trunk/jackrabbit-api/src/main/java/org/apache/jackrabbit/api/jsr283/Session.java Tue Nov 11 00:16:38 2008
@@ -0,0 +1,351 @@
+/*
+ * 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;
+
+import org.apache.jackrabbit.api.jsr283.security.AccessControlManager;
+import org.apache.jackrabbit.api.jsr283.retention.RetentionManager;
+
+import javax.jcr.ItemNotFoundException;
+import javax.jcr.RepositoryException;
+import javax.jcr.PathNotFoundException;
+import javax.jcr.Property;
+import javax.jcr.Item;
+import javax.jcr.UnsupportedRepositoryOperationException;
+import javax.jcr.nodetype.ConstraintViolationException;
+import javax.jcr.lock.LockException;
+import javax.jcr.version.VersionException;
+import java.util.Map;
+
+/**
+ * This interface holds extensions made in JCR 2.0 while work
+ * is in progress implementing JCR 2.0.
+ *
+ * @since JCR 2.0
+ */
+public interface Session extends javax.jcr.Session {
+
+        /**
+     * A constant representing the <code>read</code> action string, used to
+     * determine if this <code>Session</code> has permission to retrieve an
+     * item (and read the value, in the case of a property).
+     *
+     * @see #hasPermission(String, String)
+     * @see #checkPermission(String, String)
+     * @since JCR 2.0
+     */
+    public static final String ACTION_READ = "read";
+
+    /**
+     * A constant representing the <code>add_node</code> action string, used to
+     * determine if this <code>Session</code> has permission to add a new node.
+     *
+     * @see #hasPermission(String, String)
+     * @see #checkPermission(String, String)
+     * @since JCR 2.0
+     */
+    public static final String ACTION_ADD_NODE = "add_node";
+
+    /**
+     * A constant representing the <code>set_property</code> action string,
+     * used to determine if this <code>Session</code> has permission to set
+     * (add or modify) a property.
+     *
+     * @see #hasPermission(String, String)
+     * @see #checkPermission(String, String)
+     * @since JCR 2.0
+     */
+    public static final String ACTION_SET_PROPERTY = "set_property";
+
+    /**
+     * A constant representing the <code>remove</code> action string,
+     * used to determine if this <code>Session</code> has permission to remove
+     * an item.
+     *
+     * @see #hasPermission(String, String)
+     * @see #checkPermission(String, String)
+     * @since JCR 2.0
+     */
+    public static final String ACTION_REMOVE = "remove";
+
+    /**
+     * Returns the node specified by the given identifier. Applies to both
+     * referenceable and non-referenceable nodes.
+     * <p/>
+     * An <code>ItemNotFoundException</code> is thrown if no node with the
+     * specified identifier exists. This exception is also thrown if this
+     * <code>Session<code> does not have read access to the node with the
+     * specified identifier.
+     * <p/>
+     * A <code>RepositoryException</code> is thrown if another error occurs.
+     *
+     * @param id An identifier.
+     * @return A <code>Node</code>.
+     * @throws ItemNotFoundException if the specified identifier is not found.
+     * @throws RepositoryException if another error occurs.
+     * @since JCR 2.0
+     */
+    public javax.jcr.Node getNodeByIdentifier(String id) throws ItemNotFoundException, RepositoryException;
+
+    /**
+     * Returns the node at the specified absolute path in the workspace.
+     * If no node exists, then a <code>PathNotFoundException</code> is thrown.
+     *
+     * @param absPath An absolute path.
+     * @return the specified <code>Node</code>.
+     * @throws PathNotFoundException If no node exists.
+     * @throws RepositoryException If another error occurs.
+     * @since JCR 2.0
+     */
+    public javax.jcr.Node getNode(String absPath) throws PathNotFoundException, RepositoryException;
+
+    /**
+     * Returns the property at the specified absolute path in the workspace.
+     * If no property exists, then a <code>PathNotFoundException</code> is thrown.
+     *
+     * @param absPath An absolute path.
+     * @return the specified <code>Property</code>.
+     * @throws PathNotFoundException If no property exists.
+     * @throws RepositoryException if another error occurs.
+     * @since JCR 2.0
+     */
+    public Property getProperty(String absPath) throws PathNotFoundException, RepositoryException;
+
+    /**
+     * Returns <code>true</code> if a node exists at <code>absPath</code>
+     * and this <code>Session</code> has read access to it; otherwise returns
+     * <code>false</code>.
+     * <p/>
+     * Throws a <code>RepositoryException</code> if <code>absPath</code>
+     * is not a well-formed absolute path.
+     *
+     * @param absPath An absolute path.
+     * @return a <code>boolean</code>
+     * @throws RepositoryException if <code>absPath</code> is not a well-formed
+     *         absolute path.
+     * @since JCR 2.0
+     */
+    public boolean nodeExists(String absPath) throws RepositoryException;
+
+    /**
+     * Returns <code>true</code> if a property exists at <code>absPath</code>
+     * and this <code>Session</code> has read access to it; otherwise returns
+     * <code>false</code>.
+     * <p/>
+     * Throws a <code>RepositoryException</code> if <code>absPath</code>
+     * is not a well-formed absolute path.
+     *
+     * @param absPath An absolute path.
+     * @return a <code>boolean</code>
+     * @throws RepositoryException if <code>absPath</code> is not a well-formed
+     *         absolute path.
+     * @since JCR 2.0
+     */
+    boolean propertyExists(String absPath) throws RepositoryException;
+
+    /**
+     * Removes the specified item (and its subtree).
+     * <p/>
+     * To persist a removal, a <code>save</code> must be
+     * performed.
+     * <p/>
+     * If a node with same-name siblings is removed, this decrements by one the
+     * indices of all the siblings with indices greater than that of the removed
+     * node. In other words, a removal compacts the array of same-name siblings
+     * and causes the minimal re-numbering required to maintain the original
+     * order but leave no gaps in the numbering.
+     * <p/>
+     * A <code>ReferentialIntegrityException</code> will be thrown on <code>save</code>
+     * if the specified item or an item in its subtree is currently the target of a <code>REFERENCE</code>
+     * property located in this workspace but outside the specified item's subtree and the current <code>Session</code>
+     * has read access to that <code>REFERENCE</code> property.
+     * <p/>
+     * An <code>AccessDeniedException</code> will be thrown on <code>save</code>
+     * if the specified item or an item in its subtree is currently the target of a <code>REFERENCE</code>
+     * property located in this workspace but outside the specified item's subtree and the current <code>Session</code>
+     * <i>does not</i> have read access to that <code>REFERENCE</code> property.
+     * <p/>
+     * A <code>ConstraintViolationException</code> will be thrown either immediately
+     * or on <code>save</code>, if removing the specified item would violate a node type or implementation-specific
+     * constraint. Implementations may differ on when this validation is performed.
+     * <p/>
+     * A <code>VersionException</code> will be thrown either immediately
+     * or on <code>save</code>, if the parent node of the specified item is versionable and checked-in
+     * or is non-versionable but its nearest versionable ancestor is checked-in. Implementations
+     * may differ on when this validation is performed.
+     * <p/>
+     * A <code>LockException</code> will be thrown either immediately or on <code>save</code>
+     * if a lock prevents the removal of the specified item. Implementations may differ on when this validation is performed.
+     *
+     * @param absPath the absolute path of the item to be removed.
+     * @throws VersionException if the parent node of the item at absPath is versionable and checked-in
+     * or is non-versionable but its nearest versionable ancestor is checked-in and this
+     * implementation performs this validation immediately instead of waiting until <code>save</code>.
+     * @throws LockException if a lock prevents the removal of the specified item and this
+     * implementation performs this validation immediately instead of waiting until <code>save</code>.
+     * @throws ConstraintViolationException if removing the specified item would violate a node type or
+     * implementation-specific constraint and this implementation performs this validation immediately
+     * instead of waiting until <code>save</code>.
+     * @throws RepositoryException if another error occurs.
+     * @see Item#remove()
+     * @since JCR 2.0
+     */
+    public void removeItem(String absPath) throws VersionException, LockException, ConstraintViolationException, RepositoryException;
+
+    /**
+     * Returns <code>true</code> if this <code>Session</code> has permission to
+     * perform the specified actions at the specified <code>absPath</code> and
+     * <code>false</code> otherwise.
+     * <p/>
+     * The <code>actions</code> parameter is a comma separated list of action strings.
+     * The following action strings are defined:
+     * <ul>
+     * <li>
+     * {@link #ACTION_ADD_NODE <code>add_node</code>}: If
+     * <code>hasPermission(path, "add_node")</code> returns <code>true</code>,
+     * then this <code>Session</code> has permission to add a node at
+     * <code>path</code>.
+     * </li>
+     * <li>
+     * {@link #ACTION_SET_PROPERTY <code>set_property</code>}: If
+     * <code>hasPermission(path, "set_property")</code>
+     * returns <code>true</code>, then this <code>Session</code> has permission
+     * to set (add or change) a property at <code>path</code>.
+     * </li>
+     * <li>
+     * {@link #ACTION_REMOVE <code>remove</code>}: If
+     * <code>hasPermission(path, "remove")</code> returns <code>true</code>,
+     * then this <code>Session</code> has permission to remove an item at
+     * <code>path</code>.
+     * </li>
+     * <li>
+     * {@link #ACTION_READ <code>read</code>}: If
+     * <code>hasPermission(path, "read")</code> returns <code>true</code>, then
+     * this <code>Session</code> has permission to retrieve (and read the value
+     * of, in the case of a property) an item at <code>path</code>.
+     * </li>
+     * </ul>
+     * When more than one action is specified in the <code>actions</code>
+     * parameter, this method will only return <code>true</code> if this
+     * <code>Session</code> has permission to perform <i>all</i> of the listed
+     * actions at the specified path.
+     * <p/>
+     * The information returned through this method will only reflect the access
+     * control status (both JCR defined and implementation-specific) and not other
+     * restrictions that may exist, such as node type constraints. For example,
+     * even though <code>hasPermission</code> may indicate that a particular
+     * <code>Session</code> may add a property at <code>/A/B/C</code>,
+     * the node type of the node at <code>/A/B</code> may prevent the addition
+     * of a property called <code>C</code>.
+     *
+     * @param absPath an absolute path.
+     * @param actions a comma separated list of action strings.
+     * @return boolean <code>true</code> if this <code>Session</code> has permission to
+     * perform the specified actions at the specified <code>absPath</code>.
+     * @throws RepositoryException if an error occurs.
+     * @since JCR 2.0
+     */
+    public boolean hasPermission(String absPath, String actions) throws RepositoryException;
+
+    /**
+     * Checks whether an operation can be performed given as much context as can be determined
+     * by the repsoitory, including:
+     * <ul>
+     * <li>
+     * Target object (reflecting the current selection in the application) and its current state
+     * (locks etc.).
+     * </li>
+     * <li>
+     * Current user (the current session).
+     * </li>
+     * <li>
+     * Access control rules (permissions granted to the current user).
+     * </li>
+     * <li>
+     * Repository capabilities.
+     * </li>
+     * <li>
+     * Schema information (rules embodied in the node type structure or more
+     * repository specific rules).
+     * </li>
+     * </ul>
+     *
+     * The implementation of this method is best effort: returning <code>false</code> guarantees
+     * that the operation cannot be performed, but returning <code>true</code> does not guarantee
+     * the opposite. The repository implementation should use this to give priority to
+     * performance over completeness. An exception should be thrown only for important
+     * failures such as loss of connectivity to the back-end.
+     *
+     * The <code>methodType</code> parameter identifies the operation using the method event
+     * constants defined for {@link javax.jcr.observation.Event#getMethod}.
+     *
+     * The <code>target</code> parameter identifies the object on which the specified method is
+     * called. For example, for method <code>Node.addNode</code>, <code>target</code> would identify
+     * the <code>Node</code> object. The <code>target</code> is an optional parameter, but must be
+     * supplied if the specified method is defined on javax.jcr.Item or any of its subtypes.
+     * To not supply a <code>target</code>, a <code>null</code> is passed as the second parameter.
+     *
+     * The <code>arguments</code> parameter contains method arguments as defined for
+     * {@link javax.jcr.observation.Event#getMethodInfo}. The <code>arguments</code> parameter is
+     * optional, and even when specified, not all arguments to the corresponding operation need to
+     * be specified. In such a case, the repository should check whether there exists a
+     * set of arguments for which the operation could succeed. To not supply <code>arguments</code>,
+     * either a <code>null</code> or an empty <code>Map</code> is passed as the third parameter.
+     * @param methodType the operation.
+     * @param target the target object of the operation.
+     * @param arguments the arguments of the operation.
+     * @return boolean <code>false</code> if the operation cannot be performed,
+     * <code>true</code> if the operation can be performed or if the repository
+     * cannot determine whether the operation can be performed.
+     * @throws RepositoryException if an error occurs
+     * @since JCR 2.0
+     */
+    public boolean checkCapability(String methodType, Object target, Map arguments) throws RepositoryException;
+
+    /**
+     * Returns the access control manager for this <code>Session</code>.
+     * <p/>
+     * An <code>UnsupportedRepositoryOperationException</code> is thrown if
+     * access control is not supported.
+     * <p/>
+     * A <code>RepositoryException</code> is thrown if another error occurs.
+     *
+     * @return the access control manager for this <code>Session</code>
+     * @throws UnsupportedRepositoryOperationException if access control
+     *         is not supported.
+     * @throws RepositoryException if another error occurs.
+     * @since JCR 2.0
+     */
+    public AccessControlManager getAccessControlManager()
+            throws UnsupportedRepositoryOperationException, RepositoryException;
+
+    /**
+     * Returns the retention and hold manager for this <code>Session</code>.
+     * <p/>
+     * An <code>UnsupportedRepositoryOperationException</code> is thrown if
+     * retention and hold are not supported.
+     * <p/>
+     * A <code>RepositoryException</code> is thrown if another error occurs.
+     *
+     * @return the retention manager for this <code>Session</code>.
+     * @throws UnsupportedRepositoryOperationException if retention and hold
+     * are not supported.
+     * @throws RepositoryException if another error occurs.
+     * @since JCR 2.0
+     */
+    public RetentionManager getRetentionManager()
+            throws UnsupportedRepositoryOperationException, RepositoryException;    
+}
\ No newline at end of file

Propchange: jackrabbit/trunk/jackrabbit-api/src/main/java/org/apache/jackrabbit/api/jsr283/Session.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: jackrabbit/trunk/jackrabbit-api/src/main/java/org/apache/jackrabbit/api/jsr283/Session.java
------------------------------------------------------------------------------
    svn:keywords = author date id revision url

Modified: jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/NodeImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/NodeImpl.java?rev=712984&r1=712983&r2=712984&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/NodeImpl.java (original)
+++ jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/NodeImpl.java Tue Nov 11 00:16:38 2008
@@ -4587,13 +4587,7 @@
 
     //--------------------------------------------------< new JSR 283 methods >
     /**
-     * Returns the identifier of this node. Applies to both referenceable and
-     * non-referenceable nodes.
-     * <p/>
-     * A <code>RepositoryException</code> is thrown if an error occurs.
-     *
-     * @return the identifier of this node
-     * @throws RepositoryException If an error occurs.
+     * @see org.apache.jackrabbit.api.jsr283.Node#getIdentifier()
      * @since JCR 2.0
      */
     public String getIdentifier() throws RepositoryException {
@@ -4601,32 +4595,7 @@
     }
 
     /**
-     * This method returns all <code>REFERENCE</code> properties that refer to
-     * this node, have the specified <code>name</code> and that are accessible
-     * through the current <code>Session</code>.
-     * <p/>
-     * If the <code>name</code> parameter is <code>null</code> then all
-     * referring <code>REFERENCES</code> are returned regardless of name.
-     * <p/>
-     * Some level 2 implementations may only return properties that have been
-     * saved (in a transactional setting this includes both those properties
-     * that have been saved but not yet committed, as well as properties that
-     * have been committed). Other level 2 implementations may additionally
-     * return properties that have been added within the current <code>Session</code>
-     * but are not yet saved.
-     * <p/>
-     * In implementations that support versioning, this method does not return
-     * properties that are part of the frozen state of a version in version
-     * storage.
-     * <p/>
-     * If this node has no referring properties with the specified name,
-     * an empty iterator is returned.
-     *
-     * @param name name of referring <code>REFERENCE</code> properties to be
-     *        returned; if <code>null</code> then all referring <code>REFERENCE</code>s
-     *        are returned
-     * @return A <code>PropertyIterator</code>.
-     * @throws RepositoryException if an error occurs
+     * @see org.apache.jackrabbit.api.jsr283.Node#getReferences(String)
      * @since JCR 2.0
      */
     public PropertyIterator getReferences(String name)
@@ -4669,59 +4638,7 @@
     }
 
     /**
-     * Changes the primary node type of this node to <code>nodeTypeName</code>.
-     * Also immediately changes this node's <code>jcr:primaryType</code> property
-     * appropriately. Semantically, the new node type may take effect
-     * immediately and <i>must</i> take effect on <code>save</code>. Whichever
-     * behavior is adopted it must be the same as the behavior adopted for
-     * <code>addMixin()</code> (see below) and the behavior that occurs when a
-     * node is first created.
-     * <p/>
-     * If the presence of an existing property or child node would cause an
-     * incompatibility with the new node type a <code>ConstraintViolationException</code>
-     * is thrown either immediately or on <code>save</code>.
-     * <p/>
-     * If the new node type would cause this node to be incompatible with the
-     * node type of its parent then a <code>ConstraintViolationException</code>
-     * is thrown either immediately or on <code>save</code>.
-     * <p/>
-     * A <code>ConstraintViolationException</code> is also thrown either
-     * immediately or on <code>save</code> if a conflict with an already
-     * assigned mixin occurs.
-     * <p/>
-     * A <code>ConstraintViolationException</code> may also be thrown either
-     * immediately or on <code>save</code> if the attempted change violates
-     * implementation-specific node type transition rules. A repository that
-     * disallows all primary node type changes would simple throw this
-     * exception in all cases.
-     * <p/>
-     * If the specified node type is not recognized a
-     * <code>NoSuchNodeTypeException</code> is thrown either immediately
-     * or on <code>save</code>.
-     * <p/>
-     * A <code>VersionException</code> is thrown either immediately or on
-     * <code>save</code> if this node is versionable and checked-in, or is
-     * non-versionable but its nearest versionable ancestor is checked-in.
-     * <p/>
-     * A <code>LockException</code> is thrown either immediately or on
-     * <code>save</code> if a lock prevents the change of node type.
-     * <p/>
-     * A <code>RepositoryException</code> will be thrown if another error occurs.
-     *
-     * @param nodeTypeName the name of the new node type.
-     * @throws ConstraintViolationException If the specified primary node type
-     * is prevented from being assigned.
-     * @throws NoSuchNodeTypeException If the specified <code>nodeTypeName</code>
-     * is not recognized and this implementation performs this validation
-     * immediately instead of waiting until <code>save</code>.
-     * @throws VersionException if this node is versionable and checked-in or is
-     * non-versionable but its nearest versionable ancestor is checked-in and this
-     * implementation performs this validation immediately instead of waiting until
-     * <code>save</code>.
-     * @throws LockException if a lock prevents the change of the primary node type
-     * and this implementation performs this validation immediately instead of
-     * waiting until <code>save</code>.
-     * @throws RepositoryException  if another error occurs.
+     * @see org.apache.jackrabbit.api.jsr283.Node#setPrimaryType(String) 
      * @since JCR 2.0
      */
     public void setPrimaryType(String nodeTypeName)

Modified: jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/SessionImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/SessionImpl.java?rev=712984&r1=712983&r2=712984&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/SessionImpl.java (original)
+++ jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/SessionImpl.java Tue Nov 11 00:16:38 2008
@@ -107,29 +107,29 @@
  * A <code>SessionImpl</code> ...
  */
 public class SessionImpl extends AbstractSession
-        implements JackrabbitSession, NamespaceResolver, NamePathResolver, Dumpable {
+        implements org.apache.jackrabbit.api.jsr283.Session, JackrabbitSession, NamespaceResolver, NamePathResolver, Dumpable {
 
     private static Logger log = LoggerFactory.getLogger(SessionImpl.class);
 
     /**
-     * TODO deprecate as soon as present with Session interface (JSR 283)
+     * @deprecated Use {@link org.apache.jackrabbit.api.jsr283.Session#ACTION_READ} instead.
      */
-    public static final String READ_ACTION = "read";
+    public static final String READ_ACTION = org.apache.jackrabbit.api.jsr283.Session.ACTION_READ;
 
     /**
-     * TODO deprecate as soon as present with Session interface (JSR 283)
+     * @deprecated Use {@link org.apache.jackrabbit.api.jsr283.Session#ACTION_REMOVE} instead.
      */
-    public static final String REMOVE_ACTION = "remove";
+    public static final String REMOVE_ACTION = org.apache.jackrabbit.api.jsr283.Session.ACTION_REMOVE;
 
     /**
-     * TODO deprecate as soon as present with Session interface (JSR 283)
+     * @deprecated Use {@link org.apache.jackrabbit.api.jsr283.Session#ACTION_ADD_NODE} instead.
      */
-    public static final String ADD_NODE_ACTION = "add_node";
+    public static final String ADD_NODE_ACTION = org.apache.jackrabbit.api.jsr283.Session.ACTION_ADD_NODE;
 
     /**
-     * TODO deprecate as soon as present with Session interface (JSR 283)
+     * @deprecated Use {@link org.apache.jackrabbit.api.jsr283.Session#ACTION_SET_PROPERTY} instead.
      */
-    public static final String SET_PROPERTY_ACTION = "set_property";
+    public static final String SET_PROPERTY_ACTION = org.apache.jackrabbit.api.jsr283.Session.ACTION_SET_PROPERTY;
 
     /**
      * flag indicating whether this session is alive
@@ -1315,20 +1315,7 @@
 
     //--------------------------------------------------< new JSR 283 methods >
     /**
-     * Returns the node specified by the given identifier. Applies to both
-     * referenceable and non-referenceable nodes.
-     * <p/>
-     * An <code>ItemNotFoundException</code> is thrown if no node with the
-     * specified identifier exists. This exception is also thrown if this
-     * <code>Session<code> does not have read access to the node with the
-     * specified identifier.
-     * <p/>
-     * A <code>RepositoryException</code> is thrown if another error occurs.
-     *
-     * @param id An identifier.
-     * @return A <code>Node</code>.
-     * @throws ItemNotFoundException if the specified identifier is not found.
-     * @throws RepositoryException if another error occurs.
+     * @see org.apache.jackrabbit.api.jsr283.Session#getNodeByIdentifier(String) 
      * @since JCR 2.0
      */
     public Node getNodeByIdentifier(String id)
@@ -1343,13 +1330,7 @@
     }
 
     /**
-     * Returns the node at the specified absolute path in the workspace.
-     * If no node exists, then a <code>PathNotFoundException</code> is thrown.
-     *
-     * @param absPath An absolute path.
-     * @return the specified <code>Node</code>.
-     * @throws PathNotFoundException If no node exists.
-     * @throws RepositoryException If another error occurs.
+     * @see org.apache.jackrabbit.api.jsr283.Session#getNode(String)
      * @since JCR 2.0
      */
     public Node getNode(String absPath)
@@ -1373,13 +1354,7 @@
     }
 
     /**
-     * Returns the property at the specified absolute path in the workspace.
-     * If no property exists, then a <code>PathNotFoundException</code> is thrown.
-     *
-     * @param absPath An absolute path.
-     * @return the specified <code>Property</code>.
-     * @throws PathNotFoundException If no property exists.
-     * @throws RepositoryException if another error occurs.
+     * @see org.apache.jackrabbit.api.jsr283.Session#getProperty(String)
      * @since JCR 2.0
      */
     public Property getProperty(String absPath)
@@ -1403,17 +1378,7 @@
     }
 
     /**
-     * Returns <code>true</code> if a node exists at <code>absPath</code>
-     * and this <code>Session</code> has read access to it; otherwise returns
-     * <code>false</code>.
-     * <p/>
-     * Throws a <code>RepositoryException</code> if <code>absPath</code>
-     * is not a well-formed absolute path.
-     *
-     * @param absPath An absolute path.
-     * @return a <code>boolean</code>
-     * @throws RepositoryException if <code>absPath</code> is not a well-formed
-     *         absolute path.
+     * @see org.apache.jackrabbit.api.jsr283.Session#nodeExists(String)
      * @since JCR 2.0
      */
     public boolean nodeExists(String absPath) throws RepositoryException {
@@ -1434,17 +1399,7 @@
     }
 
     /**
-     * Returns <code>true</code> if a property exists at <code>absPath</code>
-     * and this <code>Session</code> has read access to it; otherwise returns
-     * <code>false</code>.
-     * <p/>
-     * Throws a <code>RepositoryException</code> if <code>absPath</code>
-     * is not a well-formed absolute path.
-     *
-     * @param absPath An absolute path.
-     * @return a <code>boolean</code>
-     * @throws RepositoryException if <code>absPath</code> is not a well-formed
-     *         absolute path.
+     * @see org.apache.jackrabbit.api.jsr283.Session#propertyExists(String)
      * @since JCR 2.0
      */
     public boolean propertyExists(String absPath) throws RepositoryException {
@@ -1465,7 +1420,32 @@
     }
 
     /**
-     * @see Session#hasPermission(String, String)
+     * @see org.apache.jackrabbit.api.jsr283.Session#removeItem(String)
+     * @since JCR 2.0
+     */
+    public void removeItem(String absPath) throws VersionException,
+            LockException, ConstraintViolationException, RepositoryException {
+        // check sanity of this session
+        sanityCheck();
+        Item item;
+        try {
+            Path p = getQPath(absPath).getNormalizedPath();
+            if (!p.isAbsolute()) {
+                throw new RepositoryException("not an absolute path: " + absPath);
+            }
+            item = getItemManager().getItem(p);
+        } catch (AccessDeniedException e) {
+            throw new PathNotFoundException(absPath);
+        } catch (NameException e) {
+            String msg = "invalid path:" + absPath;
+            log.debug(msg);
+            throw new RepositoryException(msg, e);
+        }
+        item.remove();
+    }
+
+    /**
+     * @see org.apache.jackrabbit.api.jsr283.Session#hasPermission(String, String)
      * @since 2.0
      */
     public boolean hasPermission(String absPath, String actions) throws RepositoryException {
@@ -1479,16 +1459,16 @@
 
         Set s = new HashSet(Arrays.asList(actions.split(",")));
         int permissions = 0;
-        if (s.remove(SessionImpl.READ_ACTION)) {
+        if (s.remove(ACTION_READ)) {
             permissions |= Permission.READ;
         }
-        if (s.remove(SessionImpl.ADD_NODE_ACTION)) {
+        if (s.remove(ACTION_ADD_NODE)) {
             permissions |= Permission.ADD_NODE;
         }
-        if (s.remove(SessionImpl.SET_PROPERTY_ACTION)) {
+        if (s.remove(ACTION_SET_PROPERTY)) {
             permissions |= Permission.SET_PROPERTY;
         }
-        if (s.remove(SessionImpl.REMOVE_ACTION)) {
+        if (s.remove(ACTION_REMOVE)) {
             if (nodeExists(absPath)) {
                 permissions |= (propertyExists(absPath)) ?
                         (Permission.REMOVE_NODE | Permission.REMOVE_PROPERTY) :
@@ -1515,7 +1495,17 @@
     }
 
     /**
-     * @see Session#getAccessControlManager()
+     * @see org.apache.jackrabbit.api.jsr283.Session#checkCapability(String, Object, Map)
+     * @since JCR 2.0
+     */
+    public boolean checkCapability(String methodType, Object target, Map arguments)
+            throws RepositoryException {
+        //TODO
+        throw new UnsupportedRepositoryOperationException("Not yet implemented");
+    }
+
+    /**
+     * @see org.apache.jackrabbit.api.jsr283.Session#getAccessControlManager()
      * @since JCR 2.0
      */
     public AccessControlManager getAccessControlManager()
@@ -1528,7 +1518,7 @@
     }
 
     /**
-     * @see Session#getRetentionManager()
+     * @see org.apache.jackrabbit.api.jsr283.Session#getRetentionManager()
      * @since JCR 2.0
      */
     public synchronized RetentionManager getRetentionManager()

Added: jackrabbit/trunk/jackrabbit-core/src/test/java/org/apache/jackrabbit/api/jsr283/SessionRemoveItemTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-core/src/test/java/org/apache/jackrabbit/api/jsr283/SessionRemoveItemTest.java?rev=712984&view=auto
==============================================================================
--- jackrabbit/trunk/jackrabbit-core/src/test/java/org/apache/jackrabbit/api/jsr283/SessionRemoveItemTest.java (added)
+++ jackrabbit/trunk/jackrabbit-core/src/test/java/org/apache/jackrabbit/api/jsr283/SessionRemoveItemTest.java Tue Nov 11 00:16:38 2008
@@ -0,0 +1,203 @@
+/*
+ * 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;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.apache.jackrabbit.test.AbstractJCRTest;
+import org.apache.jackrabbit.test.NotExecutableException;
+
+import javax.jcr.InvalidItemStateException;
+import javax.jcr.AccessDeniedException;
+import javax.jcr.RepositoryException;
+import javax.jcr.Property;
+import javax.jcr.version.VersionException;
+import javax.jcr.lock.LockException;
+
+/** <code>SessionRemoveItemTest</code>... */
+public class SessionRemoveItemTest extends AbstractJCRTest {
+
+    private static Logger log = LoggerFactory.getLogger(SessionRemoveItemTest.class);
+
+    private Session adminSession;
+    private Session readOnlySession;
+
+    private javax.jcr.Node removeNode;
+    private String nPath;
+
+    protected void setUp() throws Exception {
+        super.setUp();
+
+        // TODO: rm casts once jsr283 is released
+        if (superuser instanceof Session) {
+            adminSession = (Session) superuser;
+        } else {
+            throw new NotExecutableException("org.apache.jackrabbit.api.jsr283.Session expected.");
+        }
+
+        javax.jcr.Session s = helper.getReadOnlySession();
+        if (s instanceof Session) {
+            readOnlySession = (Session) s;
+        } else {
+            throw new NotExecutableException("org.apache.jackrabbit.api.jsr283.Session expected.");
+        }
+
+        removeNode = testRootNode.addNode(nodeName1, testNodeType);
+        testRootNode.save();
+        nPath = removeNode.getPath();
+    }
+
+    protected void tearDown() throws Exception {
+        if (readOnlySession != null) {
+            readOnlySession.logout();
+        }
+        super.tearDown();
+    }
+
+    public void testRemoveItem() throws RepositoryException {
+        adminSession.removeItem(nPath);
+        assertFalse(adminSession.nodeExists(nPath));
+    }
+
+    public void testRemoveItem2() throws RepositoryException {
+        adminSession.removeItem(nPath);
+        try {
+            removeNode.getParent();
+            fail("Cannot retrieve the parent from a transiently removed item.");
+        } catch (InvalidItemStateException e) {
+            // success
+        }
+    }
+
+    public void testRemoveItem3() throws RepositoryException {
+        adminSession.removeItem(nPath);
+
+        // node must still exist for another session.
+        assertTrue(readOnlySession.nodeExists(nPath));
+    }
+
+    public void testRemoveItem4() throws RepositoryException {
+        try {
+            readOnlySession.removeItem(nPath);
+            readOnlySession.save();
+            fail("A read-only session must not be allowed to remove an item");
+        } catch (AccessDeniedException e) {
+            // success
+        }
+    }
+
+    public void testRemoveLockedNode() throws RepositoryException, NotExecutableException {
+        if (!removeNode.isNodeType(mixLockable)) {
+            if (removeNode.canAddMixin(mixLockable)) {
+                removeNode.addMixin(mixLockable);
+                removeNode.save();
+            } else {
+                throw new NotExecutableException("Cannot make test node lockable.");
+            }
+        }
+
+        // make sure the test node is locked.
+        removeNode.lock(true, true);
+        Session testSession = null;
+        try {
+            testSession = (Session) helper.getReadWriteSession();
+            // removal of the locked node is a alteration of the parent, which
+            // isn't locked -> must succeed.
+            testSession.removeItem(nPath);
+            testSession.save();
+        } finally {
+            if (testSession != null) {
+                testSession.logout();
+            }
+        }
+    }
+
+    public void testRemoveLockedChildItem() throws RepositoryException, NotExecutableException {
+        // add a child property and a child node to test deep lock effect.
+        javax.jcr.Node childN = removeNode.addNode(nodeName2);
+        Property childP = removeNode.setProperty(propertyName2, "propvalue2");
+        removeNode.save();
+
+        if (!removeNode.isNodeType(mixLockable)) {
+            if (removeNode.canAddMixin(mixLockable)) {
+                removeNode.addMixin(mixLockable);
+                removeNode.save();
+            } else {
+                throw new NotExecutableException("Cannot make test node lockable.");
+            }
+        }
+
+        // make sure the test node is locked.
+        removeNode.lock(true, true);
+        Session testSession = null;
+
+        try {
+            testSession = (Session) helper.getReadWriteSession();
+            try {
+                testSession.removeItem(childN.getPath());
+                testSession.save();
+                fail("Locked child node cannot be removed by another session.");
+            } catch (LockException e) {
+                // success
+            }
+            try {
+                testSession.removeItem(childP.getPath());
+                testSession.save();
+                fail("Locked child node cannot be removed by another session.");
+            } catch (LockException e) {
+                // success
+            }
+        } finally {
+            if (testSession != null) {
+                testSession.logout();
+            }
+            removeNode.unlock();
+        }
+    }
+
+    public void testRemoveCheckedInItem() throws RepositoryException, NotExecutableException {
+        // add a child property and a child node to test deep lock effect.
+        javax.jcr.Node childN = removeNode.addNode(nodeName2);
+        Property childP = removeNode.setProperty(propertyName2, "propvalue2");
+        removeNode.save();
+
+        if (!removeNode.isNodeType(mixVersionable)) {
+            if (removeNode.canAddMixin(mixVersionable)) {
+                removeNode.addMixin(mixVersionable);
+                removeNode.save();
+            } else {
+                throw new NotExecutableException("Cannot make test node versionable.");
+            }
+        }
+
+        removeNode.checkin();
+        try {
+            adminSession.removeItem(childP.getPath());
+            adminSession.save();
+            fail("child property of a checked-in node cannot be removed.");
+        } catch (VersionException e) {
+            // success
+        }
+        try {
+            adminSession.removeItem(childN.getPath());
+            adminSession.save();
+            fail("child node of a checked-in node cannot be removed.");
+        } catch (VersionException e) {
+            // success
+        }
+    }
+}
\ No newline at end of file

Propchange: jackrabbit/trunk/jackrabbit-core/src/test/java/org/apache/jackrabbit/api/jsr283/SessionRemoveItemTest.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: jackrabbit/trunk/jackrabbit-core/src/test/java/org/apache/jackrabbit/api/jsr283/SessionRemoveItemTest.java
------------------------------------------------------------------------------
    svn:keywords = author date id revision url

Added: jackrabbit/trunk/jackrabbit-core/src/test/java/org/apache/jackrabbit/api/jsr283/TestAll.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-core/src/test/java/org/apache/jackrabbit/api/jsr283/TestAll.java?rev=712984&view=auto
==============================================================================
--- jackrabbit/trunk/jackrabbit-core/src/test/java/org/apache/jackrabbit/api/jsr283/TestAll.java (added)
+++ jackrabbit/trunk/jackrabbit-core/src/test/java/org/apache/jackrabbit/api/jsr283/TestAll.java Tue Nov 11 00:16:38 2008
@@ -0,0 +1,37 @@
+/*
+ * 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;
+
+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 tests");
+
+        suite.addTestSuite(SessionRemoveItemTest.class);
+
+        return suite;
+    }
+}
\ No newline at end of file

Propchange: jackrabbit/trunk/jackrabbit-core/src/test/java/org/apache/jackrabbit/api/jsr283/TestAll.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: jackrabbit/trunk/jackrabbit-core/src/test/java/org/apache/jackrabbit/api/jsr283/TestAll.java
------------------------------------------------------------------------------
    svn:keywords = author date id revision url

Modified: jackrabbit/trunk/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/security/authorization/AbstractEvaluationTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/security/authorization/AbstractEvaluationTest.java?rev=712984&r1=712983&r2=712984&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/security/authorization/AbstractEvaluationTest.java (original)
+++ jackrabbit/trunk/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/security/authorization/AbstractEvaluationTest.java Tue Nov 11 00:16:38 2008
@@ -497,9 +497,9 @@
          - add-node
          - remove.
          */
-        String aActions = SessionImpl.SET_PROPERTY_ACTION + "," + SessionImpl.READ_ACTION;
+        String aActions = org.apache.jackrabbit.api.jsr283.Session.ACTION_SET_PROPERTY + "," + org.apache.jackrabbit.api.jsr283.Session.ACTION_READ;
         assertTrue(testSession.hasPermission(childNPath, aActions));
-        String dActions = SessionImpl.REMOVE_ACTION + "," + SessionImpl.ADD_NODE_ACTION;
+        String dActions = org.apache.jackrabbit.api.jsr283.Session.ACTION_REMOVE + "," + org.apache.jackrabbit.api.jsr283.Session.ACTION_ADD_NODE;
         assertFalse(testSession.hasPermission(childNPath, dActions));
 
         /*
@@ -544,8 +544,8 @@
          - neither node at path nor at childNPath can be removed since
            REMOVE_NODE privilege is missing.
          */
-        assertFalse(testSession.hasPermission(path, SessionImpl.REMOVE_ACTION));
-        assertFalse(testSession.hasPermission(childNPath, SessionImpl.REMOVE_ACTION));
+        assertFalse(testSession.hasPermission(path, org.apache.jackrabbit.api.jsr283.Session.ACTION_REMOVE));
+        assertFalse(testSession.hasPermission(childNPath, org.apache.jackrabbit.api.jsr283.Session.ACTION_REMOVE));
     }
 
     public void testRemovePermission2() throws NotExecutableException, RepositoryException {
@@ -566,8 +566,8 @@
          - neither node at path nor at childNPath can be removed permission
            due to missing remove_child_nodes privilege.
          */
-        assertFalse(testSession.hasPermission(path, SessionImpl.REMOVE_ACTION));
-        assertFalse(testSession.hasPermission(childNPath, SessionImpl.REMOVE_ACTION));
+        assertFalse(testSession.hasPermission(path, org.apache.jackrabbit.api.jsr283.Session.ACTION_REMOVE));
+        assertFalse(testSession.hasPermission(childNPath, org.apache.jackrabbit.api.jsr283.Session.ACTION_REMOVE));
     }
 
    public void testRemovePermission3() throws NotExecutableException, RepositoryException {
@@ -594,8 +594,8 @@
          - privileges: both at path and at childNPath 'remove_node' and
            'remove_child_nodes' are present.
         */
-       assertFalse(testSession.hasPermission(path, SessionImpl.REMOVE_ACTION));
-       assertTrue(testSession.hasPermission(childNPath, SessionImpl.REMOVE_ACTION));
+       assertFalse(testSession.hasPermission(path, org.apache.jackrabbit.api.jsr283.Session.ACTION_REMOVE));
+       assertTrue(testSession.hasPermission(childNPath, org.apache.jackrabbit.api.jsr283.Session.ACTION_REMOVE));
 
        assertTrue(testAcMgr.hasPrivileges(path, privs));
        assertTrue(testAcMgr.hasPrivileges(childNPath, privs));
@@ -624,8 +624,8 @@
          - remove-permission present for node at childNPath
          - both remove_node and remove_childNodes privilege present at childNPath
          */
-        assertFalse(testSession.hasPermission(path, SessionImpl.REMOVE_ACTION));
-        assertTrue(testSession.hasPermission(childNPath, SessionImpl.REMOVE_ACTION));
+        assertFalse(testSession.hasPermission(path, org.apache.jackrabbit.api.jsr283.Session.ACTION_REMOVE));
+        assertTrue(testSession.hasPermission(childNPath, org.apache.jackrabbit.api.jsr283.Session.ACTION_REMOVE));
         assertTrue(testAcMgr.hasPrivileges(childNPath, new Privilege[] {rmChildNodes[0], rmNode[0]}));
     }
 
@@ -646,7 +646,7 @@
          expected result:
          - node at childNPath can't be removed since REMOVE_CHILD_NODES is missing.
          */
-        assertFalse(testSession.hasPermission(childNPath, SessionImpl.REMOVE_ACTION));
+        assertFalse(testSession.hasPermission(childNPath, org.apache.jackrabbit.api.jsr283.Session.ACTION_REMOVE));
     }
 
     public void testRemovePermission6() throws NotExecutableException, RepositoryException {
@@ -674,8 +674,8 @@
          - no remove_node privilege at childNPath
          - read, remove_child_nodes privilege at childNPath
          */
-        assertFalse(testSession.hasPermission(path, SessionImpl.REMOVE_ACTION));
-        assertFalse(testSession.hasPermission(childNPath, SessionImpl.REMOVE_ACTION));
+        assertFalse(testSession.hasPermission(path, org.apache.jackrabbit.api.jsr283.Session.ACTION_REMOVE));
+        assertFalse(testSession.hasPermission(childNPath, org.apache.jackrabbit.api.jsr283.Session.ACTION_REMOVE));
         assertTrue(testAcMgr.hasPrivileges(childNPath, privilegesFromNames(new String[] {Privilege.JCR_READ, Privilege.JCR_REMOVE_CHILD_NODES})));
         assertFalse(testAcMgr.hasPrivileges(childNPath, privilegesFromName(Privilege.JCR_REMOVE_NODE)));
     }
@@ -701,7 +701,7 @@
          expected result:
          - node at childNPath can't be removed.
          */
-        assertFalse(testSession.hasPermission(childNPath, SessionImpl.REMOVE_ACTION));
+        assertFalse(testSession.hasPermission(childNPath, org.apache.jackrabbit.api.jsr283.Session.ACTION_REMOVE));
 
         // additionally add remove_child_nodes priv at 'childNPath'
         givePrivileges(childNPath, rmChildNodes, getRestrictions(childNPath));
@@ -710,7 +710,7 @@
          - node at childNPath still can't be removed.
          - but both privileges (remove_node, remove_child_nodes) are present.
          */
-        assertFalse(testSession.hasPermission(childNPath, SessionImpl.REMOVE_ACTION));
+        assertFalse(testSession.hasPermission(childNPath, org.apache.jackrabbit.api.jsr283.Session.ACTION_REMOVE));
         assertTrue(testAcMgr.hasPrivileges(childNPath, new Privilege[] {rmChildNodes[0], rmNode[0]}));
     }
 
@@ -737,7 +737,7 @@
          expected result:
          - remove permission must be granted at childNPath
          */
-        assertTrue(testSession.hasPermission(childNPath, SessionImpl.REMOVE_ACTION));
+        assertTrue(testSession.hasPermission(childNPath, org.apache.jackrabbit.api.jsr283.Session.ACTION_REMOVE));
         assertTrue(testAcMgr.hasPrivileges(childNPath, new Privilege[] {rmChildNodes[0], rmNode[0]}));
     }
 
@@ -758,7 +758,7 @@
         /* testuser must get the permissions/privileges inherited from
            the group it is member of.
          */
-        String actions = SessionImpl.SET_PROPERTY_ACTION + "," + SessionImpl.READ_ACTION;
+        String actions = org.apache.jackrabbit.api.jsr283.Session.ACTION_SET_PROPERTY + "," + org.apache.jackrabbit.api.jsr283.Session.ACTION_READ;
         assertTrue(testSession.hasPermission(path, actions));
         Privilege[] privs = privilegesFromName(Privilege.JCR_MODIFY_PROPERTIES);
         assertTrue(testAcMgr.hasPrivileges(path, privs));
@@ -783,7 +783,7 @@
          since user-permissions overrule the group permissions, testuser must
          not have set_property action / modify_properties privilege.
          */
-        String actions = SessionImpl.SET_PROPERTY_ACTION;
+        String actions = org.apache.jackrabbit.api.jsr283.Session.ACTION_SET_PROPERTY;
         assertFalse(testSession.hasPermission(path, actions));
         assertFalse(testAcMgr.hasPrivileges(path, privilegesFromName(Privilege.JCR_MODIFY_PROPERTIES)));
     }
@@ -808,7 +808,7 @@
         String childPath = n.getPath();
         Privilege[] privs = testAcMgr.getPrivileges(childPath);
         assertTrue(PrivilegeRegistry.READ == PrivilegeRegistry.getBits(privs));
-        testSession.checkPermission(childPath, SessionImpl.READ_ACTION);
+        testSession.checkPermission(childPath, org.apache.jackrabbit.api.jsr283.Session.ACTION_READ);
     }
 
     public void testNonExistingItem() throws RepositoryException, NotExecutableException {
@@ -819,7 +819,7 @@
         */
         String rootPath = getTestSession().getRootNode().getPath();
         checkReadOnly(rootPath);
-        testSession.checkPermission(rootPath + "nonExistingItem", SessionImpl.READ_ACTION);
+        testSession.checkPermission(rootPath + "nonExistingItem", org.apache.jackrabbit.api.jsr283.Session.ACTION_READ);
     }
 
     public void testACItemsAreProtected() throws NotExecutableException, RepositoryException {
@@ -893,10 +893,10 @@
            - testSession cannot add child-nodes at 'path'
            - testSession can add child-nodes below path
          */
-        assertFalse(testSession.hasPermission(path, SessionImpl.ADD_NODE_ACTION));
-        assertTrue(testSession.hasPermission(path+"/anychild", SessionImpl.ADD_NODE_ACTION));
+        assertFalse(testSession.hasPermission(path, org.apache.jackrabbit.api.jsr283.Session.ACTION_ADD_NODE));
+        assertTrue(testSession.hasPermission(path+"/anychild", org.apache.jackrabbit.api.jsr283.Session.ACTION_ADD_NODE));
         String childPath = n.getPath();
-        assertTrue(testSession.hasPermission(childPath, SessionImpl.ADD_NODE_ACTION));
+        assertTrue(testSession.hasPermission(childPath, org.apache.jackrabbit.api.jsr283.Session.ACTION_ADD_NODE));
     }
 
 

Modified: jackrabbit/trunk/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/security/authorization/acl/EvaluationTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/security/authorization/acl/EvaluationTest.java?rev=712984&r1=712983&r2=712984&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/security/authorization/acl/EvaluationTest.java (original)
+++ jackrabbit/trunk/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/security/authorization/acl/EvaluationTest.java Tue Nov 11 00:16:38 2008
@@ -170,7 +170,7 @@
            content that requires jcr:modifyAccessControl privilege instead.
          */
         String policyPath = childNPath + "/rep:policy";
-        assertFalse(testSession.hasPermission(policyPath, SessionImpl.REMOVE_ACTION));
+        assertFalse(testSession.hasPermission(policyPath, org.apache.jackrabbit.api.jsr283.Session.ACTION_REMOVE));
         assertTrue(testAcMgr.hasPrivileges(policyPath, new Privilege[] {rmChildNodes[0], rmNode[0]}));
     }
 }
\ No newline at end of file

Modified: jackrabbit/trunk/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/security/authorization/combined/EvaluationTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/security/authorization/combined/EvaluationTest.java?rev=712984&r1=712983&r2=712984&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/security/authorization/combined/EvaluationTest.java (original)
+++ jackrabbit/trunk/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/security/authorization/combined/EvaluationTest.java Tue Nov 11 00:16:38 2008
@@ -149,7 +149,7 @@
          - nodebased wins over principalbased -> READ is denied
          */
         assertFalse(testSession.itemExists(path));
-        assertFalse(testSession.hasPermission(path, SessionImpl.READ_ACTION));
+        assertFalse(testSession.hasPermission(path, org.apache.jackrabbit.api.jsr283.Session.ACTION_READ));
         assertFalse(testAcMgr.hasPrivileges(path, readPrivs));
 
         // remove the nodebased policy
@@ -162,7 +162,7 @@
          - READ privilege is present again.
          */
         assertTrue(testSession.itemExists(path));
-        assertTrue(testSession.hasPermission(path, SessionImpl.READ_ACTION));
+        assertTrue(testSession.hasPermission(path, org.apache.jackrabbit.api.jsr283.Session.ACTION_READ));
         assertTrue(testAcMgr.hasPrivileges(path, readPrivs));
 
         // nodebased: add WRITE privilege for 'testUser' at 'path'
@@ -175,7 +175,7 @@
          expected result:
          - MODIFY_PROPERTIES privilege still present
          */
-        assertTrue(testSession.hasPermission(path+"/anyproperty", SessionImpl.SET_PROPERTY_ACTION));
+        assertTrue(testSession.hasPermission(path+"/anyproperty", org.apache.jackrabbit.api.jsr283.Session.ACTION_SET_PROPERTY));
         assertTrue(testAcMgr.hasPrivileges(path, wrtPrivileges));
 
         // nodebased: deny MODIFY_PROPERTIES privileges for 'testUser'
@@ -186,10 +186,10 @@
          - MODIFY_PROPERTIES privilege still present at 'path'
          - no-MODIFY_PROPERTIES privilege at 'childNPath'
          */
-        assertTrue(testSession.hasPermission(path+"/anyproperty", SessionImpl.SET_PROPERTY_ACTION));
+        assertTrue(testSession.hasPermission(path+"/anyproperty", org.apache.jackrabbit.api.jsr283.Session.ACTION_SET_PROPERTY));
         assertTrue(testAcMgr.hasPrivileges(path, modPropPrivs));
 
-        assertFalse(testSession.hasPermission(childNPath+"/anyproperty", SessionImpl.SET_PROPERTY_ACTION));
+        assertFalse(testSession.hasPermission(childNPath+"/anyproperty", org.apache.jackrabbit.api.jsr283.Session.ACTION_SET_PROPERTY));
         assertFalse(testAcMgr.hasPrivileges(childNPath, modPropPrivs));
     }
 }
\ No newline at end of file