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/05 23:57:42 UTC

svn commit: r1394833 - in /jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak: plugins/memory/ query/ast/ security/user/

Author: mduerig
Date: Fri Oct  5 21:57:41 2012
New Revision: 1394833

URL: http://svn.apache.org/viewvc?rev=1394833&view=rev
Log:
OAK-350: Unify PropertyState and CoreValue
- replace usages of ValueBasedProperty with new PropertyState implementations, remove ValueBased implementations

Removed:
    jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/memory/ValueBasedEmptyPropertyState.java
    jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/memory/ValueBasedMultiPropertyState.java
    jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/memory/ValueBasedSinglePropertyState.java
Modified:
    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/plugins/memory/StringPropertyState.java
    jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/ColumnImpl.java
    jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/FullTextSearchScoreImpl.java
    jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/LengthImpl.java
    jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/NodeLocalNameImpl.java
    jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/NodeNameImpl.java
    jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/SelectorImpl.java
    jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/user/UserProviderImpl.java

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=1394833&r1=1394832&r2=1394833&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 Fri Oct  5 21:57:41 2012
@@ -38,6 +38,7 @@ import static org.apache.jackrabbit.oak.
 import static org.apache.jackrabbit.oak.api.Type.PATHS;
 import static org.apache.jackrabbit.oak.api.Type.REFERENCE;
 import static org.apache.jackrabbit.oak.api.Type.REFERENCES;
+import static org.apache.jackrabbit.oak.api.Type.STRINGS;
 import static org.apache.jackrabbit.oak.api.Type.URI;
 import static org.apache.jackrabbit.oak.api.Type.URIS;
 import static org.apache.jackrabbit.oak.api.Type.WEAKREFERENCE;
@@ -48,12 +49,85 @@ public final class PropertyStates {
 
     @Nonnull
     public static PropertyState createProperty(String name, CoreValue value) {
-        return new ValueBasedSinglePropertyState(name, value);
+        int type = value.getType();
+        if (PropertyType.BINARY == type) {
+           return binaryProperty(name, new ValueBasedBlob(value));
+        }
+        else {
+            return createProperty(name, value.getString(), value.getType());
+        }
     }
 
     @Nonnull
     public static PropertyState createProperty(String name, List<CoreValue> values) {
-        return new ValueBasedMultiPropertyState(name, values);
+        if (values.isEmpty()) {
+            return emptyProperty(name, STRINGS);
+        }
+
+        int type = values.get(0).getType();
+        switch (type) {
+            case PropertyType.STRING:
+                List<String> strings = Lists.newArrayList();
+                for (CoreValue cv : values) {
+                    strings.add(cv.getString());
+                }
+                return stringProperty(name, strings);
+            case PropertyType.BINARY:
+                List<Blob> blobs = Lists.newArrayList();
+                for (CoreValue cv : values) {
+                    blobs.add(new ValueBasedBlob(cv));
+                }
+                return binaryPropertyFromBlob(name, blobs);
+            case PropertyType.LONG:
+                List<Long> longs = Lists.newArrayList();
+                for (CoreValue cv : values) {
+                    longs.add(cv.getLong());
+                }
+                return longProperty(name, longs);
+            case PropertyType.DOUBLE:
+                List<Double> doubles = Lists.newArrayList();
+                for (CoreValue cv : values) {
+                    doubles.add(cv.getDouble());
+                }
+                return doubleProperty(name, doubles);
+            case PropertyType.BOOLEAN:
+                List<Boolean> booleans = Lists.newArrayList();
+                for (CoreValue cv : values) {
+                    booleans.add(cv.getBoolean());
+                }
+                return booleanProperty(name, booleans);
+            case PropertyType.DECIMAL:
+                List<BigDecimal> decimals = Lists.newArrayList();
+                for (CoreValue cv : values) {
+                    decimals.add(cv.getDecimal());
+                }
+                return decimalProperty(name, decimals);
+            default:
+                List<String> vals = Lists.newArrayList();
+                for (CoreValue cv : values) {
+                    vals.add(cv.getString());
+                }
+                return new GenericsPropertyState(name, vals, Type.fromTag(type, true));
+        }
+    }
+
+    public static PropertyState createProperty(String name, String value, int type) {
+        switch (type) {
+            case PropertyType.STRING:
+                return new StringPropertyState(name, value);
+            case PropertyType.BINARY:
+                return new BinaryPropertyState(name, new StringBasedBlob(value));
+            case PropertyType.LONG:
+                return new LongPropertyState(name, SinglePropertyState.getLong(value));
+            case PropertyType.DOUBLE:
+                return new DoublePropertyState(name, StringPropertyState.getDouble(value));
+            case PropertyType.BOOLEAN:
+                return new BooleanPropertyState(name, StringPropertyState.getBoolean(value));
+            case PropertyType.DECIMAL:
+                return new DecimalPropertyState(name, StringPropertyState.getDecimal(value));
+            default:
+                return new GenericPropertyState(name, value, Type.fromTag(type, false));
+        }
     }
 
     @SuppressWarnings("unchecked")
@@ -132,6 +206,9 @@ public final class PropertyStates {
     }
 
     public static PropertyState emptyProperty(String name, final Type<?> type) {
+        if (!type.isArray()) {
+            throw new IllegalArgumentException("Not an array type:" + type);
+        }
         return new EmptyPropertyState(name) {
             @Override
             public Type<?> getType() {

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=1394833&r1=1394832&r2=1394833&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 Fri Oct  5 21:57:41 2012
@@ -30,6 +30,18 @@ import static java.util.Collections.sing
 
 abstract class SinglePropertyState extends EmptyPropertyState {
 
+    public static long getLong(String value) {
+        return Long.parseLong(value);
+    }
+
+    public static double getDouble(String value) {
+        return Double.parseDouble(value);
+    }
+
+    public static BigDecimal getDecimal(String value) {
+        return new BigDecimal(value);
+    }
+
     protected SinglePropertyState(String name) {
         super(name);
     }
@@ -41,11 +53,11 @@ abstract class SinglePropertyState exten
     }
 
     protected long getLong() {
-        return Long.parseLong(getString());
+        return getLong(getString());
     }
 
     protected double getDouble() {
-        return Double.parseDouble(getString());
+        return getDouble(getString());
     }
 
     protected boolean getBoolean() {
@@ -53,7 +65,7 @@ abstract class SinglePropertyState exten
     }
 
     protected BigDecimal getDecimal() {
-        return new BigDecimal(getString());
+        return getDecimal(getString());
     }
 
     @Override
@@ -130,5 +142,4 @@ abstract class SinglePropertyState exten
     public int count() {
         return 1;
     }
-
 }

Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/memory/StringPropertyState.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/memory/StringPropertyState.java?rev=1394833&r1=1394832&r2=1394833&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/memory/StringPropertyState.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/memory/StringPropertyState.java Fri Oct  5 21:57:41 2012
@@ -30,6 +30,10 @@ public class StringPropertyState extends
         this.value = value;
     }
 
+    public static boolean getBoolean(String value) {
+        return Boolean.parseBoolean(value);
+    }
+
     @Override
     protected String getString() {
         return value;
@@ -37,7 +41,7 @@ public class StringPropertyState extends
 
     @Override
     protected boolean getBoolean() {
-        return Boolean.parseBoolean(value);
+        return getBoolean(value);
     }
 
     @Override

Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/ColumnImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/ColumnImpl.java?rev=1394833&r1=1394832&r2=1394833&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/ColumnImpl.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/ColumnImpl.java Fri Oct  5 21:57:41 2012
@@ -18,7 +18,6 @@
  */
 package org.apache.jackrabbit.oak.query.ast;
 
-import org.apache.jackrabbit.oak.api.CoreValue;
 import org.apache.jackrabbit.oak.api.PropertyState;
 import org.apache.jackrabbit.oak.plugins.memory.PropertyStates;
 import org.apache.jackrabbit.oak.query.Query;
@@ -63,8 +62,7 @@ public class ColumnImpl extends AstEleme
             if (p == null) {
                 return null;
             }
-            CoreValue v = query.getValueFactory().createValue(p);
-            return PropertyStates.createProperty(Query.JCR_PATH, v);
+            return PropertyStates.stringProperty(Query.JCR_PATH, p);
         }
         return selector.currentProperty(propertyName);
     }

Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/FullTextSearchScoreImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/FullTextSearchScoreImpl.java?rev=1394833&r1=1394832&r2=1394833&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/FullTextSearchScoreImpl.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/FullTextSearchScoreImpl.java Fri Oct  5 21:57:41 2012
@@ -51,8 +51,7 @@ public class FullTextSearchScoreImpl ext
         PropertyState p = selector.currentProperty(Query.JCR_SCORE);
         if (p == null) {
             // TODO if score() is not supported by the index, use the value 0.0?
-            CoreValue v = query.getValueFactory().createValue(0.0);
-            p = PropertyStates.createProperty(Query.JCR_SCORE, v);
+            return PropertyStates.doubleProperty(Query.JCR_SCORE, 0.0);
         }
         return p;
     }

Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/LengthImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/LengthImpl.java?rev=1394833&r1=1394832&r2=1394833&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/LengthImpl.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/LengthImpl.java Fri Oct  5 21:57:41 2012
@@ -58,8 +58,7 @@ public class LengthImpl extends DynamicO
         }
         if (!p.isArray()) {
             long length = p.size();
-            CoreValue v = query.getValueFactory().createValue(length);
-            return PropertyStates.createProperty("LENGTH", v);
+            return PropertyStates.longProperty("LENGTH", length);
         }
         // TODO what is the expected result for LENGTH(multiValueProperty)?
         throw new IllegalArgumentException("LENGTH(x) on multi-valued property is not supported");

Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/NodeLocalNameImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/NodeLocalNameImpl.java?rev=1394833&r1=1394832&r2=1394833&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/NodeLocalNameImpl.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/NodeLocalNameImpl.java Fri Oct  5 21:57:41 2012
@@ -59,8 +59,7 @@ public class NodeLocalNameImpl extends D
         int colon = name.indexOf(':');
         // TODO LOCALNAME: evaluation of local name might not be correct
         String localName = colon < 0 ? name : name.substring(colon + 1);
-        CoreValue v = query.getValueFactory().createValue(localName);
-        return PropertyStates.createProperty("LOCALNAME", v);
+        return PropertyStates.stringProperty("LOCALNAME", localName);
     }
 
     @Override

Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/NodeNameImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/NodeNameImpl.java?rev=1394833&r1=1394832&r2=1394833&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/NodeNameImpl.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/NodeNameImpl.java Fri Oct  5 21:57:41 2012
@@ -63,8 +63,7 @@ public class NodeNameImpl extends Dynami
         String path = selector.currentPath();
         // Name escaping (convert space to _x0020_)
         String name = ISO9075.encode(PathUtils.getName(path));
-        CoreValue v2 = query.getValueFactory().createValue(name, PropertyType.NAME);
-        return PropertyStates.createProperty("NAME", v2);
+        return PropertyStates.nameProperty("NAME", name);
     }
 
     @Override

Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/SelectorImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/SelectorImpl.java?rev=1394833&r1=1394832&r2=1394833&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/SelectorImpl.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/SelectorImpl.java Fri Oct  5 21:57:41 2012
@@ -27,7 +27,6 @@ import javax.jcr.nodetype.NodeTypeIterat
 import javax.jcr.nodetype.NodeTypeManager;
 
 import com.google.common.collect.ImmutableSet;
-import org.apache.jackrabbit.oak.api.CoreValue;
 import org.apache.jackrabbit.oak.api.PropertyState;
 import org.apache.jackrabbit.oak.api.Tree;
 import org.apache.jackrabbit.oak.plugins.memory.PropertyStates;
@@ -228,8 +227,7 @@ public class SelectorImpl extends Source
                 // not a local path
                 return null;
             }
-            CoreValue v = query.getValueFactory().createValue(local);
-            return PropertyStates.createProperty(Query.JCR_PATH, v);
+            return PropertyStates.stringProperty(Query.JCR_PATH, local);
         }
         if (cursor == null) {
             return null;

Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/user/UserProviderImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/user/UserProviderImpl.java?rev=1394833&r1=1394832&r2=1394833&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/user/UserProviderImpl.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/user/UserProviderImpl.java Fri Oct  5 21:57:41 2012
@@ -303,8 +303,7 @@ class UserProviderImpl extends Authoriza
         if (value == null) {
             authorizableTree.removeProperty(propertyName);
         } else {
-            CoreValue cv = valueFactory.createValue(value, propertyType);
-            authorizableTree.setProperty(PropertyStates.createProperty(propertyName, cv));
+            authorizableTree.setProperty(PropertyStates.createProperty(propertyName, value, propertyType));
         }
     }