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/04/24 10:04:09 UTC

svn commit: r651184 - /jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/observation/EventConsumer.java

Author: angela
Date: Thu Apr 24 01:04:05 2008
New Revision: 651184

URL: http://svn.apache.org/viewvc?rev=651184&view=rev
Log:
replace deprecated AccessManager.isGranted(ItemId, int) by  AccessManager.canRead(Path)

Modified:
    jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/observation/EventConsumer.java

Modified: jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/observation/EventConsumer.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/observation/EventConsumer.java?rev=651184&r1=651183&r2=651184&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/observation/EventConsumer.java (original)
+++ jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/observation/EventConsumer.java Thu Apr 24 01:04:05 2008
@@ -18,8 +18,10 @@
 
 import org.apache.jackrabbit.core.ItemId;
 import org.apache.jackrabbit.core.SessionImpl;
-import org.apache.jackrabbit.core.security.AccessManager;
 import org.apache.jackrabbit.core.state.ItemState;
+import org.apache.jackrabbit.spi.Path;
+import org.apache.jackrabbit.spi.PathFactory;
+import org.apache.jackrabbit.spi.commons.name.PathFactoryImpl;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -50,6 +52,8 @@
      */
     private static final Logger log = LoggerFactory.getLogger(EventConsumer.class);
 
+    private final PathFactory pathFactory = PathFactoryImpl.getInstance();
+
     /**
      * The <code>Session</code> associated with this <code>EventConsumer</code>.
      */
@@ -150,7 +154,7 @@
                 ItemId targetId = state.getTargetId();
                 boolean granted = false;
                 try {
-                    granted = canRead(targetId);
+                    granted = canRead(state);
                 } catch (RepositoryException e) {
                     log.warn("Unable to check access rights for item: " + targetId);
                 }
@@ -176,20 +180,28 @@
      */
     void prepareDeleted(EventStateCollection events, Iterator deletedItems) {
         Set denied = null;
+        Set deletedIds = new HashSet();
         while (deletedItems.hasNext()) {
-            ItemState item = (ItemState) deletedItems.next();
-            // check read permission
-            boolean granted = false;
-            try {
-                granted = canRead(item.getId());
-            } catch (RepositoryException e) {
-                log.warn("Unable to check access rights for item: " + item.getId());
-            }
-            if (!granted) {
-                if (denied == null) {
-                    denied = new HashSet();
+            deletedIds.add(((ItemState) deletedItems.next()).getId());
+        }
+
+        for (Iterator it = events.iterator(); it.hasNext();) {
+            EventState evState = (EventState) it.next();
+            ItemId targetId = evState.getTargetId();
+            if (deletedIds.contains(targetId)) {
+                // check read permission
+                boolean granted = false;
+                try {
+                    granted = canRead(evState);
+                } catch (RepositoryException e) {
+                    log.warn("Unable to check access rights for item: " + targetId);
+                }
+                if (!granted) {
+                    if (denied == null) {
+                        denied = new HashSet();
+                    }
+                    denied.add(targetId);
                 }
-                denied.add(item.getId());
             }
         }
         if (denied != null) {
@@ -213,7 +225,7 @@
                     || state.getType() == Event.PROPERTY_ADDED
                     || state.getType() == Event.PROPERTY_CHANGED) {
                 ItemId targetId = state.getTargetId();
-                if (!canRead(targetId)) {
+                if (!canRead(state)) {
                     if (denied == null) {
                         denied = new HashSet();
                     }
@@ -271,7 +283,16 @@
         return hashCode;
     }
 
-    private boolean canRead(ItemId itemId) throws RepositoryException {
-        return session.getAccessManager().isGranted(itemId, AccessManager.READ);
+    /**
+     * Returns <code>true</code> if the item corresponding to the specified
+     * <code>eventState</code> can be read the the current session.
+     *
+     * @param eventState
+     * @return
+     * @throws RepositoryException
+     */
+    private boolean canRead(EventState eventState) throws RepositoryException {
+        Path targetPath = pathFactory.create(eventState.getParentPath(), eventState.getChildRelPath().getName(), eventState.getChildRelPath().getNormalizedIndex(), true);
+        return session.getAccessManager().canRead(targetPath);
     }
 }