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:07:46 UTC
svn commit: r651188 -
/jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/ItemManager.java
Author: angela
Date: Thu Apr 24 01:07:43 2008
New Revision: 651188
URL: http://svn.apache.org/viewvc?rev=651188&view=rev
Log:
minor improvement with private methods
Modified:
jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/ItemManager.java
Modified: jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/ItemManager.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/ItemManager.java?rev=651188&r1=651187&r2=651188&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/ItemManager.java (original)
+++ jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/ItemManager.java Thu Apr 24 01:07:43 2008
@@ -194,15 +194,12 @@
// check sanity of session
session.sanityCheck();
- // check if state exists for the given item
+ // shortcut: check if state exists for the given item
if (!itemStateProvider.hasItemState(itemId)) {
return false;
}
-
- ItemData data = getItemData(itemId, path);
- return data != null;
- } catch (ItemNotFoundException infe) {
- return false;
+ ItemData data = getItemData(itemId, path, true);
+ return true;
} catch (RepositoryException re) {
return false;
}
@@ -225,10 +222,8 @@
// check sanity of session
session.sanityCheck();
- ItemData data = getItemData(itemId, path);
- if (data == null) {
- throw new AccessDeniedException("cannot read item " + itemId);
- }
+ boolean permissionCheck = true;
+ ItemData data = getItemData(itemId, path, permissionCheck);
return createItemInstance(data);
}
@@ -240,16 +235,38 @@
* <code>AccessDeniedException</code> will be thrown.
*
* @param itemId id of item to be retrieved
+ * @return state state of said item
+ * @throws ItemNotFoundException if no item with given <code>id</code> exists
+ * @throws AccessDeniedException if the current session is not allowed to
+ * read the said item
+ * @throws RepositoryException if another error occurs
+ */
+ private ItemData getItemData(ItemId itemId)
+ throws ItemNotFoundException, AccessDeniedException,
+ RepositoryException {
+ return getItemData(itemId, null, true);
+ }
+
+ /**
+ * Retrieves the data of the item with given <code>id</code>. If the
+ * specified item doesn't exist an <code>ItemNotFoundException</code> will
+ * be thrown.
+ * If <code>permissionCheck</code> is <code>true</code> and the item exists
+ * but the current session is not granted read access an
+ * <code>AccessDeniedException</code> will be thrown.
+ *
+ * @param itemId id of item to be retrieved
* @param path The path of the item to retrieve the data for or
* <code>null</code>. In the latter case the id (instead of the path) is
* used to test if READ permission is granted.
- * @return state state of said item
+ * @param permissionCheck
+ * @return the ItemData for the item identified by the given itemId.
* @throws ItemNotFoundException if no item with given <code>id</code> exists
* @throws AccessDeniedException if the current session is not allowed to
* read the said item
* @throws RepositoryException if another error occurs
*/
- private ItemData getItemData(ItemId itemId, Path path)
+ private ItemData getItemData(ItemId itemId, Path path, boolean permissionCheck)
throws ItemNotFoundException, AccessDeniedException,
RepositoryException {
ItemData data = retrieveItem(itemId);
@@ -269,15 +286,15 @@
throw new RepositoryException(msg, ise);
}
// create item data including: perm check and caching.
- data = createItemData(state, path);
+ data = createItemData(state, path, permissionCheck);
} else {
- // already cached: check if read-permission is granted in order
- // to have a consistent behaviour to 'itemExists' above.
- if (!canRead(data, path)) {
+ // already cached: if 'permissionCheck' is true, make sure read
+ // permission is granted.
+ if (permissionCheck && !canRead(data, path)) {
// item exists but read-perm has been revoked in the mean time.
// -> remove from cache
evictItems(itemId);
- return null;
+ throw new AccessDeniedException("cannot read item " + data.getId());
}
}
return data;
@@ -486,7 +503,7 @@
}
AbstractNodeData data = (AbstractNodeData) retrieveItem(id, parentId);
if (data == null) {
- data = (AbstractNodeData) getItemData(id, null);
+ data = (AbstractNodeData) getItemData(id);
}
if (!data.getParentId().equals(parentId)) {
// verify that parent actually appears in the shared set
@@ -529,7 +546,7 @@
// check sanity of session
session.sanityCheck();
- ItemData data = getItemData(parentId, null);
+ ItemData data = getItemData(parentId);
if (!data.isNode()) {
String msg = "can't list child nodes of property " + parentId;
log.debug(msg);
@@ -559,7 +576,7 @@
// check sanity of session
session.sanityCheck();
- ItemData data = getItemData(parentId, null);
+ ItemData data = getItemData(parentId);
if (!data.isNode()) {
String msg = "can't list child nodes of property " + parentId;
log.debug(msg);
@@ -590,7 +607,7 @@
// check sanity of session
session.sanityCheck();
- ItemData data = getItemData(parentId, null);
+ ItemData data = getItemData(parentId);
if (!data.isNode()) {
String msg = "can't list child properties of property " + parentId;
log.debug(msg);
@@ -621,7 +638,7 @@
// check sanity of session
session.sanityCheck();
- ItemData data = getItemData(parentId, null);
+ ItemData data = getItemData(parentId);
if (!data.isNode()) {
String msg = "can't list child properties of property " + parentId;
log.debug(msg);
@@ -643,27 +660,13 @@
//-------------------------------------------------< item factory methods >
/**
- * Same as {@link #createItemData(ItemState, Path, boolean)} where the
- * permissionCheck flag is 'true'. This method will throw
- * <code>AccessDeniedException</code> if reading the item data is not
- * allowed.
- *
- * @param state
- * @return
- * @throws RepositoryException
- */
- private ItemData createItemData(ItemState state, Path path) throws RepositoryException {
- return createItemData(state, path, true);
- }
-
- /**
* Builds the <code>ItemData</code> for the specified <code>state</code>.
* If <code>permissionCheck</code> is <code>true</code>, the access manager
* is used to determine if reading that item would be granted. If this is
* not the case an <code>AccessDeniedException</code> is thrown.
* Before returning the created <code>ItemData</code> it is put into the
- * cache. In order to benefit from the cache {@link #getItemData(ItemId, Path)}
- * should be called
+ * cache. In order to benefit from the cache
+ * {@link #getItemData(ItemId, Path, boolean)} should be called.
*
* @param state
* @return