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/26 18:17:36 UTC

svn commit: r1461231 - in /jackrabbit/oak/trunk: oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/nodetype/ oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/ oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/delegate/

Author: mduerig
Date: Tue Mar 26 17:17:36 2013
New Revision: 1461231

URL: http://svn.apache.org/r1461231
Log:
OAK-702: Optimize access to node type information  Use Trees instead of Nodes when accessing node definitions

Modified:
    jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/nodetype/DefinitionProvider.java
    jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/nodetype/ReadOnlyNodeTypeManager.java
    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/PropertyImpl.java
    jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/delegate/PropertyDelegate.java

Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/nodetype/DefinitionProvider.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/nodetype/DefinitionProvider.java?rev=1461231&r1=1461230&r2=1461231&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/nodetype/DefinitionProvider.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/nodetype/DefinitionProvider.java Tue Mar 26 17:17:36 2013
@@ -17,8 +17,6 @@
 package org.apache.jackrabbit.oak.plugins.nodetype;
 
 import javax.annotation.Nonnull;
-import javax.jcr.Node;
-import javax.jcr.Property;
 import javax.jcr.RepositoryException;
 import javax.jcr.nodetype.ConstraintViolationException;
 import javax.jcr.nodetype.NodeDefinition;
@@ -41,7 +39,6 @@ public interface DefinitionProvider {
      * child node definitions of {@code parent} are checked matching the
      * given node name. Then the residual definitions are checked.
      *
-     *
      * @param parent   the parent node.
      * @param nodeName The internal oak name of the child node.
      * @return the applicable node definition.
@@ -49,7 +46,7 @@ public interface DefinitionProvider {
      * @throws RepositoryException If another error occurs.
      */
     @Nonnull
-    NodeDefinition getDefinition(@Nonnull Node parent, @Nonnull String nodeName)
+    NodeDefinition getDefinition(@Nonnull Tree parent, @Nonnull String nodeName)
             throws ConstraintViolationException, RepositoryException;
 
     /**
@@ -67,20 +64,6 @@ public interface DefinitionProvider {
             throws ConstraintViolationException, RepositoryException;
 
     /**
-     * Calculates the definition of the specified property.
-     *
-     * @param parent The parent node.
-     * @param targetProperty The target property.
-     * @return The definition of the specified property.
-     * @throws ConstraintViolationException If no matching definition can be
-     * found.
-     * @throws RepositoryException If another error occurs.
-     */
-    @Nonnull
-    PropertyDefinition getDefinition(Node parent, Property targetProperty)
-            throws ConstraintViolationException, RepositoryException;
-
-    /**
      * Calculates the applicable definition for the property state under the
      * given parent tree.
      *
@@ -93,6 +76,6 @@ public interface DefinitionProvider {
     @Nonnull
     PropertyDefinition getDefinition(
             Tree parent, PropertyState propertyState, boolean exactTypeMatch)
-            throws ConstraintViolationException,RepositoryException;
+            throws ConstraintViolationException, RepositoryException;
 
 }
\ No newline at end of file

Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/nodetype/ReadOnlyNodeTypeManager.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/nodetype/ReadOnlyNodeTypeManager.java?rev=1461231&r1=1461230&r2=1461231&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/nodetype/ReadOnlyNodeTypeManager.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/nodetype/ReadOnlyNodeTypeManager.java Tue Mar 26 17:17:36 2013
@@ -16,6 +16,13 @@
  */
 package org.apache.jackrabbit.oak.plugins.nodetype;
 
+import static com.google.common.base.Preconditions.checkNotNull;
+import static org.apache.jackrabbit.JcrConstants.JCR_MIXINTYPES;
+import static org.apache.jackrabbit.JcrConstants.JCR_PRIMARYTYPE;
+import static org.apache.jackrabbit.oak.api.Type.STRING;
+import static org.apache.jackrabbit.oak.plugins.memory.EmptyNodeState.EMPTY_NODE;
+import static org.apache.jackrabbit.oak.plugins.nodetype.NodeTypeConstants.NODE_TYPES_PATH;
+
 import java.util.LinkedList;
 import java.util.List;
 import java.util.Set;
@@ -23,10 +30,8 @@ import java.util.Set;
 import javax.annotation.CheckForNull;
 import javax.annotation.Nonnull;
 import javax.jcr.Node;
-import javax.jcr.Property;
 import javax.jcr.RepositoryException;
 import javax.jcr.UnsupportedRepositoryOperationException;
-import javax.jcr.Value;
 import javax.jcr.ValueFactory;
 import javax.jcr.nodetype.NoSuchNodeTypeException;
 import javax.jcr.nodetype.NodeDefinition;
@@ -41,7 +46,6 @@ import javax.jcr.nodetype.PropertyDefini
 
 import com.google.common.collect.Lists;
 import com.google.common.collect.Sets;
-
 import org.apache.jackrabbit.JcrConstants;
 import org.apache.jackrabbit.commons.iterator.NodeTypeIteratorAdapter;
 import org.apache.jackrabbit.oak.api.PropertyState;
@@ -54,14 +58,6 @@ import org.apache.jackrabbit.oak.namepat
 import org.apache.jackrabbit.oak.namepath.NamePathMapperImpl;
 import org.apache.jackrabbit.oak.spi.state.NodeState;
 
-import static com.google.common.base.Preconditions.checkNotNull;
-import static javax.jcr.PropertyType.UNDEFINED;
-import static org.apache.jackrabbit.JcrConstants.JCR_MIXINTYPES;
-import static org.apache.jackrabbit.JcrConstants.JCR_PRIMARYTYPE;
-import static org.apache.jackrabbit.oak.api.Type.STRING;
-import static org.apache.jackrabbit.oak.plugins.memory.EmptyNodeState.EMPTY_NODE;
-import static org.apache.jackrabbit.oak.plugins.nodetype.NodeTypeConstants.NODE_TYPES_PATH;
-
 /**
  * Base implementation of a {@link NodeTypeManager} with support for reading
  * node types from the {@link Tree} returned by {@link #getTypes()}. Methods
@@ -354,7 +350,6 @@ public abstract class ReadOnlyNodeTypeMa
 
     @Override
     public EffectiveNodeType getEffectiveNodeType(Tree tree) throws RepositoryException {
-
         NodeTypeImpl primaryType;
         PropertyState jcrPrimaryType = tree.getProperty(JCR_PRIMARYTYPE);
         if (jcrPrimaryType != null) {
@@ -385,7 +380,7 @@ public abstract class ReadOnlyNodeTypeMa
 
     @Nonnull
     @Override
-    public NodeDefinition getDefinition(@Nonnull Node parent, @Nonnull String nodeName)
+    public NodeDefinition getDefinition(@Nonnull Tree parent, @Nonnull String nodeName)
             throws RepositoryException {
         checkNotNull(parent);
         checkNotNull(nodeName);
@@ -405,24 +400,6 @@ public abstract class ReadOnlyNodeTypeMa
         return eff.getNodeDefinition(name, getEffectiveNodeType(targetNode));
     }
 
-    @Override
-    public PropertyDefinition getDefinition(Node parent, Property targetProperty) throws RepositoryException {
-        String name = targetProperty.getName();
-        boolean isMultiple = targetProperty.isMultiple();
-        int type = UNDEFINED;
-        if (isMultiple) {
-            Value[] values = targetProperty.getValues();
-            if (values.length > 0) {
-                type = values[0].getType();
-            }
-        } else {
-            type = targetProperty.getValue().getType();
-        }
-
-        EffectiveNodeType effective = getEffectiveNodeType(parent);
-        return effective.getPropertyDefinition(name, isMultiple, type, true);
-    }
-
     @Nonnull
     @Override
     public PropertyDefinition getDefinition(

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=1461231&r1=1461230&r2=1461231&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 Tue Mar 26 17:17:36 2013
@@ -242,7 +242,7 @@ public class NodeImpl<T extends NodeDele
                 if (ntName == null) {
                     DefinitionProvider dp = getDefinitionProvider();
                     String childName = getOakName(PathUtils.getName(relPath));
-                    NodeDefinition def = dp.getDefinition(new NodeImpl<NodeDelegate>(parent, sessionContext), childName);
+                    NodeDefinition def = dp.getDefinition(parent.getTree(), childName);
                     ntName = def.getDefaultPrimaryTypeName();
                     if (ntName == null) {
                         throw new ConstraintViolationException(

Modified: jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/PropertyImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/PropertyImpl.java?rev=1461231&r1=1461230&r2=1461231&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/PropertyImpl.java (original)
+++ jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/PropertyImpl.java Tue Mar 26 17:17:36 2013
@@ -532,7 +532,8 @@ public class PropertyImpl extends ItemIm
         return perform(new ItemReadOperation<PropertyDefinition>() {
             @Override
             protected PropertyDefinition perform() throws RepositoryException {
-                return getDefinitionProvider().getDefinition(getParent(), PropertyImpl.this);
+                return getDefinitionProvider().getDefinition(
+                        dlg.getParent().getTree(), dlg.getPropertyState(), true);
             }
         });
     }

Modified: jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/delegate/PropertyDelegate.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/delegate/PropertyDelegate.java?rev=1461231&r1=1461230&r2=1461231&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/delegate/PropertyDelegate.java (original)
+++ jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/delegate/PropertyDelegate.java Tue Mar 26 17:17:36 2013
@@ -37,7 +37,7 @@ public class PropertyDelegate extends It
     }
 
     @Nonnull
-    private PropertyState getPropertyState() throws InvalidItemStateException {
+    public PropertyState getPropertyState() throws InvalidItemStateException {
         PropertyState p = getLocation().getProperty();
         if (p == null) {
             throw new InvalidItemStateException();