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/19 13:26:48 UTC

svn commit: r1400044 - in /jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins: index/property/PropertyIndexUpdate.java memory/MemoryPropertyBuilder.java

Author: mduerig
Date: Fri Oct 19 11:26:48 2012
New Revision: 1400044

URL: http://svn.apache.org/viewvc?rev=1400044&view=rev
Log:
OAK-389: Simplify code by using PropertyBuilder

Modified:
    jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/property/PropertyIndexUpdate.java
    jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/memory/MemoryPropertyBuilder.java

Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/property/PropertyIndexUpdate.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/property/PropertyIndexUpdate.java?rev=1400044&r1=1400043&r2=1400044&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/property/PropertyIndexUpdate.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/property/PropertyIndexUpdate.java Fri Oct 19 11:26:48 2012
@@ -23,15 +23,15 @@ import java.util.Set;
 import javax.jcr.PropertyType;
 
 import com.google.common.base.Preconditions;
-import com.google.common.collect.Lists;
 import com.google.common.collect.Maps;
 import com.google.common.collect.Sets;
 import org.apache.jackrabbit.oak.api.CommitFailedException;
 import org.apache.jackrabbit.oak.api.PropertyState;
 import org.apache.jackrabbit.oak.api.Type;
-import org.apache.jackrabbit.oak.plugins.memory.PropertyStates;
+import org.apache.jackrabbit.oak.plugins.memory.MemoryPropertyBuilder;
 import org.apache.jackrabbit.oak.spi.query.PropertyValues;
 import org.apache.jackrabbit.oak.spi.state.NodeBuilder;
+import org.apache.jackrabbit.oak.spi.state.PropertyBuilder;
 
 /**
  * Takes care of applying the updates to the index content.
@@ -88,16 +88,16 @@ class PropertyIndexUpdate {
             Set<String> paths = entry.getValue();
             PropertyState property = index.getProperty(encoded);
             if (property != null) {
-                List<String> values = Lists.newArrayList();
+                PropertyBuilder<String> builder = MemoryPropertyBuilder.create(Type.STRING).setName(encoded);
                 for (String value : property.getValue(Type.STRINGS)) {
-                    if (!paths.contains(values)) {
-                        values.add(value);
+                    if (!paths.contains(builder)) {
+                        builder.addValue(value);
                     }
                 }
-                if (values.isEmpty()) {
+                if (builder.isEmpty()) {
                     index.removeProperty(encoded);
                 } else {
-                    index.setProperty(PropertyStates.stringProperty(encoded, values));
+                    index.setProperty(builder.getPropertyState(true));
                 }
             }
         }
@@ -105,25 +105,22 @@ class PropertyIndexUpdate {
         for (Map.Entry<String, Set<String>> entry : insert.entrySet()) {
             String encoded = entry.getKey();
             Set<String> paths = entry.getValue();
-            List<String> values = Lists.newArrayList();
             PropertyState property = index.getProperty(encoded);
-            if (property != null) {
-                for (String value : property.getValue(Type.STRINGS)) {
-                    values.add(value);
-                    paths.remove(value);
-                }
-            }
+            PropertyBuilder<String> builder = MemoryPropertyBuilder.create(Type.STRING)
+                    .setName(encoded)
+                    .assignFrom(property);
             for (String path : paths) {
-                values.add(path);
+                if (!builder.hasValue(path)) {
+                    builder.addValue(path);
+                }
             }
-            if (values.isEmpty()) {
+            if (builder.isEmpty()) {
                 index.removeProperty(encoded);
-            } else if (unique && values.size() > 1) {
+            } else if (unique && builder.count() > 1) {
                 throw new CommitFailedException(
                         "Uniqueness constraint violated");
             } else {
-                index.setProperty(PropertyStates
-                        .stringProperty(encoded, values));
+                index.setProperty(builder.getPropertyState(true));
             }
         }
     }

Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/memory/MemoryPropertyBuilder.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/memory/MemoryPropertyBuilder.java?rev=1400044&r1=1400043&r2=1400044&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/memory/MemoryPropertyBuilder.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/memory/MemoryPropertyBuilder.java Fri Oct 19 11:26:48 2012
@@ -147,7 +147,7 @@ public class MemoryPropertyBuilder<T> im
     public PropertyState getPropertyState(boolean asArray) {
         checkState(name != null, "Property has no name");
         if (values.isEmpty()) {
-            return PropertyStates.emptyProperty(name, type);
+            return PropertyStates.emptyProperty(name, Type.fromTag(type.tag(), true));
         }
         else if (isArray() || asArray) {
             switch (type.tag()) {