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/13 17:25:36 UTC

svn commit: r1456027 - in /jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr: NodeImpl.java PropertyImpl.java delegate/NodeDelegate.java delegate/PropertyDelegate.java delegate/VersionHistoryDelegate.java version/VersionImpl.java

Author: mduerig
Date: Wed Mar 13 16:25:36 2013
New Revision: 1456027

URL: http://svn.apache.org/r1456027
Log:
OAK-672: Avoid JCR APIs calling other JCR APIs
- Remove Value and ValueFactory dependencies from Delegate implementations

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/PropertyImpl.java
    jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/delegate/NodeDelegate.java
    jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/delegate/PropertyDelegate.java
    jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/delegate/VersionHistoryDelegate.java
    jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/version/VersionImpl.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=1456027&r1=1456026&r2=1456027&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 13 16:25:36 2013
@@ -80,6 +80,7 @@ import org.apache.jackrabbit.oak.core.Id
 import org.apache.jackrabbit.oak.jcr.delegate.NodeDelegate;
 import org.apache.jackrabbit.oak.jcr.delegate.PropertyDelegate;
 import org.apache.jackrabbit.oak.jcr.delegate.SessionOperation;
+import org.apache.jackrabbit.oak.plugins.memory.PropertyStates;
 import org.apache.jackrabbit.oak.plugins.nodetype.DefinitionProvider;
 import org.apache.jackrabbit.oak.plugins.nodetype.EffectiveNodeType;
 import org.apache.jackrabbit.oak.plugins.nodetype.EffectiveNodeTypeProvider;
@@ -992,14 +993,15 @@ public class NodeImpl<T extends NodeDele
                 boolean nodeModified = false;
                 if (mixins == null) {
                     nodeModified = true;
-                    dlg.setProperty(JcrConstants.JCR_MIXINTYPES, Collections.singletonList(value));
+                    dlg.setProperty(PropertyStates.createProperty(
+                            JcrConstants.JCR_MIXINTYPES, Collections.singletonList(value)));
                 } else {
-                    PropertyState property = mixins.getMulti();
+                    PropertyState property = mixins.getMultiState();
                     List<Value> values = getValueFactory().createValues(property);
                     if (!values.contains(value)) {
                         values.add(value);
                         nodeModified = true;
-                        dlg.setProperty(JcrConstants.JCR_MIXINTYPES, values);
+                        dlg.setProperty(PropertyStates.createProperty(JcrConstants.JCR_MIXINTYPES, values));
                     }
                 }
 
@@ -1441,9 +1443,9 @@ public class NodeImpl<T extends NodeDele
         for (PropertyDefinition pd : effective.getAutoCreatePropertyDefinitions()) {
             if (dlg.getProperty(pd.getName()) == null) {
                 if (pd.isMultiple()) {
-                    dlg.setProperty(pd.getName(), getAutoCreatedValues(pd));
+                    dlg.setProperty(PropertyStates.createProperty(pd.getName(), getAutoCreatedValues(pd)));
                 } else {
-                    dlg.setProperty(pd.getName(), getAutoCreatedValue(pd));
+                    dlg.setProperty(PropertyStates.createProperty(pd.getName(), getAutoCreatedValue(pd)));
                 }
             }
         }
@@ -1541,10 +1543,9 @@ public class NodeImpl<T extends NodeDele
 
                 String jcrPrimaryType = getOakPath(Property.JCR_PRIMARY_TYPE);
                 Value value = getValueFactory().createValue(nodeTypeName, PropertyType.NAME);
-                dlg.setProperty(jcrPrimaryType, value);
 
+                dlg.setProperty(PropertyStates.createProperty(jcrPrimaryType, value));
                 dlg.setOrderableChildren(nt.hasOrderableChildNodes());
-
                 return null;
             }
         });
@@ -1592,7 +1593,7 @@ public class NodeImpl<T extends NodeDele
                         targetValue = ValueHelper.convert(value, targetType, getValueFactory());
                     }
 
-                    return new PropertyImpl(dlg.setProperty(oakName, targetValue));
+                    return new PropertyImpl(dlg.setProperty(PropertyStates.createProperty(oakName, targetValue)));
                 }
             }
         });
@@ -1642,7 +1643,7 @@ public class NodeImpl<T extends NodeDele
                     Iterable<Value> nonNullValues = Iterables.filter(
                             Arrays.asList(targetValues),
                             Predicates.notNull());
-                    return new PropertyImpl(dlg.setProperty(oakName, nonNullValues));
+                    return new PropertyImpl(dlg.setProperty(PropertyStates.createProperty(oakName, nonNullValues)));
                 }
             }
         });

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=1456027&r1=1456026&r2=1456027&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 Wed Mar 13 16:25:36 2013
@@ -43,6 +43,7 @@ import org.apache.jackrabbit.oak.api.Tre
 import org.apache.jackrabbit.oak.jcr.delegate.NodeDelegate;
 import org.apache.jackrabbit.oak.jcr.delegate.PropertyDelegate;
 import org.apache.jackrabbit.oak.jcr.delegate.SessionOperation;
+import org.apache.jackrabbit.oak.plugins.memory.PropertyStates;
 import org.apache.jackrabbit.value.ValueHelper;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -364,7 +365,7 @@ public class PropertyImpl extends ItemIm
 
             @Override
             public Value perform() throws RepositoryException {
-                return getValueFactory().createValue(dlg.getSingle());
+                return getValueFactory().createValue(dlg.getSingleState());
             }
         });
     }
@@ -380,7 +381,7 @@ public class PropertyImpl extends ItemIm
 
             @Override
             public List<Value> perform() throws RepositoryException {
-                return getValueFactory().createValues(dlg.getMulti());
+                return getValueFactory().createValues(dlg.getMultiState());
             }
         }).toArray(NO_VALUES);
     }
@@ -650,7 +651,7 @@ public class PropertyImpl extends ItemIm
             dlg.remove();
         } else {
             Value targetValue = ValueHelper.convert(value, requiredType, getValueFactory());
-            dlg.setValue(targetValue);
+            dlg.setState(PropertyStates.createProperty(dlg.getName(), targetValue));
         }
     }
 
@@ -675,7 +676,7 @@ public class PropertyImpl extends ItemIm
                     Arrays.asList(targetValues),
                     Predicates.notNull());
 
-            dlg.setValues(nonNullValues);
+            dlg.setState(PropertyStates.createProperty(dlg.getName(), nonNullValues));
         }
     }
 

Modified: jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/delegate/NodeDelegate.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/delegate/NodeDelegate.java?rev=1456027&r1=1456026&r2=1456027&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/delegate/NodeDelegate.java (original)
+++ jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/delegate/NodeDelegate.java Wed Mar 13 16:25:36 2013
@@ -24,7 +24,6 @@ import javax.annotation.Nonnull;
 import javax.jcr.InvalidItemStateException;
 import javax.jcr.ItemNotFoundException;
 import javax.jcr.RepositoryException;
-import javax.jcr.Value;
 import javax.jcr.ValueFormatException;
 
 import com.google.common.base.Function;
@@ -34,7 +33,6 @@ import org.apache.jackrabbit.oak.api.Pro
 import org.apache.jackrabbit.oak.api.Tree;
 import org.apache.jackrabbit.oak.api.TreeLocation;
 import org.apache.jackrabbit.oak.commons.PathUtils;
-import org.apache.jackrabbit.oak.plugins.memory.PropertyStates;
 
 /**
  * {@code NodeDelegate} serve as internal representations of {@code Node}s.
@@ -181,36 +179,21 @@ public class NodeDelegate extends ItemDe
     /**
      * Set a property
      *
-     * @param name  oak name
-     * @param value
+     * @param propertyState
      * @return the set property
      */
     @Nonnull
-    public PropertyDelegate setProperty(String name, Value value) throws RepositoryException {
+    public PropertyDelegate setProperty(PropertyState propertyState) throws RepositoryException {
         Tree tree = getTree();
+        String name = propertyState.getName();
         PropertyState old = tree.getProperty(name);
-        if (old != null && old.isArray()) {
-            throw new ValueFormatException("Attempt to set a single value to multi-valued property.");
+        if (old != null && old.isArray() && !propertyState.isArray()) {
+            throw new ValueFormatException("Attempt to assign a single value to multi-valued property.");
         }
-        tree.setProperty(PropertyStates.createProperty(name, value));
-        return new PropertyDelegate(sessionDelegate, tree.getLocation().getChild(name));
-    }
-
-    /**
-     * Set a multi valued property
-     *
-     * @param name   oak name
-     * @param values
-     * @return the set property
-     */
-    @Nonnull
-    public PropertyDelegate setProperty(String name, Iterable<Value> values) throws RepositoryException {
-        Tree tree = getTree();
-        PropertyState old = tree.getProperty(name);
-        if (old != null && !old.isArray()) {
-            throw new ValueFormatException("Attempt to set multiple values to single valued property.");
+        if (old != null && !old.isArray() && propertyState.isArray()) {
+            throw new ValueFormatException("Attempt to assign multiple values to single valued property.");
         }
-        tree.setProperty(PropertyStates.createProperty(name, values));
+        tree.setProperty(propertyState);
         return new PropertyDelegate(sessionDelegate, tree.getLocation().getChild(name));
     }
 

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=1456027&r1=1456026&r2=1456027&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 Wed Mar 13 16:25:36 2013
@@ -18,14 +18,11 @@ package org.apache.jackrabbit.oak.jcr.de
 
 import javax.annotation.Nonnull;
 import javax.jcr.InvalidItemStateException;
-import javax.jcr.RepositoryException;
-import javax.jcr.Value;
 import javax.jcr.ValueFormatException;
 
 import org.apache.jackrabbit.oak.api.PropertyState;
 import org.apache.jackrabbit.oak.api.TreeLocation;
 import org.apache.jackrabbit.oak.api.Type;
-import org.apache.jackrabbit.oak.plugins.memory.PropertyStates;
 
 /**
  * {@code PropertyDelegate} serve as internal representations of {@code Property}s.
@@ -53,7 +50,7 @@ public class PropertyDelegate extends It
     }
 
     @Nonnull
-    public PropertyState getSingle() throws InvalidItemStateException, ValueFormatException {
+    public PropertyState getSingleState() throws InvalidItemStateException, ValueFormatException {
         PropertyState p = getPropertyState();
         if (p.isArray()) {
             throw new ValueFormatException(p + " is multi-valued.");
@@ -62,15 +59,19 @@ public class PropertyDelegate extends It
     }
 
     public boolean getBoolean() throws ValueFormatException, InvalidItemStateException {
-        return getSingle().getValue(Type.BOOLEAN);
+        return getSingleState().getValue(Type.BOOLEAN);
     }
 
     public String getString() throws ValueFormatException, InvalidItemStateException {
-        return getSingle().getValue(Type.STRING);
+        return getSingleState().getValue(Type.STRING);
+    }
+
+    public String getDate() throws ValueFormatException, InvalidItemStateException {
+        return getSingleState().getValue(Type.DATE);
     }
 
     @Nonnull
-    public PropertyState getMulti() throws InvalidItemStateException, ValueFormatException {
+    public PropertyState getMultiState() throws InvalidItemStateException, ValueFormatException {
         PropertyState p = getPropertyState();
         if (!p.isArray()) {
             throw new ValueFormatException(p + " is single-valued.");
@@ -78,24 +79,8 @@ public class PropertyDelegate extends It
         return p;
     }
 
-    /**
-     * Set the value of the property
-     *
-     * @param value
-     */
-    public void setValue(Value value) throws RepositoryException {
-        if (!getLocation().set(PropertyStates.createProperty(getName(), value))) {
-            throw new InvalidItemStateException();
-        }
-    }
-
-    /**
-     * Set the values of the property
-     *
-     * @param values
-     */
-    public void setValues(Iterable<Value> values) throws RepositoryException {
-        if (!getLocation().set(PropertyStates.createProperty(getName(), values))) {
+    public void setState(PropertyState propertyState) throws InvalidItemStateException {
+        if (!getLocation().set(propertyState)) {
             throw new InvalidItemStateException();
         }
     }

Modified: jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/delegate/VersionHistoryDelegate.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/delegate/VersionHistoryDelegate.java?rev=1456027&r1=1456026&r2=1456027&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/delegate/VersionHistoryDelegate.java (original)
+++ jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/delegate/VersionHistoryDelegate.java Wed Mar 13 16:25:36 2013
@@ -34,8 +34,7 @@ import org.apache.jackrabbit.JcrConstant
 import org.apache.jackrabbit.oak.api.PropertyState;
 import org.apache.jackrabbit.oak.api.Tree;
 import org.apache.jackrabbit.oak.api.Type;
-import org.apache.jackrabbit.oak.jcr.SessionContextProvider;
-import org.apache.jackrabbit.oak.plugins.value.ValueFactoryImpl;
+import org.apache.jackrabbit.oak.plugins.value.Conversions;
 import org.apache.jackrabbit.oak.plugins.version.VersionConstants;
 
 import static com.google.common.base.Preconditions.checkNotNull;
@@ -129,8 +128,8 @@ public class VersionHistoryDelegate exte
             if (primaryType.equals(VersionConstants.NT_VERSION)) {
                 PropertyDelegate created = n.getProperty(JcrConstants.JCR_CREATED);
                 if (created != null) {
-                    ValueFactoryImpl f = SessionContextProvider.getValueFactory(sessionDelegate);
-                    versions.put(f.createValue(created.getSingle()).getDate(), n.getName());
+                    Calendar cal = Conversions.convert(created.getDate()).toCalendar();
+                    versions.put(cal, n.getName());
                 }
             }
         }

Modified: jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/version/VersionImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/version/VersionImpl.java?rev=1456027&r1=1456026&r2=1456027&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/version/VersionImpl.java (original)
+++ jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/version/VersionImpl.java Wed Mar 13 16:25:36 2013
@@ -61,7 +61,7 @@ class VersionImpl extends NodeImpl<Versi
     @Override
     public Calendar getCreated() throws RepositoryException {
         PropertyDelegate dlg = getPropertyOrThrow(JcrConstants.JCR_CREATED);
-        return getValueFactory().createValue(dlg.getSingle()).getDate();
+        return getValueFactory().createValue(dlg.getSingleState()).getDate();
     }
 
     @Override
@@ -75,7 +75,7 @@ class VersionImpl extends NodeImpl<Versi
     }
 
     private List<Value> getValues(PropertyDelegate p) throws InvalidItemStateException, ValueFormatException {
-        return getValueFactory().createValues(p.getMulti());
+        return getValueFactory().createValues(p.getMultiState());
     }
 
     @Override