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 2012/10/12 10:40:50 UTC

svn commit: r1397467 - in /jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/value: PropertyValue.java PropertyValues.java ValueFactoryImpl.java ValueImpl.java

Author: mduerig
Date: Fri Oct 12 08:40:50 2012
New Revision: 1397467

URL: http://svn.apache.org/viewvc?rev=1397467&view=rev
Log:
OAK-350: Unify PropertyState and CoreValue
Base ValueImpl directly on PropertyState instead of PropertyValue

Modified:
    jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/value/PropertyValue.java
    jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/value/PropertyValues.java
    jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/value/ValueFactoryImpl.java
    jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/value/ValueImpl.java

Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/value/PropertyValue.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/value/PropertyValue.java?rev=1397467&r1=1397466&r2=1397467&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/value/PropertyValue.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/value/PropertyValue.java Fri Oct 12 08:40:50 2012
@@ -18,17 +18,13 @@
  */
 package org.apache.jackrabbit.oak.value;
 
-import java.math.BigDecimal;
 import java.util.Calendar;
 import java.util.Iterator;
-import java.util.List;
 
 import javax.annotation.CheckForNull;
 import javax.annotation.Nonnull;
 import javax.jcr.PropertyType;
 
-import com.google.common.collect.Lists;
-import org.apache.jackrabbit.oak.api.Blob;
 import org.apache.jackrabbit.oak.api.PropertyState;
 import org.apache.jackrabbit.oak.api.Type;
 import org.apache.jackrabbit.util.ISO8601;
@@ -60,77 +56,6 @@ public class PropertyValue implements Co
         return ps.getValue(type, index);
     }
 
-    public List<PropertyValue> values() {
-        List<PropertyValue> pvs = Lists.newArrayList();
-
-        int type = getType().tag();
-        switch (type) {
-            case PropertyType.STRING:
-                for (String value : getValue(Type.STRINGS)) {
-                    pvs.add(PropertyValues.newString(value));
-                }
-                break;
-            case PropertyType.BINARY:
-                for (Blob value : getValue(Type.BINARIES)) {
-                    pvs.add(PropertyValues.newBinary(value));
-                }
-                break;
-            case PropertyType.LONG:
-                for (Long value : getValue(Type.LONGS)) {
-                    pvs.add(PropertyValues.newLong(value));
-                }
-                break;
-            case PropertyType.DOUBLE:
-                for (Double value : getValue(Type.DOUBLES)) {
-                    pvs.add(PropertyValues.newDouble(value));
-                }
-                break;
-            case PropertyType.DATE:
-                for (String value : getValue(Type.DATES)) {
-                    pvs.add(PropertyValues.newDate(value));
-                }
-                break;
-            case PropertyType.BOOLEAN:
-                for (Boolean value : getValue(Type.BOOLEANS)) {
-                    pvs.add(PropertyValues.newBoolean(value));
-                }
-                break;
-            case PropertyType.NAME:
-                for (String value : getValue(Type.NAMES)) {
-                    pvs.add(PropertyValues.newName(value));
-                }
-                break;
-            case PropertyType.PATH:
-                for (String value : getValue(Type.PATHS)) {
-                    pvs.add(PropertyValues.newPath(value));
-                }
-                break;
-            case PropertyType.REFERENCE:
-                for (String value : getValue(Type.REFERENCES)) {
-                    pvs.add(PropertyValues.newReference(value));
-                }
-                break;
-            case PropertyType.WEAKREFERENCE:
-                for (String value : getValue(Type.WEAKREFERENCES)) {
-                    pvs.add(PropertyValues.newWeakReference(value));
-                }
-                break;
-            case PropertyType.URI:
-                for (String value : getValue(Type.URIS)) {
-                    pvs.add(PropertyValues.newUri(value));
-                }
-                break;
-            case PropertyType.DECIMAL:
-                for (BigDecimal value : getValue(Type.DECIMALS)) {
-                    pvs.add(PropertyValues.newDecimal(value));
-                }
-                break;
-            default:
-                throw new IllegalStateException("Invalid type: " + getType());
-        }
-        return pvs;
-    }
-
     public long size() {
         return ps.size();
     }

Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/value/PropertyValues.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/value/PropertyValues.java?rev=1397467&r1=1397466&r2=1397467&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/value/PropertyValues.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/value/PropertyValues.java Fri Oct 12 08:40:50 2012
@@ -26,7 +26,6 @@ import javax.annotation.CheckForNull;
 import javax.annotation.Nonnull;
 import javax.jcr.PropertyType;
 
-import org.apache.jackrabbit.oak.api.Blob;
 import org.apache.jackrabbit.oak.api.PropertyState;
 import org.apache.jackrabbit.oak.api.Type;
 import org.apache.jackrabbit.oak.namepath.NamePathMapper;
@@ -113,11 +112,6 @@ public class PropertyValues {
         return new PropertyValue(PropertyStates.binaryProperty("", value));
     }
 
-    @Nonnull
-    public static PropertyValue newBinary(Blob value) {
-        return new PropertyValue(PropertyStates.binaryProperty("", value));
-    }
-
     // --
 
     public static boolean match(PropertyValue p1, PropertyState p2) {

Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/value/ValueFactoryImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/value/ValueFactoryImpl.java?rev=1397467&r1=1397466&r2=1397467&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/value/ValueFactoryImpl.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/value/ValueFactoryImpl.java Fri Oct 12 08:40:50 2012
@@ -38,6 +38,7 @@ import com.google.common.io.ByteStreams;
 import org.apache.jackrabbit.oak.api.PropertyState;
 import org.apache.jackrabbit.oak.namepath.NamePathMapper;
 import org.apache.jackrabbit.oak.plugins.identifier.IdentifierManager;
+import org.apache.jackrabbit.oak.plugins.memory.PropertyStates;
 import org.apache.jackrabbit.oak.plugins.memory.StringPropertyState;
 import org.apache.jackrabbit.util.ISO8601;
 import org.slf4j.Logger;
@@ -66,10 +67,9 @@ public class ValueFactoryImpl implements
     }
 
     public static List<Value> createValues(PropertyState property, NamePathMapper namePathMapper) {
-        List<PropertyValue> propertyValues = PropertyValues.create(property).values();
         List<Value> values = Lists.newArrayList();
-        for (PropertyValue val : propertyValues) {
-            values.add(new ValueImpl(val, namePathMapper));
+        for (int i = 0; i < property.count(); i++) {
+            values.add(new ValueImpl(property, i, namePathMapper));
         }
         return values;
     }
@@ -78,7 +78,7 @@ public class ValueFactoryImpl implements
 
     @Override
     public Value createValue(String value) {
-        return new ValueImpl(PropertyValues.newString(value), namePathMapper);
+        return new ValueImpl(PropertyStates.stringProperty("", value), namePathMapper);
     }
 
     @Override
@@ -86,8 +86,7 @@ public class ValueFactoryImpl implements
         try {
             try {
                 // TODO add streaming capability to ContentSession via KernelBasedBlob
-                PropertyValue pv = PropertyValues.newBinary(ByteStreams.toByteArray(value));
-                return new ValueImpl(pv, namePathMapper);
+                return new ValueImpl(PropertyStates.binaryProperty("", ByteStreams.toByteArray(value)), namePathMapper);
             } finally {
                 value.close();
             }
@@ -109,23 +108,23 @@ public class ValueFactoryImpl implements
 
     @Override
     public Value createValue(long value) {
-        return new ValueImpl(PropertyValues.newLong(value), namePathMapper);
+        return new ValueImpl(PropertyStates.longProperty("", value), namePathMapper);
     }
 
     @Override
     public Value createValue(double value) {
-        return new ValueImpl(PropertyValues.newDouble(value), namePathMapper);
+        return new ValueImpl(PropertyStates.doubleProperty("", value), namePathMapper);
     }
 
     @Override
     public Value createValue(Calendar value) {
         String dateStr = ISO8601.format(value);
-        return new ValueImpl(PropertyValues.newDate(dateStr), namePathMapper);
+        return new ValueImpl(PropertyStates.dateProperty("", dateStr), namePathMapper);
     }
 
     @Override
     public Value createValue(boolean value) {
-        return new ValueImpl(PropertyValues.newBoolean(value), namePathMapper);
+        return new ValueImpl(PropertyStates.booleanProperty("", value), namePathMapper);
     }
 
     @Override
@@ -136,13 +135,13 @@ public class ValueFactoryImpl implements
     @Override
     public Value createValue(Node value, boolean weak) throws RepositoryException {
         return weak
-            ? new ValueImpl(PropertyValues.newWeakReference(value.getUUID()), namePathMapper)
-            : new ValueImpl(PropertyValues.newReference(value.getUUID()), namePathMapper);
+            ? new ValueImpl(PropertyStates.weakreferenceProperty("", value.getUUID()), namePathMapper)
+            : new ValueImpl(PropertyStates.referenceProperty("", value.getUUID()), namePathMapper);
     }
 
     @Override
     public Value createValue(BigDecimal value) {
-        return new ValueImpl(PropertyValues.newDecimal(value), namePathMapper);
+        return new ValueImpl(PropertyStates.decimalProperty("", value), namePathMapper);
     }
 
     @Override
@@ -152,12 +151,12 @@ public class ValueFactoryImpl implements
         }
 
         try {
-            PropertyValue pv;
+            PropertyState pv;
             switch (type) {
                 case PropertyType.STRING:
                     return createValue(value);
                 case PropertyType.BINARY:
-                    pv = PropertyValues.newBinary(value.getBytes("UTF-8"));
+                    pv = PropertyStates.binaryProperty("", value.getBytes("UTF-8"));
                     break;
                 case PropertyType.LONG:
                     return createValue(StringPropertyState.getLong(value));
@@ -167,7 +166,7 @@ public class ValueFactoryImpl implements
                     if (ISO8601.parse(value) == null) {
                         throw new ValueFormatException("Invalid date " + value);
                     }
-                    pv = PropertyValues.newDate(value);
+                    pv = PropertyStates.dateProperty("", value);
                     break;
                 case PropertyType.BOOLEAN:
                     return createValue(StringPropertyState.getBoolean(value));
@@ -176,7 +175,7 @@ public class ValueFactoryImpl implements
                     if (oakName == null) {
                         throw new ValueFormatException("Invalid name: " + value);
                     }
-                    pv = PropertyValues.newName(oakName);
+                    pv = PropertyStates.nameProperty("", oakName);
                     break;
                 case PropertyType.PATH:
                     String oakValue = value;
@@ -188,23 +187,23 @@ public class ValueFactoryImpl implements
                     if (oakValue == null) {
                         throw new ValueFormatException("Invalid path: " + value);
                     }
-                    pv = PropertyValues.newPath(oakValue);
+                    pv = PropertyStates.pathProperty("", oakValue);
                     break;
                 case PropertyType.REFERENCE:
                     if (!IdentifierManager.isValidUUID(value)) {
                         throw new ValueFormatException("Invalid reference value " + value);
                     }
-                    pv = PropertyValues.newReference(value);
+                    pv = PropertyStates.referenceProperty("", value);
                     break;
                 case PropertyType.WEAKREFERENCE:
                     if (!IdentifierManager.isValidUUID(value)) {
                         throw new ValueFormatException("Invalid weak reference value " + value);
                     }
-                    pv = PropertyValues.newWeakReference(value);
+                    pv = PropertyStates.weakreferenceProperty("", value);
                     break;
                 case PropertyType.URI:
                     new URI(value);
-                    pv = PropertyValues.newUri(value);
+                    pv = PropertyStates.uriProperty("", value);
                     break;
                 case PropertyType.DECIMAL:
                     return createValue(StringPropertyState.getDecimal(value));

Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/value/ValueImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/value/ValueImpl.java?rev=1397467&r1=1397466&r2=1397467&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/value/ValueImpl.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/value/ValueImpl.java Fri Oct 12 08:40:50 2012
@@ -45,27 +45,30 @@ import org.slf4j.LoggerFactory;
 public class ValueImpl implements Value {
     private static final Logger log = LoggerFactory.getLogger(ValueImpl.class);
 
-    private final PropertyValue value;
+    private final PropertyState propertyState;
+    private final int index;
     private final NamePathMapper namePathMapper;
 
     private InputStream stream = null;
 
-    ValueImpl(PropertyValue value, NamePathMapper namePathMapper) {
-        this.value = value;
+    ValueImpl(PropertyState propertyState, int index, NamePathMapper namePathMapper) {
+        this.propertyState = propertyState;
+        this.index = index;
         this.namePathMapper = namePathMapper;
     }
 
-    public ValueImpl(PropertyState property, NamePathMapper namePathMapper) {
-        this(PropertyValues.create(property), namePathMapper);
+    ValueImpl(PropertyState property, NamePathMapper namePathMapper) {
+        this(property, 0, namePathMapper);
     }
 
     //--------------------------------------------------------------< Value >---
+
     /**
      * @see javax.jcr.Value#getType()
      */
     @Override
     public int getType() {
-        return value.getType().tag();
+        return propertyState.getType().tag();
     }
 
     /**
@@ -74,7 +77,7 @@ public class ValueImpl implements Value 
     @Override
     public boolean getBoolean() throws RepositoryException {
         if (getType() == PropertyType.STRING || getType() == PropertyType.BINARY || getType() == PropertyType.BOOLEAN) {
-            return value.getValue(Type.BOOLEAN);
+            return propertyState.getValue(Type.BOOLEAN, index);
         } else {
             throw new ValueFormatException("Incompatible type " + PropertyType.nameFromValue(getType()));
         }
@@ -113,7 +116,7 @@ public class ValueImpl implements Value 
                     Calendar cal = getDate();
                     return BigDecimal.valueOf(cal.getTimeInMillis());
                 default:
-                    return value.getValue(Type.DECIMAL);
+                    return propertyState.getValue(Type.DECIMAL, index);
             }
         } catch (NumberFormatException e) {
             throw new ValueFormatException("Incompatible type " + PropertyType.nameFromValue(getType()));
@@ -131,7 +134,7 @@ public class ValueImpl implements Value 
                     Calendar cal = getDate();
                     return cal.getTimeInMillis();
                 default:
-                    return value.getValue(Type.DOUBLE);
+                    return propertyState.getValue(Type.DOUBLE, index);
             }
         } catch (NumberFormatException e) {
             throw new ValueFormatException("Incompatible type " + PropertyType.nameFromValue(getType()));
@@ -149,7 +152,7 @@ public class ValueImpl implements Value 
                     Calendar cal = getDate();
                     return cal.getTimeInMillis();
                 default:
-                    return value.getValue(Type.LONG);
+                    return propertyState.getValue(Type.LONG, index);
             }
         } catch (NumberFormatException e) {
             throw new ValueFormatException("Incompatible type " + PropertyType.nameFromValue(getType()));
@@ -163,9 +166,9 @@ public class ValueImpl implements Value 
     public String getString() throws RepositoryException {
         switch (getType()) {
             case PropertyType.NAME:
-                return namePathMapper.getJcrName(value.getValue(Type.STRING));
+                return namePathMapper.getJcrName(propertyState.getValue(Type.STRING, index));
             case PropertyType.PATH:
-                String s = value.getValue(Type.STRING);
+                String s = propertyState.getValue(Type.STRING, index);
                 if (s.startsWith("[") && s.endsWith("]")) {
                     // identifier paths are returned as-is (JCR 2.0, 3.4.3.1)
                     return s;
@@ -178,7 +181,7 @@ public class ValueImpl implements Value 
                             "In this case a new Value instance must be acquired in order to successfully call this method.");
                 }
                 try {
-                    final InputStream is = value.getValue(Type.BINARY).getNewStream();
+                    final InputStream is = propertyState.getValue(Type.BINARY, index).getNewStream();
                     try {
                         return CharStreams.toString(CharStreams.newReaderSupplier(
                                 new InputSupplier<InputStream>() {
@@ -194,7 +197,7 @@ public class ValueImpl implements Value 
                     throw new RepositoryException("conversion from stream to string failed", e);
                 }
             default:
-                return value.getValue(Type.STRING);
+                return propertyState.getValue(Type.STRING, index);
         }
     }
 
@@ -216,11 +219,11 @@ public class ValueImpl implements Value 
                 return new ByteArrayInputStream(
                         getString().getBytes(Charsets.UTF_8));
         }
-        return value.getValue(Type.BINARY).getNewStream();
+        return propertyState.getValue(Type.BINARY, index).getNewStream();
     }
 
     long getStreamLength() {
-        return value.getValue(Type.BINARY).length();
+        return propertyState.getValue(Type.BINARY, index).length();
     }
 
     /**
@@ -237,9 +240,16 @@ public class ValueImpl implements Value 
      * @see Object#equals(Object)
      */
     @Override
-    public boolean equals(Object obj) {
-        if (obj instanceof ValueImpl) {
-            return value.equals(((ValueImpl) obj).value);
+    public boolean equals(Object other) {
+        if (other instanceof ValueImpl) {
+            ValueImpl that = (ValueImpl) other;
+            try {
+                // FIXME real equals implementation
+                return getType() == that.getType() && getString().equals(that.getString());
+            }
+            catch (RepositoryException e) {
+                throw new RuntimeException();
+            }
         } else {
             return false;
         }
@@ -250,12 +260,12 @@ public class ValueImpl implements Value 
      */
     @Override
     public int hashCode() {
-        return value.hashCode();
+        return propertyState.hashCode();
     }
 
     @Override
     public String toString() {
-        return value.toString();
+        return propertyState.getValue(Type.STRING, index);
     }
 
 }
\ No newline at end of file