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/18 16:09:03 UTC

svn commit: r1399669 - in /jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak: plugins/memory/ value/

Author: mduerig
Date: Thu Oct 18 14:09:02 2012
New Revision: 1399669

URL: http://svn.apache.org/viewvc?rev=1399669&view=rev
Log:
OAK-380: Define conversion of property values
Make value conversions explicit through new Conversions class

Added:
    jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/value/Conversions.java   (with props)
Modified:
    jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/memory/BinariesPropertyState.java
    jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/memory/BinaryPropertyState.java
    jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/memory/BooleanPropertyState.java
    jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/memory/BooleansPropertyState.java
    jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/memory/DecimalPropertyState.java
    jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/memory/DecimalsPropertyState.java
    jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/memory/DoublePropertyState.java
    jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/memory/DoublesPropertyState.java
    jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/memory/EmptyPropertyState.java
    jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/memory/LongPropertyState.java
    jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/memory/LongsPropertyState.java
    jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/memory/MultiPropertyState.java
    jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/memory/PropertyStates.java
    jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/memory/SinglePropertyState.java
    jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/value/ValueFactoryImpl.java

Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/memory/BinariesPropertyState.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/memory/BinariesPropertyState.java?rev=1399669&r1=1399668&r2=1399669&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/memory/BinariesPropertyState.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/memory/BinariesPropertyState.java Thu Oct 18 14:09:02 2012
@@ -22,6 +22,7 @@ import com.google.common.base.Function;
 import com.google.common.collect.Iterables;
 import org.apache.jackrabbit.oak.api.Blob;
 import org.apache.jackrabbit.oak.api.Type;
+import org.apache.jackrabbit.oak.value.Conversions;
 
 import static org.apache.jackrabbit.oak.api.Type.BINARIES;
 
@@ -36,14 +37,14 @@ public class BinariesPropertyState exten
         return Iterables.transform(values, new Function<Blob, String>() {
             @Override
             public String apply(Blob value) {
-                return "<binary>";
+                return Conversions.convert(value).toString();
             }
         });
     }
 
     @Override
     protected String getString(int index) {
-        return "<binary>";
+        return Conversions.convert(values.get(index)).toString();
     }
 
     @Override

Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/memory/BinaryPropertyState.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/memory/BinaryPropertyState.java?rev=1399669&r1=1399668&r2=1399669&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/memory/BinaryPropertyState.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/memory/BinaryPropertyState.java Thu Oct 18 14:09:02 2012
@@ -18,6 +18,7 @@ package org.apache.jackrabbit.oak.plugin
 
 import org.apache.jackrabbit.oak.api.Blob;
 import org.apache.jackrabbit.oak.api.Type;
+import org.apache.jackrabbit.oak.value.Conversions;
 
 public class BinaryPropertyState extends SinglePropertyState {
     private final Blob value;
@@ -29,8 +30,7 @@ public class BinaryPropertyState extends
 
     @Override
     public String getString() {
-        // TODO find a better way to represent string values with Blobs
-        return value.toString();
+        return Conversions.convert(value).toString();
     }
 
     @Override

Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/memory/BooleanPropertyState.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/memory/BooleanPropertyState.java?rev=1399669&r1=1399668&r2=1399669&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/memory/BooleanPropertyState.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/memory/BooleanPropertyState.java Thu Oct 18 14:09:02 2012
@@ -19,6 +19,7 @@
 package org.apache.jackrabbit.oak.plugins.memory;
 
 import org.apache.jackrabbit.oak.api.Type;
+import org.apache.jackrabbit.oak.value.Conversions;
 
 import static org.apache.jackrabbit.oak.api.Type.*;
 
@@ -32,7 +33,7 @@ public class BooleanPropertyState extend
 
     @Override
     protected String getString() {
-        return Boolean.toString(value);
+        return Conversions.convert(value).toString();
     }
 
     @Override

Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/memory/BooleansPropertyState.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/memory/BooleansPropertyState.java?rev=1399669&r1=1399668&r2=1399669&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/memory/BooleansPropertyState.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/memory/BooleansPropertyState.java Thu Oct 18 14:09:02 2012
@@ -21,6 +21,7 @@ import java.util.List;
 import com.google.common.base.Function;
 import com.google.common.collect.Iterables;
 import org.apache.jackrabbit.oak.api.Type;
+import org.apache.jackrabbit.oak.value.Conversions;
 
 import static org.apache.jackrabbit.oak.api.Type.BOOLEANS;
 
@@ -34,14 +35,14 @@ public class BooleansPropertyState exten
         return Iterables.transform(values, new Function<Boolean, String>() {
             @Override
             public String apply(Boolean value) {
-                return Boolean.toString(value);
+                return Conversions.convert(value).toString();
             }
         });
     }
 
     @Override
     protected String getString(int index) {
-        return Boolean.toString(values.get(index));
+        return Conversions.convert(values.get(index)).toString();
     }
 
     @Override

Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/memory/DecimalPropertyState.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/memory/DecimalPropertyState.java?rev=1399669&r1=1399668&r2=1399669&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/memory/DecimalPropertyState.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/memory/DecimalPropertyState.java Thu Oct 18 14:09:02 2012
@@ -19,6 +19,7 @@ package org.apache.jackrabbit.oak.plugin
 import java.math.BigDecimal;
 
 import org.apache.jackrabbit.oak.api.Type;
+import org.apache.jackrabbit.oak.value.Conversions;
 
 import static org.apache.jackrabbit.oak.api.Type.*;
 
@@ -37,17 +38,17 @@ public class DecimalPropertyState extend
 
     @Override
     public double getDouble() {
-        return value.doubleValue();
+        return Conversions.convert(value).toDouble();
     }
 
     @Override
     public long getLong() {
-        return value.longValue();
+        return Conversions.convert(value).toLong();
     }
 
     @Override
     public String getString() {
-        return value.toString();
+        return Conversions.convert(value).toString();
     }
 
     @Override

Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/memory/DecimalsPropertyState.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/memory/DecimalsPropertyState.java?rev=1399669&r1=1399668&r2=1399669&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/memory/DecimalsPropertyState.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/memory/DecimalsPropertyState.java Thu Oct 18 14:09:02 2012
@@ -22,6 +22,7 @@ import java.util.List;
 import com.google.common.base.Function;
 import com.google.common.collect.Iterables;
 import org.apache.jackrabbit.oak.api.Type;
+import org.apache.jackrabbit.oak.value.Conversions;
 
 import static org.apache.jackrabbit.oak.api.Type.DECIMALS;
 
@@ -46,14 +47,14 @@ public class DecimalsPropertyState exten
         return Iterables.transform(values, new Function<BigDecimal, Double>() {
             @Override
             public Double apply(BigDecimal value) {
-                return value.doubleValue();
+                return Conversions.convert(value).toDouble();
             }
         });
     }
 
     @Override
     protected double getDouble(int index) {
-        return values.get(index).doubleValue();
+        return Conversions.convert(values.get(index)).toDouble();
     }
 
     @Override
@@ -61,14 +62,14 @@ public class DecimalsPropertyState exten
         return Iterables.transform(values, new Function<BigDecimal, Long>() {
             @Override
             public Long apply(BigDecimal value) {
-                return value.longValue();
+                return Conversions.convert(value).toLong();
             }
         });
     }
 
     @Override
     protected long getLong(int index) {
-        return values.get(index).longValue();
+        return Conversions.convert(values.get(index)).toLong();
     }
 
     @Override
@@ -76,14 +77,14 @@ public class DecimalsPropertyState exten
         return Iterables.transform(values, new Function<BigDecimal, String>() {
             @Override
             public String apply(BigDecimal value) {
-                return value.toString();
+                return Conversions.convert(value).toString();
             }
         });
     }
 
     @Override
     protected String getString(int index) {
-        return values.get(index).toString();
+        return Conversions.convert(values.get(index)).toString();
     }
 
     @Override

Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/memory/DoublePropertyState.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/memory/DoublePropertyState.java?rev=1399669&r1=1399668&r2=1399669&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/memory/DoublePropertyState.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/memory/DoublePropertyState.java Thu Oct 18 14:09:02 2012
@@ -21,6 +21,7 @@ package org.apache.jackrabbit.oak.plugin
 import java.math.BigDecimal;
 
 import org.apache.jackrabbit.oak.api.Type;
+import org.apache.jackrabbit.oak.value.Conversions;
 
 import static org.apache.jackrabbit.oak.api.Type.*;
 
@@ -34,7 +35,7 @@ public class DoublePropertyState extends
 
     @Override
     public BigDecimal getDecimal() {
-        return new BigDecimal(value);
+        return Conversions.convert(value).toDecimal();
     }
 
     @Override
@@ -44,12 +45,12 @@ public class DoublePropertyState extends
 
     @Override
     public long getLong() {
-        return (long) value;
+        return Conversions.convert(value).toLong();
     }
 
     @Override
     public String getString() {
-        return String.valueOf(value);
+        return Conversions.convert(value).toString();
     }
 
     @Override

Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/memory/DoublesPropertyState.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/memory/DoublesPropertyState.java?rev=1399669&r1=1399668&r2=1399669&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/memory/DoublesPropertyState.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/memory/DoublesPropertyState.java Thu Oct 18 14:09:02 2012
@@ -24,6 +24,7 @@ import java.util.List;
 import com.google.common.base.Function;
 import com.google.common.collect.Iterables;
 import org.apache.jackrabbit.oak.api.Type;
+import org.apache.jackrabbit.oak.value.Conversions;
 
 import static org.apache.jackrabbit.oak.api.Type.DOUBLES;
 
@@ -37,14 +38,14 @@ public class DoublesPropertyState extend
         return Iterables.transform(values, new Function<Double, BigDecimal>() {
             @Override
             public BigDecimal apply(Double value) {
-                return new BigDecimal(value);
+                return Conversions.convert(value).toDecimal();
             }
         });
     }
 
     @Override
     protected BigDecimal getDecimal(int index) {
-        return new BigDecimal(values.get(index));
+        return Conversions.convert(values.get(index)).toDecimal();
     }
 
     @Override
@@ -62,14 +63,14 @@ public class DoublesPropertyState extend
         return Iterables.transform(values, new Function<Double, Long>() {
             @Override
             public Long apply(Double value) {
-                return value.longValue();
+                return Conversions.convert(value).toLong();
             }
         });
     }
 
     @Override
     protected long getLong(int index) {
-        return values.get(index).longValue();
+        return Conversions.convert(values.get(index)).toLong();
     }
 
     @Override
@@ -77,14 +78,14 @@ public class DoublesPropertyState extend
         return Iterables.transform(values, new Function<Double, String>() {
             @Override
             public String apply(Double value) {
-                return String.valueOf(value);
+                return Conversions.convert(value).toString();
             }
         });
     }
 
     @Override
     protected String getString(int index) {
-        return String.valueOf(values.get(index));
+        return Conversions.convert(values.get(index)).toString();
     }
 
     @Override

Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/memory/EmptyPropertyState.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/memory/EmptyPropertyState.java?rev=1399669&r1=1399668&r2=1399669&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/memory/EmptyPropertyState.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/memory/EmptyPropertyState.java Thu Oct 18 14:09:02 2012
@@ -18,14 +18,12 @@
  */
 package org.apache.jackrabbit.oak.plugins.memory;
 
-import java.math.BigDecimal;
 import java.util.Collections;
 
 import javax.annotation.Nonnull;
 import javax.jcr.PropertyType;
 
 import com.google.common.collect.Iterables;
-import org.apache.jackrabbit.oak.api.Blob;
 import org.apache.jackrabbit.oak.api.PropertyState;
 import org.apache.jackrabbit.oak.api.Type;
 
@@ -50,66 +48,6 @@ public abstract class EmptyPropertyState
         this.name = name;
     }
 
-    /**
-     * Utility method defining the conversion from {@code String}
-     * to a binary value
-     *
-     * @param value  The string to convert to a binary
-     * @return  The binary value parsed from {@code value}
-     */
-    public static Blob getBinary(String value) {
-        return new StringBasedBlob(value);
-    }
-
-    /**
-     * Utility method defining the conversion from {@code String}
-     * to {@code long}.
-     * @param value  The string to convert to a long
-     * @return  The long value parsed from {@code value}
-     * @throws NumberFormatException  if the string does not contain a
-     * parseable long.
-     */
-    public static long getLong(String value) {
-        return Long.parseLong(value);
-    }
-
-    /**
-     * Utility method defining the conversion from {@code String}
-     * to {@code double}.
-     *
-     * @param value  The string to convert to a double
-     * @return  The double value parsed from {@code value}
-     * @throws NumberFormatException  if the string does not contain a
-     * parseable double.
-     */
-    public static double getDouble(String value) {
-        return Double.parseDouble(value);
-    }
-
-    /**
-     * Utility method defining the conversion from {@code String}
-     * to {@code boolean}.
-     *
-     *
-     * @param value  The string to convert to a boolean
-     * @return  The boolean value parsed from {@code value}
-     */
-    public static boolean getBoolean(String value) {
-        return Boolean.parseBoolean(value);
-    }
-
-    /**
-     * Utility method defining the conversion from {@code String}
-     * to {@code BigDecimal}.
-     * @param value  The string to convert to a BigDecimal
-     * @return  The BigDecimal value parsed from {@code value}
-     * @throws NumberFormatException  if the string does not contain a
-     * parseable BigDecimal.
-     */
-    public static BigDecimal getDecimal(String value) {
-        return new BigDecimal(value);
-    }
-
     @Nonnull
     @Override
     public String getName() {

Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/memory/LongPropertyState.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/memory/LongPropertyState.java?rev=1399669&r1=1399668&r2=1399669&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/memory/LongPropertyState.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/memory/LongPropertyState.java Thu Oct 18 14:09:02 2012
@@ -21,6 +21,7 @@ package org.apache.jackrabbit.oak.plugin
 import java.math.BigDecimal;
 
 import org.apache.jackrabbit.oak.api.Type;
+import org.apache.jackrabbit.oak.value.Conversions;
 
 import static org.apache.jackrabbit.oak.api.Type.*;
 
@@ -34,12 +35,12 @@ public class LongPropertyState extends S
 
     @Override
     public BigDecimal getDecimal() {
-        return new BigDecimal(value);
+        return Conversions.convert(value).toDecimal();
     }
 
     @Override
     public double getDouble() {
-        return value;
+        return Conversions.convert(value).toDouble();
     }
 
     @Override
@@ -49,7 +50,7 @@ public class LongPropertyState extends S
 
     @Override
     public String getString() {
-        return String.valueOf(value);
+        return Conversions.convert(value).toString();
     }
 
     @Override

Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/memory/LongsPropertyState.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/memory/LongsPropertyState.java?rev=1399669&r1=1399668&r2=1399669&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/memory/LongsPropertyState.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/memory/LongsPropertyState.java Thu Oct 18 14:09:02 2012
@@ -24,6 +24,7 @@ import java.util.List;
 import com.google.common.base.Function;
 import com.google.common.collect.Iterables;
 import org.apache.jackrabbit.oak.api.Type;
+import org.apache.jackrabbit.oak.value.Conversions;
 
 import static org.apache.jackrabbit.oak.api.Type.LONGS;
 
@@ -38,14 +39,14 @@ public class LongsPropertyState extends 
         return Iterables.transform(values, new Function<Long, BigDecimal>() {
             @Override
             public BigDecimal apply(Long value) {
-                return new BigDecimal(value);
+                return Conversions.convert(value).toDecimal();
             }
         });
     }
 
     @Override
     protected BigDecimal getDecimal(int index) {
-        return new BigDecimal(values.get(index));
+        return Conversions.convert(values.get(index)).toDecimal();
     }
 
     @Override
@@ -53,14 +54,14 @@ public class LongsPropertyState extends 
         return Iterables.transform(values, new Function<Long, Double>() {
             @Override
             public Double apply(Long value) {
-                return value.doubleValue();
+                return Conversions.convert(value).toDouble();
             }
         });
     }
 
     @Override
     protected double getDouble(int index) {
-        return values.get(index);
+        return Conversions.convert(values.get(index)).toDouble();
     }
 
     @Override
@@ -78,14 +79,14 @@ public class LongsPropertyState extends 
         return Iterables.transform(values, new Function<Long, String>() {
             @Override
             public String apply(Long value) {
-                return String.valueOf(value);
+                return Conversions.convert(value).toString();
             }
         });
     }
 
     @Override
     protected String getString(int index) {
-        return String.valueOf(values.get(index));
+        return Conversions.convert(values.get(index)).toString();
     }
 
     @Override

Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/memory/MultiPropertyState.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/memory/MultiPropertyState.java?rev=1399669&r1=1399668&r2=1399669&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/memory/MultiPropertyState.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/memory/MultiPropertyState.java Thu Oct 18 14:09:02 2012
@@ -28,6 +28,7 @@ import com.google.common.base.Function;
 import com.google.common.collect.Iterables;
 import org.apache.jackrabbit.oak.api.Blob;
 import org.apache.jackrabbit.oak.api.Type;
+import org.apache.jackrabbit.oak.value.Conversions;
 
 import static com.google.common.base.Preconditions.checkArgument;
 
@@ -68,7 +69,7 @@ abstract class MultiPropertyState<T> ext
         return Iterables.transform(getStrings(), new Function<String, Blob>() {
             @Override
             public Blob apply(String value) {
-                return EmptyPropertyState.getBinary(value);
+                return Conversions.convert(value).toBinary();
             }
         });
     }
@@ -80,7 +81,7 @@ abstract class MultiPropertyState<T> ext
         return Iterables.transform(getStrings(), new Function<String, Long>() {
             @Override
             public Long apply(String value) {
-                return EmptyPropertyState.getLong(value);
+                return Conversions.convert(value).toLong();
             }
         });
     }
@@ -92,7 +93,7 @@ abstract class MultiPropertyState<T> ext
         return Iterables.transform(getStrings(), new Function<String, Double>() {
             @Override
             public Double apply(String value) {
-                return EmptyPropertyState.getDouble(value);
+                return Conversions.convert(value).toDouble();
             }
         });
     }
@@ -104,7 +105,7 @@ abstract class MultiPropertyState<T> ext
         return Iterables.transform(getStrings(), new Function<String, Boolean>() {
             @Override
             public Boolean apply(String value) {
-                return EmptyPropertyState.getBoolean(value);
+                return Conversions.convert(value).toBoolean();
             }
         });
     }
@@ -116,7 +117,7 @@ abstract class MultiPropertyState<T> ext
         return Iterables.transform(getStrings(), new Function<String, BigDecimal>() {
             @Override
             public BigDecimal apply(String value) {
-                return EmptyPropertyState.getDecimal(value);
+                return Conversions.convert(value).toDecimal();
             }
         });
     }
@@ -126,7 +127,7 @@ abstract class MultiPropertyState<T> ext
      * @return  The value at the given {@code index} as {@link Blob}
      */
     protected Blob getBlob(int index) {
-        return EmptyPropertyState.getBinary(getString(index));
+        return Conversions.convert(getString(index)).toBinary();
     }
 
     /**
@@ -134,7 +135,7 @@ abstract class MultiPropertyState<T> ext
      * @return  The value at the given {@code index} as {@code long}
      */
     protected long getLong(int index) {
-        return EmptyPropertyState.getLong(getString(index));
+        return Conversions.convert(getString(index)).toLong();
     }
 
     /**
@@ -142,7 +143,7 @@ abstract class MultiPropertyState<T> ext
      * @return  The value at the given {@code index} as {@code double}
      */
     protected double getDouble(int index) {
-        return EmptyPropertyState.getDouble(getString(index));
+        return Conversions.convert(getString(index)).toDouble();
     }
 
     /**
@@ -150,7 +151,7 @@ abstract class MultiPropertyState<T> ext
      * @return  The value at the given {@code index} as {@code boolean}
      */
     protected boolean getBoolean(int index) {
-        return EmptyPropertyState.getBoolean(getString(index));
+        return Conversions.convert(getString(index)).toBoolean();
     }
 
     /**
@@ -158,7 +159,7 @@ abstract class MultiPropertyState<T> ext
      * @return  The value at the given {@code index} as {@code BigDecimal}
      */
     protected BigDecimal getDecimal(int index) {
-        return EmptyPropertyState.getDecimal(getString(index));
+        return Conversions.convert(getString(index)).toDecimal();
     }
 
     /**

Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/memory/PropertyStates.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/memory/PropertyStates.java?rev=1399669&r1=1399668&r2=1399669&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/memory/PropertyStates.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/memory/PropertyStates.java Thu Oct 18 14:09:02 2012
@@ -35,6 +35,7 @@ import org.apache.jackrabbit.oak.api.Pro
 import org.apache.jackrabbit.oak.api.Type;
 import org.apache.jackrabbit.oak.kernel.KernelBlob;
 import org.apache.jackrabbit.oak.kernel.TypeCodes;
+import org.apache.jackrabbit.oak.value.Conversions;
 
 import static org.apache.jackrabbit.oak.api.Type.DATE;
 import static org.apache.jackrabbit.oak.api.Type.DATES;
@@ -164,15 +165,15 @@ public final class PropertyStates {
             case PropertyType.STRING:
                 return new StringPropertyState(name, value);
             case PropertyType.BINARY:
-                return new BinaryPropertyState(name, EmptyPropertyState.getBinary(value));
+                return new BinaryPropertyState(name, Conversions.convert(value).toBinary());
             case PropertyType.LONG:
-                return new LongPropertyState(name, EmptyPropertyState.getLong(value));
+                return new LongPropertyState(name, Conversions.convert(value).toLong());
             case PropertyType.DOUBLE:
-                return new DoublePropertyState(name, EmptyPropertyState.getDouble(value));
+                return new DoublePropertyState(name, Conversions.convert(value).toDouble());
             case PropertyType.BOOLEAN:
-                return new BooleanPropertyState(name, EmptyPropertyState.getBoolean(value));
+                return new BooleanPropertyState(name, Conversions.convert(value).toBoolean());
             case PropertyType.DECIMAL:
-                return new DecimalPropertyState(name, EmptyPropertyState.getDecimal(value));
+                return new DecimalPropertyState(name, Conversions.convert(value).toDecimal());
             default:
                 return new GenericPropertyState(name, value, Type.fromTag(type, false));
         }
@@ -619,7 +620,7 @@ public final class PropertyStates {
             if (reader.matches(JsopReader.NUMBER)) {
                 String number = reader.getToken();
                 type = PropertyType.LONG;
-                values.add(EmptyPropertyState.getLong(number));
+                values.add(Conversions.convert(number).toLong());
             } else if (reader.matches(JsopReader.TRUE)) {
                 type = PropertyType.BOOLEAN;
                 values.add(true);
@@ -634,9 +635,9 @@ public final class PropertyStates {
                     if (type == PropertyType.BINARY) {
                         values.add(new KernelBlob(value, kernel));
                     } else if(type == PropertyType.DOUBLE) {
-                        values.add(EmptyPropertyState.getDouble(value));
+                        values.add(Conversions.convert(value).toDouble());
                     } else if(type == PropertyType.DECIMAL) {
-                        values.add(EmptyPropertyState.getDecimal(value));
+                        values.add(Conversions.convert(value).toDecimal());
                     } else {
                         values.add(value);
                     }

Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/memory/SinglePropertyState.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/memory/SinglePropertyState.java?rev=1399669&r1=1399668&r2=1399669&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/memory/SinglePropertyState.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/memory/SinglePropertyState.java Thu Oct 18 14:09:02 2012
@@ -25,6 +25,7 @@ import javax.jcr.PropertyType;
 
 import org.apache.jackrabbit.oak.api.Blob;
 import org.apache.jackrabbit.oak.api.Type;
+import org.apache.jackrabbit.oak.value.Conversions;
 
 import static com.google.common.base.Preconditions.checkArgument;
 import static java.util.Collections.singleton;
@@ -53,35 +54,35 @@ abstract class SinglePropertyState exten
      * {@link #getString()}.
      */
     protected Blob getBlob() {
-        return getBinary(getString());
+        return Conversions.convert(getString()).toBinary();
     }
 
     /**
      * @return  {@code getLong(getString())}
      */
     protected long getLong() {
-        return getLong(getString());
+        return Conversions.convert(getString()).toLong();
     }
 
     /**
      * @return  {@code getDouble(getString())}
      */
     protected double getDouble() {
-        return getDouble(getString());
+        return Conversions.convert(getString()).toDouble();
     }
 
     /**
      * @return  {@code StringPropertyState.getBoolean(getString())}
      */
     protected boolean getBoolean() {
-        return getBoolean(getString());
+        return Conversions.convert(getString()).toBoolean();
     }
 
     /**
      * @return  {@code getDecimal(getString())}
      */
     protected BigDecimal getDecimal() {
-        return getDecimal(getString());
+        return Conversions.convert(getString()).toDecimal();
     }
 
     /**

Added: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/value/Conversions.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/value/Conversions.java?rev=1399669&view=auto
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/value/Conversions.java (added)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/value/Conversions.java Thu Oct 18 14:09:02 2012
@@ -0,0 +1,260 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.jackrabbit.oak.value;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.math.BigDecimal;
+
+import com.google.common.io.ByteStreams;
+import org.apache.jackrabbit.oak.api.Blob;
+import org.apache.jackrabbit.oak.plugins.memory.StringBasedBlob;
+
+/**
+ * Utility class defining the conversion that take place between {@link org.apache.jackrabbit.oak.api.PropertyState}s
+ * of different types.
+ * <p>
+ * Example:
+ * <pre>
+ *    double three = convert("3.0").toDouble();
+ * </pre>
+ */
+public final class Conversions {
+    private Conversions() {}
+
+    /**
+     * A converter converts a value to its representation as a specific target type. Not all target
+     * types might be supported for a given value in which case implementations throw an exception.
+     * The default implementations of the various conversion methods all operate on the string
+     * representation of the underlying value (i.e. call {@code Converter.toString()}.
+     */
+    public abstract static class Converter {
+
+        /**
+         * Convert to string
+         * @return  string representation of the converted value
+         */
+        public abstract String toString();
+
+        /**
+         * Convert to binary. This default implementation returns an new instance
+         * of {@link StringBasedBlob}.
+         * @return  binary representation of the converted value
+         */
+        public Blob toBinary() {
+            return new StringBasedBlob(toString());
+        }
+
+        /**
+         * Convert to long. This default implementation is based on {@code Long.parseLong(String)}.
+         * @return  long representation of the converted value
+         * @throws NumberFormatException
+         */
+        public long toLong() {
+            return Long.parseLong(toString());
+        }
+
+        /**
+         * Convert to double. This default implementation is based on {@code Double.parseDouble(String)}.
+         * @return  double representation of the converted value
+         * @throws NumberFormatException
+         */
+        public double toDouble() {
+            return Double.parseDouble(toString());
+        }
+
+        /**
+         * Convert to boolean. This default implementation is based on {@code Boolean.parseBoolean(String)}.
+         * @return  boolean representation of the converted value
+         */
+        public boolean toBoolean() {
+            return Boolean.parseBoolean(toString());
+        }
+
+        /**
+         * Convert to decimal. This default implementation is based on {@code new BigDecimal(String)}.
+         * @return  decimal representation of the converted value
+         * @throws NumberFormatException
+         */
+        public BigDecimal toDecimal() {
+            return new BigDecimal(toString());
+        }
+    }
+
+    /**
+     * Create a converter for a string.
+     * @param value  The string to convert
+     * @return  A converter for {@code value}
+     * @throws NumberFormatException
+     */
+    public static Converter convert(final String value) {
+        return new Converter() {
+            @Override
+            public String toString() {
+                return value;
+            }
+        };
+    }
+
+    /**
+     * Create a converter for a binary.
+     * For the conversion to {@code String} the binary in interpreted as UTF-8 encoded string.
+     * @param value  The binary to convert
+     * @return  A converter for {@code value}
+     * @throws IllegalArgumentException  if the binary is inaccessible
+     */
+    public static Converter convert(final Blob value) {
+        return new Converter() {
+            @Override
+            public String toString() {
+                try {
+                    InputStream in = value.getNewStream();
+                    try {
+                        return new String(ByteStreams.toByteArray(in), "UTF-8");
+                    }
+                    finally {
+                        in.close();
+                    }
+                }
+                catch (IOException e) {
+                    throw new IllegalArgumentException(e);
+                }
+            }
+
+            @Override
+            public Blob toBinary() {
+                return value;
+            }
+        };
+    }
+
+    /**
+     * Create a converter for a long. {@code String.valueOf(long)} is used for the conversion to {@code String}.
+     * The conversions to {@code double} and {@code long} return the {@code value} itself.
+     * The conversion to decimal uses {@code new BigDecimal(long)}.
+     * @param value  The long to convert
+     * @return  A converter for {@code value}
+     */
+    public static Converter convert(final long value) {
+        return new Converter() {
+            @Override
+            public String toString() {
+                return String.valueOf(value);
+            }
+
+            @Override
+            public long toLong() {
+                return value;
+            }
+
+            @Override
+            public double toDouble() {
+                return value;
+            }
+
+            @Override
+            public BigDecimal toDecimal() {
+                return new BigDecimal(value);
+            }
+        };
+    }
+
+    /**
+     * Create a converter for a double. {@code String.valueOf(double)} is used for the conversion to {@code String}.
+     * The conversions to {@code double} and {@code long} return the {@code value} itself where in the former case
+     * the value is casted to {@code long}.
+     * The conversion to decimal uses {@code new BigDecimal(double)}.
+     * @param value  The double to convert
+     * @return  A converter for {@code value}
+     */
+    public static Converter convert(final double value) {
+        return new Converter() {
+            @Override
+            public String toString() {
+                return String.valueOf(value);
+            }
+
+            @Override
+            public long toLong() {
+                return (long) value;
+            }
+
+            @Override
+            public double toDouble() {
+                return value;
+            }
+
+            @Override
+            public BigDecimal toDecimal() {
+                return new BigDecimal(value);
+            }
+        };
+    }
+
+    /**
+     * Create a converter for a boolean. {@code Boolean.toString(boolean)} is used for the conversion to {@code String}.
+     * @param value  The boolean to convert
+     * @return  A converter for {@code value}
+     */
+    public static Converter convert(final boolean value) {
+        return new Converter() {
+            @Override
+            public String toString() {
+                return Boolean.toString(value);
+            }
+
+            @Override
+            public boolean toBoolean() {
+                return value;
+            }
+        };
+    }
+
+    /**
+     * Create a converter for a decimal. {@code BigDecimal.toString()} is used for the conversion to {@code String}.
+     * {@code BigDecimal.longValue()} and {@code BigDecimal.doubleValue()} is used for the conversions to
+     * {@code long} and {@code double}, respectively.
+     * @param value  The decimal to convert
+     * @return  A converter for {@code value}
+     */
+    public static Converter convert(final BigDecimal value) {
+        return new Converter() {
+            @Override
+            public String toString() {
+                return value.toString();
+            }
+
+            @Override
+            public long toLong() {
+                return value.longValue();
+            }
+
+            @Override
+            public double toDouble() {
+                return value.doubleValue();
+            }
+
+            @Override
+            public BigDecimal toDecimal() {
+                return value;
+            }
+        };
+    }
+
+}

Propchange: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/value/Conversions.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/value/Conversions.java
------------------------------------------------------------------------------
    svn:keywords = Author Date Id Revision Rev URL

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=1399669&r1=1399668&r2=1399669&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 Thu Oct 18 14:09:02 2012
@@ -40,7 +40,6 @@ import org.apache.jackrabbit.oak.api.Pro
 import org.apache.jackrabbit.oak.api.PropertyValue;
 import org.apache.jackrabbit.oak.namepath.NamePathMapper;
 import org.apache.jackrabbit.oak.plugins.identifier.IdentifierManager;
-import org.apache.jackrabbit.oak.plugins.memory.EmptyPropertyState;
 import org.apache.jackrabbit.oak.plugins.memory.PropertyStates;
 import org.apache.jackrabbit.oak.spi.query.PropertyValues;
 import org.apache.jackrabbit.util.ISO8601;
@@ -193,9 +192,9 @@ public class ValueFactoryImpl implements
                     pv = PropertyStates.binaryProperty("", value.getBytes("UTF-8"));
                     break;
                 case PropertyType.LONG:
-                    return createValue(EmptyPropertyState.getLong(value));
+                    return createValue(Conversions.convert(value).toLong());
                 case PropertyType.DOUBLE:
-                    return createValue(EmptyPropertyState.getDouble(value));
+                    return createValue(Conversions.convert(value).toDouble());
                 case PropertyType.DATE:
                     if (ISO8601.parse(value) == null) {
                         throw new ValueFormatException("Invalid date " + value);
@@ -203,7 +202,7 @@ public class ValueFactoryImpl implements
                     pv = PropertyStates.dateProperty("", value);
                     break;
                 case PropertyType.BOOLEAN:
-                    return createValue(EmptyPropertyState.getBoolean(value));
+                    return createValue(Conversions.convert(value).toBoolean());
                 case PropertyType.NAME:
                     String oakName = namePathMapper.getOakName(value);
                     if (oakName == null) {
@@ -240,7 +239,7 @@ public class ValueFactoryImpl implements
                     pv = PropertyStates.uriProperty("", value);
                     break;
                 case PropertyType.DECIMAL:
-                    return createValue(EmptyPropertyState.getDecimal(value));
+                    return createValue(Conversions.convert(value).toDecimal());
                 default:
                     throw new ValueFormatException("Invalid type: " + type);
             }