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 ju...@apache.org on 2013/03/04 09:03:37 UTC

svn commit: r1452203 - in /jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr: PropertyDelegate.java PropertyImpl.java

Author: jukka
Date: Mon Mar  4 08:03:37 2013
New Revision: 1452203

URL: http://svn.apache.org/r1452203
Log:
OAK-663: oak-jcr performance optimization

Push the isMultiple() checks on PropertyImpl.getValue() to avoid an extra round of status checks

Modified:
    jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/PropertyDelegate.java
    jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/PropertyImpl.java

Modified: jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/PropertyDelegate.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/PropertyDelegate.java?rev=1452203&r1=1452202&r2=1452203&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/PropertyDelegate.java (original)
+++ jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/PropertyDelegate.java Mon Mar  4 08:03:37 2013
@@ -22,6 +22,7 @@ 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;
@@ -45,10 +46,15 @@ public class PropertyDelegate extends It
      *
      * @return the value of the property
      * @throws InvalidItemStateException
+     * @throws ValueFormatException if this property is multi-valued
      */
     @Nonnull
-    public Value getValue() throws InvalidItemStateException {
-        return ValueFactoryImpl.createValue(getPropertyState(), sessionDelegate.getNamePathMapper());
+    public Value getValue() throws InvalidItemStateException, ValueFormatException {
+        PropertyState property = getPropertyState();
+        if (property.isArray()) {
+            throw new ValueFormatException(this + " is multi-valued.");
+        }
+        return ValueFactoryImpl.createValue(property, sessionDelegate.getNamePathMapper());
     }
 
     /**
@@ -56,10 +62,15 @@ public class PropertyDelegate extends It
      *
      * @return the values of the property
      * @throws InvalidItemStateException
+     * @throws ValueFormatException if this property is single-valued
      */
     @Nonnull
-    public List<Value> getValues() throws InvalidItemStateException {
-        return ValueFactoryImpl.createValues(getPropertyState(), sessionDelegate.getNamePathMapper());
+    public List<Value> getValues() throws InvalidItemStateException, ValueFormatException {
+        PropertyState property = getPropertyState();
+        if (!property.isArray()) {
+            throw new ValueFormatException(this + " is single-valued.");
+        }
+        return ValueFactoryImpl.createValues(property, sessionDelegate.getNamePathMapper());
     }
 
     /**

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=1452203&r1=1452202&r2=1452203&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 Mon Mar  4 08:03:37 2013
@@ -56,6 +56,8 @@ public class PropertyImpl extends ItemIm
      */
     private static final Logger log = LoggerFactory.getLogger(PropertyImpl.class);
 
+    private static final Value[] NO_VALUES = new Value[0];
+
     PropertyImpl(PropertyDelegate dlg) {
         super(dlg);
     }
@@ -351,10 +353,6 @@ public class PropertyImpl extends ItemIm
         return perform(new SessionOperation<Value>() {
             @Override
             public Value perform() throws RepositoryException {
-                if (isMultiple()) {
-                    throw new ValueFormatException(this + " is multi-valued.");
-                }
-
                 return dlg.getValue();
             }
         });
@@ -365,16 +363,12 @@ public class PropertyImpl extends ItemIm
     public Value[] getValues() throws RepositoryException {
         checkStatus();
 
-        return perform(new SessionOperation<Value[]>() {
+        return perform(new SessionOperation<List<Value>>() {
             @Override
-            public Value[] perform() throws RepositoryException {
-                if (!isMultiple()) {
-                    throw new ValueFormatException(this + " is not multi-valued.");
-                }
-
-                return Iterables.toArray(dlg.getValues(), Value.class);
+            public List<Value> perform() throws RepositoryException {
+                return dlg.getValues();
             }
-        });
+        }).toArray(NO_VALUES);
     }
 
     /**