You are viewing a plain text version of this content. The canonical link for it is here.
Posted to oak-commits@jackrabbit.apache.org by md...@apache.org on 2013/03/27 17:30:42 UTC

svn commit: r1461699 - in /jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr: NodeImpl.java SessionContext.java SessionImpl.java WorkspaceImpl.java

Author: mduerig
Date: Wed Mar 27 16:30:42 2013
New Revision: 1461699

URL: http://svn.apache.org/r1461699
Log:
OAK-672: Avoid JCR APIs calling other JCR APIs
simplify checking for index on name element

Modified:
    jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/NodeImpl.java
    jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/SessionContext.java
    jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/SessionImpl.java
    jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/WorkspaceImpl.java

Modified: jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/NodeImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/NodeImpl.java?rev=1461699&r1=1461698&r2=1461699&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/NodeImpl.java (original)
+++ jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/NodeImpl.java Wed Mar 27 16:30:42 2013
@@ -207,15 +207,16 @@ public class NodeImpl<T extends NodeDele
     public Node addNode(final String relPath, final String primaryNodeTypeName) throws RepositoryException {
         return perform(new ItemWriteOperation<Node>() {
             @Override
+            protected void checkPreconditions() throws RepositoryException {
+                super.checkPreconditions();
+                SessionImpl.checkIndexOnName(sessionContext, relPath);
+            }
+
+            @Override
             public Node perform() throws RepositoryException {
-                String oakPath = sessionContext.getOakPathKeepIndexOrThrowNotFound(relPath);
+                String oakPath = sessionContext.getOakPathOrThrowNotFound(relPath);
                 String oakName = PathUtils.getName(oakPath);
-                String parentPath = getOakPathOrThrow(PathUtils.getParentPath(oakPath));
-
-                // handle index
-                if (oakName.contains("[")) {
-                    throw new RepositoryException("Cannot create a new node using a name including an index");
-                }
+                String parentPath = PathUtils.getParentPath(oakPath);
 
                 NodeDelegate parent = dlg.getChild(parentPath);
                 if (parent == null) {

Modified: jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/SessionContext.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/SessionContext.java?rev=1461699&r1=1461698&r2=1461699&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/SessionContext.java (original)
+++ jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/SessionContext.java Wed Mar 27 16:30:42 2013
@@ -312,23 +312,6 @@ public abstract class SessionContext imp
         }
     }
 
-    /**
-     * Shortcut for {@code SessionDelegate.getOakPathKeepIndex(jcrPath)}.
-     *
-     * @param jcrPath JCR path
-     * @return Oak path, or {@code null}, with indexes left intact
-     * @throws javax.jcr.PathNotFoundException
-     */
-    @Nonnull
-    public String getOakPathKeepIndexOrThrowNotFound(String jcrPath) throws PathNotFoundException {
-        String oakPath = namePathMapper.getOakPathKeepIndex(jcrPath);
-        if (oakPath != null) {
-            return oakPath;
-        } else {
-            throw new PathNotFoundException(jcrPath);
-        }
-    }
-
     //------------------------------------------------------------< internal >---
 
     void dispose() {

Modified: jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/SessionImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/SessionImpl.java?rev=1461699&r1=1461698&r2=1461699&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/SessionImpl.java (original)
+++ jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/SessionImpl.java Wed Mar 27 16:30:42 2013
@@ -93,13 +93,22 @@ public class SessionImpl implements Jack
         this.namespaces = namespaces;
     }
 
-    public static void checkProtectedNodes(Session session, String... absJcrPaths) throws RepositoryException {
+    static void checkProtectedNodes(Session session, String... absJcrPaths) throws RepositoryException {
         for (String absPath : absJcrPaths) {
             NodeImpl<?> node = (NodeImpl<?>) session.getNode(absPath);
             node.checkProtected();
         }
     }
 
+    static void checkIndexOnName(SessionContext sessionContext, String path) throws RepositoryException {
+        String oakPath = sessionContext.getOakPathKeepIndex(path);
+        if (oakPath != null) {
+            if (PathUtils.getName(oakPath).contains("[")) {
+                throw new RepositoryException("Cannot create a new node using a name including an index");
+            }
+        }
+    }
+
     private abstract class CheckedSessionOperation<T> extends SessionOperation<T> {
         @Override
         protected void checkPreconditions() throws RepositoryException {
@@ -336,19 +345,17 @@ public class SessionImpl implements Jack
             @Override
             protected void checkPreconditions() throws RepositoryException {
                 super.checkPreconditions();
+                // FIXME getRelativeParent doesn't work for fully qualified names. See OAK-724
                 checkProtectedNodes(SessionImpl.this,
                         Text.getRelativeParent(srcAbsPath, 1), Text.getRelativeParent(destAbsPath, 1));
+                checkIndexOnName(sessionContext, destAbsPath);
             }
 
             @Override
             public Void perform() throws RepositoryException {
-                String oakDestPath = sessionContext.getOakPathKeepIndexOrThrowNotFound(destAbsPath);
-                // handle index
-                if (PathUtils.getName(oakDestPath).contains("[")) {
-                    throw new RepositoryException("Cannot create a new node using a name including an index");
-                }
-
-                sd.move(getOakPathOrThrowNotFound(srcAbsPath), oakDestPath, true);
+                sd.move(
+                        getOakPathOrThrowNotFound(srcAbsPath),
+                        getOakPathOrThrowNotFound(destAbsPath), true);
                 return null;
             }
         });

Modified: jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/WorkspaceImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/WorkspaceImpl.java?rev=1461699&r1=1461698&r2=1461699&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/WorkspaceImpl.java (original)
+++ jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/WorkspaceImpl.java Wed Mar 27 16:30:42 2013
@@ -39,7 +39,6 @@ import org.apache.jackrabbit.api.Jackrab
 import org.apache.jackrabbit.api.security.authorization.PrivilegeManager;
 import org.apache.jackrabbit.oak.api.Root;
 import org.apache.jackrabbit.oak.api.Tree;
-import org.apache.jackrabbit.oak.commons.PathUtils;
 import org.apache.jackrabbit.oak.jcr.delegate.SessionDelegate;
 import org.apache.jackrabbit.oak.jcr.lock.LockManagerImpl;
 import org.apache.jackrabbit.oak.jcr.query.QueryManagerImpl;
@@ -117,8 +116,8 @@ public class WorkspaceImpl implements Ja
         copy(getName(), srcAbsPath, destAbsPath);
     }
 
-    private String getOakPathKeepIndexOrThrowNotFound(String absPath) throws PathNotFoundException {
-        return sessionContext.getOakPathKeepIndexOrThrowNotFound(absPath);
+    private String getOakPathOrThrowNotFound(String srcAbsPath) throws PathNotFoundException {
+        return sessionContext.getOakPathOrThrowNotFound(srcAbsPath);
     }
 
     @Override
@@ -129,29 +128,22 @@ public class WorkspaceImpl implements Ja
             throw new UnsupportedRepositoryOperationException("Not implemented.");
         }
 
+        // FIXME getRelativeParent doesn't work for fully qualified names. See OAK-724
         SessionImpl.checkProtectedNodes(
                 getSession(), Text.getRelativeParent(srcAbsPath, 1), Text.getRelativeParent(destAbsPath, 1));
 
-        String oakPath = getOakPathKeepIndexOrThrowNotFound(destAbsPath);
-        String oakName = PathUtils.getName(oakPath);
-        // handle index
-        if (oakName.contains("[")) {
-            throw new RepositoryException("Cannot create a new node using a name including an index");
-        }
+        SessionImpl.checkIndexOnName(sessionContext, destAbsPath);
 
         sessionDelegate.copy(
                 getOakPathOrThrowNotFound(srcAbsPath),
-                getOakPathOrThrowNotFound(oakPath));
-    }
-
-    private String getOakPathOrThrowNotFound(String srcAbsPath) throws PathNotFoundException {
-        return sessionContext.getOakPathOrThrowNotFound(srcAbsPath);
+                getOakPathOrThrowNotFound(destAbsPath));
     }
 
     @Override
     public void clone(String srcWorkspace, String srcAbsPath, String destAbsPath, boolean removeExisting) throws RepositoryException {
         ensureIsAlive();
 
+        // FIXME getRelativeParent doesn't work for fully qualified names. See OAK-724
         SessionImpl.checkProtectedNodes(
                 getSession(), Text.getRelativeParent(srcAbsPath, 1), Text.getRelativeParent(destAbsPath, 1));
 
@@ -163,19 +155,15 @@ public class WorkspaceImpl implements Ja
     public void move(String srcAbsPath, String destAbsPath) throws RepositoryException {
         ensureIsAlive();
 
+        // FIXME getRelativeParent doesn't work for fully qualified names. See OAK-724
         SessionImpl.checkProtectedNodes(
                 getSession(), Text.getRelativeParent(srcAbsPath, 1), Text.getRelativeParent(destAbsPath, 1));
 
-        String oakPath = getOakPathKeepIndexOrThrowNotFound(destAbsPath);
-        String oakName = PathUtils.getName(oakPath);
-        // handle index
-        if (oakName.contains("[")) {
-            throw new RepositoryException("Cannot create a new node using a name including an index");
-        }
+        SessionImpl.checkIndexOnName(sessionContext, destAbsPath);
 
         sessionDelegate.move(
                 getOakPathOrThrowNotFound(srcAbsPath),
-                getOakPathOrThrowNotFound(oakPath),
+                getOakPathOrThrowNotFound(destAbsPath),
                 false);
     }