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);
}
/**