You are viewing a plain text version of this content. The canonical link for it is here.
Posted to oak-dev@jackrabbit.apache.org by ju...@apache.org on 2012/03/12 18:08:23 UTC
svn commit: r1299741 -
/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/mk/Repository.java
Author: jukka
Date: Mon Mar 12 17:08:23 2012
New Revision: 1299741
URL: http://svn.apache.org/viewvc?rev=1299741&view=rev
Log:
OAK-3: Internal tree model
Make Repository use the NodeState abstraction instead of a sequence of separate Id->Node lookups
Modified:
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/mk/Repository.java
Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/mk/Repository.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/mk/Repository.java?rev=1299741&r1=1299740&r2=1299741&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/mk/Repository.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/mk/Repository.java Mon Mar 12 17:08:23 2012
@@ -19,6 +19,8 @@ package org.apache.jackrabbit.mk;
import java.io.Closeable;
import java.io.File;
+import javax.management.RuntimeErrorException;
+
import org.apache.jackrabbit.mk.model.ChildNodeEntry;
import org.apache.jackrabbit.mk.model.Commit;
import org.apache.jackrabbit.mk.model.CommitBuilder;
@@ -109,55 +111,45 @@ public class Repository {
return rs.getCommit(id);
}
- public NodeState getNodeState(Id revId, String path) throws NotFoundException, Exception {
- return rs.getNodeState(getNode(revId, path));
- }
-
- /**
- *
- * @param revId
- * @param path
- * @return
- * @throws NotFoundException if either path or revision doesn't exist
- * @throws Exception if another error occurs
- */
- public StoredNode getNode(Id revId, String path) throws NotFoundException, Exception {
+ public NodeState getNodeState(Id revId, String path)
+ throws NotFoundException, Exception {
if (!initialized) {
throw new IllegalStateException("not initialized");
+ } else if (!PathUtils.isAbsolute(path)) {
+ throw new IllegalArgumentException("illegal path");
}
- StoredNode root = rs.getRootNode(revId);
- if (PathUtils.denotesRoot(path)) {
- return root;
+ NodeState node = rs.getNodeState(rs.getRootNode(revId));
+ for (String name : PathUtils.split(path)) {
+ node = node.getChildNode(name);
+ if (node == null) {
+ throw new NotFoundException(
+ "Path " + path + " not found in revision " + revId);
+ }
}
-
- //return root.getNode(path.substring(1), pm);
- Id[] ids = resolvePath(revId, path);
- return rs.getNode(ids[ids.length - 1]);
+ return node;
}
public boolean nodeExists(Id revId, String path) {
if (!initialized) {
throw new IllegalStateException("not initialized");
- }
-
- if (!PathUtils.isAbsolute(path)) {
+ } else if (!PathUtils.isAbsolute(path)) {
throw new IllegalArgumentException("illegal path");
}
try {
- String[] names = PathUtils.split(path);
- Node parent = rs.getRootNode(revId);
- for (int i = 0; i < names.length; i++) {
- ChildNodeEntry cne = parent.getChildNodeEntry(names[i]);
- if (cne == null) {
+ NodeState node = rs.getNodeState(rs.getRootNode(revId));
+ for (String name : PathUtils.split(path)) {
+ node = node.getChildNode(name);
+ if (node == null) {
return false;
}
- parent = rs.getNode(cne.getId());
}
return true;
} catch (Exception e) {
- return false;
+ throw new RuntimeException(
+ "Failed to check for existence of path "
+ + path + " in revision " + revId, e);
}
}
@@ -165,40 +157,4 @@ public class Repository {
return new CommitBuilder(revId, msg, rs);
}
- /**
- *
- * @param revId
- * @param nodePath
- * @return
- * @throws IllegalArgumentException if the specified path is not absolute
- * @throws NotFoundException if either path or revision doesn't exist
- * @throws Exception if another error occurs
- */
- Id[] /* array of node id's */ resolvePath(Id revId, String nodePath) throws Exception {
- if (!PathUtils.isAbsolute(nodePath)) {
- throw new IllegalArgumentException("illegal path");
- }
-
- Commit commit = rs.getCommit(revId);
-
- if (PathUtils.denotesRoot(nodePath)) {
- return new Id[]{commit.getRootNodeId()};
- }
- String[] names = PathUtils.split(nodePath);
- Id[] ids = new Id[names.length + 1];
-
- // get root node
- ids[0] = commit.getRootNodeId();
- Node parent = rs.getNode(ids[0]);
- // traverse path and remember id of each element
- for (int i = 0; i < names.length; i++) {
- ChildNodeEntry cne = parent.getChildNodeEntry(names[i]);
- if (cne == null) {
- throw new NotFoundException(nodePath);
- }
- ids[i + 1] = cne.getId();
- parent = rs.getNode(cne.getId());
- }
- return ids;
- }
}