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 an...@apache.org on 2013/12/02 15:45:42 UTC

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

Author: angela
Date: Mon Dec  2 14:45:42 2013
New Revision: 1547034

URL: http://svn.apache.org/r1547034
Log:
OAK-372 : Integrate PropertyBuilder with NodeBuilder

Added:
    jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/util/PropertyBuilder.java   (contents, props changed)
      - copied, changed from r1545683, jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/memory/MemoryPropertyBuilder.java
Removed:
    jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/memory/MemoryPropertyBuilder.java
    jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/state/PropertyBuilder.java
    jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/util/PropertyUtil.java
Modified:
    jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/core/MutableTree.java
    jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/commit/ChildOrderConflictHandler.java
    jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/commit/MergingNodeStateDiff.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/security/authorization/accesscontrol/AccessControlManagerImpl.java
    jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/privilege/JcrAllCommitHook.java
    jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/user/MembershipProvider.java
    jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/user/MembershipWriter.java
    jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/memory/MemoryPropertyBuilderTest.java
    jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/session/ItemImpl.java

Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/core/MutableTree.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/core/MutableTree.java?rev=1547034&r1=1547033&r2=1547034&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/core/MutableTree.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/core/MutableTree.java Mon Dec  2 14:45:42 2013
@@ -18,22 +18,8 @@
  */
 package org.apache.jackrabbit.oak.core;
 
-import static com.google.common.base.Preconditions.checkArgument;
-import static com.google.common.base.Preconditions.checkNotNull;
-import static com.google.common.base.Preconditions.checkState;
-import static com.google.common.collect.Iterables.filter;
-import static com.google.common.collect.Iterables.indexOf;
-import static org.apache.jackrabbit.oak.api.Tree.Status.EXISTING;
-import static org.apache.jackrabbit.oak.api.Tree.Status.MODIFIED;
-import static org.apache.jackrabbit.oak.api.Tree.Status.NEW;
-import static org.apache.jackrabbit.oak.api.Type.STRING;
-import static org.apache.jackrabbit.oak.commons.PathUtils.elements;
-import static org.apache.jackrabbit.oak.commons.PathUtils.isAbsolute;
-import static org.apache.jackrabbit.oak.spi.state.NodeStateUtils.isHidden;
-
 import java.util.Collections;
 import java.util.Set;
-
 import javax.annotation.CheckForNull;
 import javax.annotation.Nonnull;
 
@@ -44,11 +30,23 @@ import org.apache.jackrabbit.oak.api.Pro
 import org.apache.jackrabbit.oak.api.Tree;
 import org.apache.jackrabbit.oak.api.Type;
 import org.apache.jackrabbit.oak.core.AbstractRoot.Move;
-import org.apache.jackrabbit.oak.plugins.memory.MemoryPropertyBuilder;
 import org.apache.jackrabbit.oak.plugins.memory.MultiStringPropertyState;
 import org.apache.jackrabbit.oak.spi.state.NodeBuilder;
 import org.apache.jackrabbit.oak.spi.state.NodeState;
-import org.apache.jackrabbit.oak.spi.state.PropertyBuilder;
+import org.apache.jackrabbit.oak.util.PropertyBuilder;
+
+import static com.google.common.base.Preconditions.checkArgument;
+import static com.google.common.base.Preconditions.checkNotNull;
+import static com.google.common.base.Preconditions.checkState;
+import static com.google.common.collect.Iterables.filter;
+import static com.google.common.collect.Iterables.indexOf;
+import static org.apache.jackrabbit.oak.api.Tree.Status.EXISTING;
+import static org.apache.jackrabbit.oak.api.Tree.Status.MODIFIED;
+import static org.apache.jackrabbit.oak.api.Tree.Status.NEW;
+import static org.apache.jackrabbit.oak.api.Type.STRING;
+import static org.apache.jackrabbit.oak.commons.PathUtils.elements;
+import static org.apache.jackrabbit.oak.commons.PathUtils.isAbsolute;
+import static org.apache.jackrabbit.oak.spi.state.NodeStateUtils.isHidden;
 
 public class MutableTree extends AbstractTree {
 
@@ -197,7 +195,7 @@ public class MutableTree extends Abstrac
             if (parent.hasOrderableChildren()) {
                 // FIXME (OAK-842) child order not updated when parent is not accessible
                 parent.nodeBuilder.setProperty(
-                        MemoryPropertyBuilder.copy(STRING, parent.nodeBuilder.getProperty(OAK_CHILD_ORDER))
+                        PropertyBuilder.copy(STRING, parent.nodeBuilder.getProperty(OAK_CHILD_ORDER))
                                 .removeValue(name)
                                 .getPropertyState()
                 );
@@ -216,7 +214,7 @@ public class MutableTree extends Abstrac
             nodeBuilder.setChildNode(name);
             if (hasOrderableChildren()) {
                 nodeBuilder.setProperty(
-                        MemoryPropertyBuilder.copy(STRING, nodeBuilder.getProperty(OAK_CHILD_ORDER))
+                        PropertyBuilder.copy(STRING, nodeBuilder.getProperty(OAK_CHILD_ORDER))
                                 .addValue(name)
                                 .getPropertyState());
             }
@@ -386,8 +384,7 @@ public class MutableTree extends Abstrac
         for (String name : nodeBuilder.getChildNodeNames()) {
             names.add(name);
         }
-        PropertyBuilder<String> builder = MemoryPropertyBuilder.array(
-                STRING, OAK_CHILD_ORDER);
+        PropertyBuilder builder = PropertyBuilder.array(STRING, OAK_CHILD_ORDER);
         builder.setValues(names);
         nodeBuilder.setProperty(builder.getPropertyState());
     }

Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/commit/ChildOrderConflictHandler.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/commit/ChildOrderConflictHandler.java?rev=1547034&r1=1547033&r2=1547034&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/commit/ChildOrderConflictHandler.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/commit/ChildOrderConflictHandler.java Mon Dec  2 14:45:42 2013
@@ -22,10 +22,9 @@ import com.google.common.collect.Sets;
 import org.apache.jackrabbit.oak.api.PropertyState;
 import org.apache.jackrabbit.oak.api.Type;
 import org.apache.jackrabbit.oak.core.AbstractTree;
-import org.apache.jackrabbit.oak.plugins.memory.MemoryPropertyBuilder;
+import org.apache.jackrabbit.oak.util.PropertyBuilder;
 import org.apache.jackrabbit.oak.spi.commit.ConflictHandler;
 import org.apache.jackrabbit.oak.spi.state.NodeBuilder;
-import org.apache.jackrabbit.oak.spi.state.PropertyBuilder;
 
 /**
  * This conflict handler instance takes care of properly merging conflicts
@@ -77,8 +76,7 @@ public class ChildOrderConflictHandler e
 
     private static void merge(NodeBuilder parent, PropertyState ours, PropertyState theirs) {
         Set<String> theirOrder = Sets.newHashSet(theirs.getValue(Type.STRINGS));
-        PropertyBuilder<String> merged = MemoryPropertyBuilder.array(Type.STRING)
-                .assignFrom(theirs);
+        PropertyBuilder<String> merged = PropertyBuilder.array(Type.STRING).assignFrom(theirs);
 
         // Append child node names from ours that are not in theirs
         for (String ourChild : ours.getValue(Type.STRINGS)) {

Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/commit/MergingNodeStateDiff.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/commit/MergingNodeStateDiff.java?rev=1547034&r1=1547033&r2=1547034&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/commit/MergingNodeStateDiff.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/commit/MergingNodeStateDiff.java Mon Dec  2 14:45:42 2013
@@ -16,24 +16,12 @@
  */
 package org.apache.jackrabbit.oak.plugins.commit;
 
-import static org.apache.jackrabbit.oak.spi.state.ConflictAnnotatingRebaseDiff.CONFLICT;
-import static org.apache.jackrabbit.oak.spi.state.ConflictType.ADD_EXISTING_NODE;
-import static org.apache.jackrabbit.oak.spi.state.ConflictType.ADD_EXISTING_PROPERTY;
-import static org.apache.jackrabbit.oak.spi.state.ConflictType.CHANGE_CHANGED_PROPERTY;
-import static org.apache.jackrabbit.oak.spi.state.ConflictType.CHANGE_DELETED_NODE;
-import static org.apache.jackrabbit.oak.spi.state.ConflictType.CHANGE_DELETED_PROPERTY;
-import static org.apache.jackrabbit.oak.spi.state.ConflictType.DELETE_CHANGED_NODE;
-import static org.apache.jackrabbit.oak.spi.state.ConflictType.DELETE_CHANGED_PROPERTY;
-import static org.apache.jackrabbit.oak.spi.state.ConflictType.DELETE_DELETED_NODE;
-import static org.apache.jackrabbit.oak.spi.state.ConflictType.DELETE_DELETED_PROPERTY;
-
 import java.util.Map;
 
 import com.google.common.collect.ImmutableMap;
 import org.apache.jackrabbit.oak.api.PropertyState;
 import org.apache.jackrabbit.oak.api.Type;
 import org.apache.jackrabbit.oak.core.AbstractTree;
-import org.apache.jackrabbit.oak.plugins.memory.MemoryPropertyBuilder;
 import org.apache.jackrabbit.oak.spi.commit.ConflictHandler;
 import org.apache.jackrabbit.oak.spi.commit.ConflictHandler.Resolution;
 import org.apache.jackrabbit.oak.spi.state.ChildNodeEntry;
@@ -41,10 +29,21 @@ import org.apache.jackrabbit.oak.spi.sta
 import org.apache.jackrabbit.oak.spi.state.DefaultNodeStateDiff;
 import org.apache.jackrabbit.oak.spi.state.NodeBuilder;
 import org.apache.jackrabbit.oak.spi.state.NodeState;
-import org.apache.jackrabbit.oak.spi.state.PropertyBuilder;
+import org.apache.jackrabbit.oak.util.PropertyBuilder;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import static org.apache.jackrabbit.oak.spi.state.ConflictAnnotatingRebaseDiff.CONFLICT;
+import static org.apache.jackrabbit.oak.spi.state.ConflictType.ADD_EXISTING_NODE;
+import static org.apache.jackrabbit.oak.spi.state.ConflictType.ADD_EXISTING_PROPERTY;
+import static org.apache.jackrabbit.oak.spi.state.ConflictType.CHANGE_CHANGED_PROPERTY;
+import static org.apache.jackrabbit.oak.spi.state.ConflictType.CHANGE_DELETED_NODE;
+import static org.apache.jackrabbit.oak.spi.state.ConflictType.CHANGE_DELETED_PROPERTY;
+import static org.apache.jackrabbit.oak.spi.state.ConflictType.DELETE_CHANGED_NODE;
+import static org.apache.jackrabbit.oak.spi.state.ConflictType.DELETE_CHANGED_PROPERTY;
+import static org.apache.jackrabbit.oak.spi.state.ConflictType.DELETE_DELETED_NODE;
+import static org.apache.jackrabbit.oak.spi.state.ConflictType.DELETE_DELETED_PROPERTY;
+
 /**
  * MergingNodeStateDiff... TODO
  */
@@ -238,7 +237,7 @@ public final class MergingNodeStateDiff 
         target.setChildNode(name, state);
         PropertyState childOrder = target.getProperty(AbstractTree.OAK_CHILD_ORDER);
         if (childOrder != null) {
-            PropertyBuilder<String> builder = MemoryPropertyBuilder.copy(Type.STRING, childOrder);
+            PropertyBuilder builder = PropertyBuilder.copy(Type.STRING, childOrder);
             builder.addValue(name);
             target.setProperty(builder.getPropertyState());
         }
@@ -248,7 +247,7 @@ public final class MergingNodeStateDiff 
         target.getChildNode(name).remove();
         PropertyState childOrder = target.getProperty(AbstractTree.OAK_CHILD_ORDER);
         if (childOrder != null) {
-            PropertyBuilder<String> builder = MemoryPropertyBuilder.copy(Type.STRING, childOrder);
+            PropertyBuilder builder = PropertyBuilder.copy(Type.STRING, childOrder);
             builder.removeValue(name);
             target.setProperty(builder.getPropertyState());
         }

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=1547034&r1=1547033&r2=1547034&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 Mon Dec  2 14:45:42 2013
@@ -34,7 +34,7 @@ import static com.google.common.base.Pre
  * providing default implementation which correspond to a property
  * without any value.
  */
-abstract class EmptyPropertyState extends AbstractPropertyState {
+public abstract class EmptyPropertyState extends AbstractPropertyState {
 
     private final String name;
 

Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/authorization/accesscontrol/AccessControlManagerImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/authorization/accesscontrol/AccessControlManagerImpl.java?rev=1547034&r1=1547033&r2=1547034&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/authorization/accesscontrol/AccessControlManagerImpl.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/authorization/accesscontrol/AccessControlManagerImpl.java Mon Dec  2 14:45:42 2013
@@ -80,9 +80,8 @@ import org.apache.jackrabbit.oak.spi.sec
 import org.apache.jackrabbit.oak.spi.security.privilege.PrivilegeBits;
 import org.apache.jackrabbit.oak.spi.security.privilege.PrivilegeBitsProvider;
 import org.apache.jackrabbit.oak.spi.security.privilege.PrivilegeConfiguration;
-import org.apache.jackrabbit.oak.spi.state.PropertyBuilder;
 import org.apache.jackrabbit.oak.util.NodeUtil;
-import org.apache.jackrabbit.oak.util.PropertyUtil;
+import org.apache.jackrabbit.oak.util.PropertyBuilder;
 import org.apache.jackrabbit.oak.util.TreeUtil;
 import org.apache.jackrabbit.util.ISO9075;
 import org.apache.jackrabbit.util.Text;
@@ -506,7 +505,7 @@ public class AccessControlManagerImpl im
             if (mixins == null) {
                 tree.setProperty(JcrConstants.JCR_MIXINTYPES, Collections.singleton(mixinName), Type.NAMES);
             } else {
-                PropertyBuilder pb = PropertyUtil.getPropertyBuilder(Type.NAME, mixins);
+                PropertyBuilder pb = PropertyBuilder.copy(Type.NAME, mixins);
                 pb.addValue(mixinName);
                 tree.setProperty(pb.getPropertyState());
             }

Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/privilege/JcrAllCommitHook.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/privilege/JcrAllCommitHook.java?rev=1547034&r1=1547033&r2=1547034&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/privilege/JcrAllCommitHook.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/privilege/JcrAllCommitHook.java Mon Dec  2 14:45:42 2013
@@ -27,8 +27,7 @@ import org.apache.jackrabbit.oak.spi.sec
 import org.apache.jackrabbit.oak.spi.state.DefaultNodeStateDiff;
 import org.apache.jackrabbit.oak.spi.state.NodeBuilder;
 import org.apache.jackrabbit.oak.spi.state.NodeState;
-import org.apache.jackrabbit.oak.spi.state.PropertyBuilder;
-import org.apache.jackrabbit.oak.util.PropertyUtil;
+import org.apache.jackrabbit.oak.util.PropertyBuilder;
 import org.apache.jackrabbit.util.Text;
 
 /**
@@ -66,9 +65,9 @@ class JcrAllCommitHook implements PostVa
 
                 PropertyBuilder<String> propertyBuilder;
                 if (aggregates == null) {
-                    propertyBuilder = PropertyUtil.getPropertyBuilder(Type.NAME, REP_AGGREGATES, true);
+                    propertyBuilder = PropertyBuilder.create(Type.NAME, REP_AGGREGATES, true);
                 } else {
-                    propertyBuilder = PropertyUtil.getPropertyBuilder(Type.NAME, aggregates);
+                    propertyBuilder = PropertyBuilder.copy(Type.NAME, aggregates);
                 }
                 if (!propertyBuilder.hasValue(name)) {
                     propertyBuilder.addValue(name);

Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/user/MembershipProvider.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/user/MembershipProvider.java?rev=1547034&r1=1547033&r2=1547034&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/user/MembershipProvider.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/user/MembershipProvider.java Mon Dec  2 14:45:42 2013
@@ -19,10 +19,10 @@ package org.apache.jackrabbit.oak.securi
 import java.util.HashSet;
 import java.util.Iterator;
 import java.util.Set;
-
 import javax.annotation.Nonnull;
 import javax.jcr.RepositoryException;
 
+import com.google.common.collect.Iterators;
 import org.apache.jackrabbit.oak.api.PropertyState;
 import org.apache.jackrabbit.oak.api.Root;
 import org.apache.jackrabbit.oak.api.Tree;
@@ -35,8 +35,6 @@ import org.apache.jackrabbit.oak.util.Ab
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import com.google.common.collect.Iterators;
-
 /**
  * {@code MembershipProvider} implementation storing group membership information
  * with the {@code Tree} associated with a given {@link org.apache.jackrabbit.api.security.user.Group}.
@@ -115,7 +113,6 @@ class MembershipProvider extends Authori
      */
     MembershipProvider(Root root, ConfigurationParameters config) {
         super(root, config);
-
     }
 
     /**

Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/user/MembershipWriter.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/user/MembershipWriter.java?rev=1547034&r1=1547033&r2=1547034&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/user/MembershipWriter.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/user/MembershipWriter.java Mon Dec  2 14:45:42 2013
@@ -27,8 +27,7 @@ import org.apache.jackrabbit.oak.api.Tre
 import org.apache.jackrabbit.oak.api.Type;
 import org.apache.jackrabbit.oak.spi.security.user.UserConstants;
 import org.apache.jackrabbit.oak.spi.state.NodeBuilder;
-import org.apache.jackrabbit.oak.spi.state.PropertyBuilder;
-import org.apache.jackrabbit.oak.util.PropertyUtil;
+import org.apache.jackrabbit.oak.util.PropertyBuilder;
 
 import com.google.common.collect.Iterators;
 
@@ -110,9 +109,9 @@ public class MembershipWriter {
                 }
                 bestTree.setProperty(JcrConstants.JCR_PRIMARYTYPE, UserConstants.NT_REP_MEMBER_REFERENCES, NAME);
             }
-            propertyBuilder = PropertyUtil.getPropertyBuilder(Type.WEAKREFERENCE, UserConstants.REP_MEMBERS, true);
+            propertyBuilder = PropertyBuilder.create(Type.WEAKREFERENCE, UserConstants.REP_MEMBERS, true);
         } else {
-            propertyBuilder = PropertyUtil.getPropertyBuilder(Type.WEAKREFERENCE, bestProperty);
+            propertyBuilder = PropertyBuilder.copy(Type.WEAKREFERENCE, bestProperty);
         }
         propertyBuilder.addValue(memberContentId);
         bestTree.setProperty(propertyBuilder.getPropertyState());
@@ -136,7 +135,7 @@ public class MembershipWriter {
             Tree t = trees.next();
             PropertyState refs = t.getProperty(UserConstants.REP_MEMBERS);
             if (refs != null) {
-                PropertyBuilder<String> prop = PropertyUtil.getPropertyBuilder(Type.WEAKREFERENCE, refs);
+                PropertyBuilder<String> prop = PropertyBuilder.copy(Type.WEAKREFERENCE, refs);
                 if (prop.hasValue(memberContentId)) {
                     prop.removeValue(memberContentId);
                     if (prop.isEmpty()) {
@@ -175,7 +174,7 @@ public class MembershipWriter {
         int numNodes = 0;
         for (String ref: members) {
             if (prop == null) {
-                prop = PropertyUtil.getPropertyBuilder(Type.WEAKREFERENCE, UserConstants.REP_MEMBERS, true);
+                prop = PropertyBuilder.create(Type.WEAKREFERENCE, UserConstants.REP_MEMBERS, true);
             }
             prop.addValue(ref);
             count++;

Copied: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/util/PropertyBuilder.java (from r1545683, 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/util/PropertyBuilder.java?p2=jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/util/PropertyBuilder.java&p1=jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/memory/MemoryPropertyBuilder.java&r1=1545683&r2=1547034&rev=1547034&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/util/PropertyBuilder.java Mon Dec  2 14:45:42 2013
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.jackrabbit.oak.plugins.memory;
+package org.apache.jackrabbit.oak.util;
 
 import java.math.BigDecimal;
 import java.util.List;
@@ -26,7 +26,21 @@ 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.oak.spi.state.PropertyBuilder;
+import org.apache.jackrabbit.oak.plugins.memory.BinaryPropertyState;
+import org.apache.jackrabbit.oak.plugins.memory.BooleanPropertyState;
+import org.apache.jackrabbit.oak.plugins.memory.DecimalPropertyState;
+import org.apache.jackrabbit.oak.plugins.memory.DoublePropertyState;
+import org.apache.jackrabbit.oak.plugins.memory.EmptyPropertyState;
+import org.apache.jackrabbit.oak.plugins.memory.GenericPropertyState;
+import org.apache.jackrabbit.oak.plugins.memory.LongPropertyState;
+import org.apache.jackrabbit.oak.plugins.memory.MultiBinaryPropertyState;
+import org.apache.jackrabbit.oak.plugins.memory.MultiBooleanPropertyState;
+import org.apache.jackrabbit.oak.plugins.memory.MultiDecimalPropertyState;
+import org.apache.jackrabbit.oak.plugins.memory.MultiDoublePropertyState;
+import org.apache.jackrabbit.oak.plugins.memory.MultiGenericPropertyState;
+import org.apache.jackrabbit.oak.plugins.memory.MultiLongPropertyState;
+import org.apache.jackrabbit.oak.plugins.memory.MultiStringPropertyState;
+import org.apache.jackrabbit.oak.plugins.memory.StringPropertyState;
 
 import static com.google.common.base.Preconditions.checkArgument;
 import static com.google.common.base.Preconditions.checkState;
@@ -35,7 +49,7 @@ import static com.google.common.base.Pre
  * {@code PropertyBuilder} for building in memory {@code PropertyState} instances.
  * @param <T>
  */
-public class MemoryPropertyBuilder<T> implements PropertyBuilder<T> {
+public class PropertyBuilder<T> {
     private final Type<T> type;
 
     private String name;
@@ -48,7 +62,7 @@ public class MemoryPropertyBuilder<T> im
      * @param type  type of the {@code PropertyState} instances to be built.
      * @throws IllegalArgumentException if {@code type.isArray()} is {@code true}.
      */
-    public MemoryPropertyBuilder(Type<T> type) {
+    public PropertyBuilder(Type<T> type) {
         checkArgument(!type.isArray(), "type must not be array");
         this.type = type;
     }
@@ -59,8 +73,8 @@ public class MemoryPropertyBuilder<T> im
      * @param type  type of the {@code PropertyState} instances to be built.
      * @return {@code PropertyBuilder} for {@code type}
      */
-    public static <T> PropertyBuilder<T> scalar(Type<T> type) {
-        return new MemoryPropertyBuilder<T>(type);
+    public static <T> PropertyBuilder scalar(Type<T> type) {
+        return new PropertyBuilder<T>(type);
     }
 
     /**
@@ -69,8 +83,8 @@ public class MemoryPropertyBuilder<T> im
      * @param type  type of the {@code PropertyState} instances to be built.
      * @return {@code PropertyBuilder} for {@code type}
      */
-    public static <T> PropertyBuilder<T> array(Type<T> type) {
-        return new MemoryPropertyBuilder<T>(type).setArray();
+    public static <T> PropertyBuilder array(Type<T> type) {
+        return new PropertyBuilder<T>(type).setArray();
     }
 
     /**
@@ -85,7 +99,7 @@ public class MemoryPropertyBuilder<T> im
      * @param name  initial name
      * @return {@code PropertyBuilder} for {@code type}
      */
-    public static <T> PropertyBuilder<T> scalar(Type<T> type, String name) {
+    public static <T> PropertyBuilder scalar(Type<T> type, String name) {
         return scalar(type).setName(name);
     }
 
@@ -101,7 +115,7 @@ public class MemoryPropertyBuilder<T> im
      * @param name  initial name
      * @return {@code PropertyBuilder} for {@code type}
      */
-    public static <T> PropertyBuilder<T> array(Type<T> type, String name) {
+    public static <T> PropertyBuilder array(Type<T> type, String name) {
         return scalar(type).setName(name).setArray();
     }
 
@@ -111,60 +125,73 @@ public class MemoryPropertyBuilder<T> im
      * the values of {@code property}.
      * Equivalent to
      * <pre>
-     *     MemoryPropertyBuilder.create(type).assignFrom(property);
+     *     PropertyBuilder.scalar(type).assignFrom(property);
      * </pre>
+     *
      * @param type  type of the {@code PropertyState} instances to be built.
      * @param property  initial name and values
      * @return {@code PropertyBuilder} for {@code type}
      */
-    public static <T> PropertyBuilder<T> copy(Type<T> type, PropertyState property) {
+    public static <T> PropertyBuilder copy(Type<T> type, PropertyState property) {
         return scalar(type).assignFrom(property);
     }
 
-    @Override
+    /**
+     * Create a new {@code PropertyBuilder} from the specified parameters. Depending
+     * on the {@code isArray} flag this corresponds to
+     * <pre>{@link #array(org.apache.jackrabbit.oak.api.Type, String)}</pre> or
+     * <pre>{@link #scalar(org.apache.jackrabbit.oak.api.Type, String)}</pre>.
+     *
+     *
+     *
+     * @param type type of the {@code PropertyState} instances to be built.
+     * @param name the name of the state to be built.
+     * @param isArray
+     * @return {@code PropertyBuilder} for {@code type}.
+     */
+    public static <T> PropertyBuilder create(@Nonnull Type<T> type, @Nonnull String name, boolean isArray) {
+        if (isArray) {
+            return array(type, name);
+        } else {
+            return scalar(type, name);
+        }
+    }
+
     public String getName() {
         return name;
     }
 
-    @Override
     public T getValue() {
         return values.isEmpty() ? null : values.get(0);
     }
 
     @Nonnull
-    @Override
     public List<T> getValues() {
         return Lists.newArrayList(values);
     }
 
-    @Override
     public T getValue(int index) {
         return values.get(index);
     }
 
-    @Override
     public boolean hasValue(Object value) {
         return values.contains(value);
     }
 
-    @Override
     public int count() {
         return values.size();
     }
 
-    @Override
     public boolean isArray() {
         return isArray;
     }
 
-    @Override
     public boolean isEmpty() {
         return count() == 0;
     }
 
     @SuppressWarnings("unchecked")
     @Nonnull
-    @Override
     public PropertyState getPropertyState() {
         checkState(name != null, "Property has no name");
         checkState(isArray() || values.size() == 1, "Property has multiple values");
@@ -211,8 +238,7 @@ public class MemoryPropertyBuilder<T> im
 
     @SuppressWarnings("unchecked")
     @Nonnull
-    @Override
-    public PropertyBuilder<T> assignFrom(PropertyState property) {
+    public PropertyBuilder assignFrom(PropertyState property) {
         if (property != null) {
             setName(property.getName());
             if (property.isArray()) {
@@ -227,65 +253,56 @@ public class MemoryPropertyBuilder<T> im
     }
 
     @Nonnull
-    @Override
-    public PropertyBuilder<T> setName(String name) {
+    public PropertyBuilder setName(String name) {
         this.name = name;
         return this;
     }
 
     @Nonnull
-    @Override
-    public PropertyBuilder<T> setArray() {
+    public PropertyBuilder setArray() {
         isArray = true;
         return this;
     }
 
     @Nonnull
-    @Override
-    public PropertyBuilder<T> setScalar() {
+    public PropertyBuilder setScalar() {
         isArray = false;
         return this;
     }
 
     @Nonnull
-    @Override
-    public PropertyBuilder<T> setValue(T value) {
+    public PropertyBuilder setValue(T value) {
         values.clear();
         values.add(value);
         return this;
     }
 
     @Nonnull
-    @Override
-    public PropertyBuilder<T> addValue(T value) {
+    public PropertyBuilder addValue(T value) {
         values.add(value);
         return this;
     }
 
     @Nonnull
-    @Override
-    public PropertyBuilder<T> setValue(T value, int index) {
+    public PropertyBuilder setValue(T value, int index) {
         values.set(index, value);
         return this;
     }
 
     @Nonnull
-    @Override
-    public PropertyBuilder<T> setValues(Iterable<T> values) {
+    public PropertyBuilder setValues(Iterable<T> values) {
         this.values = Lists.newArrayList(values);
         return this;
     }
 
     @Nonnull
-    @Override
-    public PropertyBuilder<T> removeValue(int index) {
+    public PropertyBuilder removeValue(int index) {
         values.remove(index);
         return this;
     }
 
     @Nonnull
-    @Override
-    public PropertyBuilder<T> removeValue(Object value) {
+    public PropertyBuilder removeValue(Object value) {
         values.remove(value);
         return this;
     }

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

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

Modified: jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/memory/MemoryPropertyBuilderTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/memory/MemoryPropertyBuilderTest.java?rev=1547034&r1=1547033&r2=1547034&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/memory/MemoryPropertyBuilderTest.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/memory/MemoryPropertyBuilderTest.java Mon Dec  2 14:45:42 2013
@@ -20,7 +20,7 @@ import java.util.Arrays;
 
 import org.apache.jackrabbit.oak.api.PropertyState;
 import org.apache.jackrabbit.oak.api.Type;
-import org.apache.jackrabbit.oak.spi.state.PropertyBuilder;
+import org.apache.jackrabbit.oak.util.PropertyBuilder;
 import org.junit.Test;
 
 import static org.junit.Assert.assertEquals;
@@ -29,7 +29,7 @@ public class MemoryPropertyBuilderTest {
 
     @Test
     public void testStringProperty() {
-        PropertyBuilder<String> builder = MemoryPropertyBuilder.scalar(Type.STRING);
+        PropertyBuilder builder = PropertyBuilder.scalar(Type.STRING);
         builder.setName("foo").setValue("bar");
         assertEquals(StringPropertyState.stringProperty("foo", "bar"),
                 builder.getPropertyState());
@@ -41,7 +41,7 @@ public class MemoryPropertyBuilderTest {
 
     @Test
     public void testLongProperty() {
-        PropertyBuilder<Long> builder = MemoryPropertyBuilder.scalar(Type.LONG);
+        PropertyBuilder builder = PropertyBuilder.scalar(Type.LONG);
         builder.setName("foo").setValue(42L);
         assertEquals(LongPropertyState.createLongProperty("foo", 42L),
                 builder.getPropertyState());
@@ -53,7 +53,7 @@ public class MemoryPropertyBuilderTest {
 
     @Test
     public void testStringsProperty() {
-        PropertyBuilder<String> builder = MemoryPropertyBuilder.array(Type.STRING);
+        PropertyBuilder builder = PropertyBuilder.array(Type.STRING);
         builder.setName("foo")
                 .addValue("one")
                 .addValue("two");
@@ -74,7 +74,7 @@ public class MemoryPropertyBuilderTest {
 
     @Test
     public void testDateProperty() {
-        PropertyBuilder<String> builder = MemoryPropertyBuilder.array(Type.DATE);
+        PropertyBuilder builder = PropertyBuilder.array(Type.DATE);
         String date1 = "1970-01-01T00:00:00.000Z";
         String date2 = "1971-01-01T00:00:00.000Z";
         builder.setName("foo")
@@ -98,7 +98,7 @@ public class MemoryPropertyBuilderTest {
     @Test
     public void testAssignFromLong() {
         PropertyState source = LongPropertyState.createLongProperty("foo", 42L);
-        PropertyBuilder<String> builder = MemoryPropertyBuilder.scalar(Type.STRING);
+        PropertyBuilder builder = PropertyBuilder.scalar(Type.STRING);
         builder.assignFrom(source);
         assertEquals(StringPropertyState.stringProperty("foo", "42"),
                 builder.getPropertyState());
@@ -107,7 +107,7 @@ public class MemoryPropertyBuilderTest {
     @Test
     public void testAssignFromString() {
         PropertyState source = StringPropertyState.stringProperty("foo", "42");
-        PropertyBuilder<Long> builder = MemoryPropertyBuilder.scalar(Type.LONG);
+        PropertyBuilder builder = PropertyBuilder.scalar(Type.LONG);
         builder.assignFrom(source);
         assertEquals(LongPropertyState.createLongProperty("foo", 42L),
                 builder.getPropertyState());
@@ -117,7 +117,7 @@ public class MemoryPropertyBuilderTest {
     public void testAssignFromDate() {
         String date = "1970-01-01T00:00:00.000Z";
         PropertyState source = GenericPropertyState.dateProperty("foo", date);
-        PropertyBuilder<String> builder = MemoryPropertyBuilder.scalar(Type.DATE);
+        PropertyBuilder builder = PropertyBuilder.scalar(Type.DATE);
         builder.assignFrom(source);
         assertEquals(source, builder.getPropertyState());
     }
@@ -125,14 +125,14 @@ public class MemoryPropertyBuilderTest {
     @Test(expected = NumberFormatException.class)
     public void testAssignFromStringNumberFormatException() {
         PropertyState source = StringPropertyState.stringProperty("foo", "bar");
-        PropertyBuilder<Long> builder = MemoryPropertyBuilder.scalar(Type.LONG);
+        PropertyBuilder builder = PropertyBuilder.scalar(Type.LONG);
         builder.assignFrom(source);
     }
 
     @Test
     public void testAssignFromLongs() {
         PropertyState source = MultiLongPropertyState.createLongProperty("foo", Arrays.asList(1L, 2L, 3L));
-        PropertyBuilder<String> builder = MemoryPropertyBuilder.scalar(Type.STRING);
+        PropertyBuilder builder = PropertyBuilder.scalar(Type.STRING);
         builder.assignFrom(source);
         assertEquals(MultiStringPropertyState.stringProperty("foo", Arrays.asList("1", "2", "3")),
                 builder.getPropertyState());
@@ -141,7 +141,7 @@ public class MemoryPropertyBuilderTest {
     @Test
     public void testAssignFromStrings() {
         PropertyState source = MultiStringPropertyState.stringProperty("foo", Arrays.asList("1", "2", "3"));
-        PropertyBuilder<Long> builder = MemoryPropertyBuilder.scalar(Type.LONG);
+        PropertyBuilder builder = PropertyBuilder.scalar(Type.LONG);
         builder.assignFrom(source);
         assertEquals(MultiLongPropertyState.createLongProperty("foo", Arrays.asList(1L, 2L, 3L)),
                 builder.getPropertyState());
@@ -152,7 +152,7 @@ public class MemoryPropertyBuilderTest {
         String date1 = "1970-01-01T00:00:00.000Z";
         String date2 = "1971-01-01T00:00:00.000Z";
         PropertyState source = MultiGenericPropertyState.dateProperty("foo", Arrays.asList(date1, date2));
-        PropertyBuilder<String> builder = MemoryPropertyBuilder.scalar(Type.DATE);
+        PropertyBuilder builder = PropertyBuilder.scalar(Type.DATE);
         builder.assignFrom(source);
         assertEquals(source, builder.getPropertyState());
     }
@@ -160,7 +160,7 @@ public class MemoryPropertyBuilderTest {
     @Test
     public void testAssignInvariant() {
         PropertyState source = MultiStringPropertyState.stringProperty("source", Arrays.asList("1", "2", "3"));
-        PropertyBuilder<String> builder = MemoryPropertyBuilder.scalar(Type.STRING);
+        PropertyBuilder builder = PropertyBuilder.scalar(Type.STRING);
         builder.assignFrom(source);
         assertEquals(source, builder.getPropertyState());
     }

Modified: jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/session/ItemImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/session/ItemImpl.java?rev=1547034&r1=1547033&r2=1547034&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/session/ItemImpl.java (original)
+++ jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/session/ItemImpl.java Mon Dec  2 14:45:42 2013
@@ -41,7 +41,7 @@ import org.apache.jackrabbit.oak.jcr.del
 import org.apache.jackrabbit.oak.jcr.delegate.SessionDelegate;
 import org.apache.jackrabbit.oak.jcr.session.operation.ItemOperation;
 import org.apache.jackrabbit.oak.jcr.session.operation.SessionOperation;
-import org.apache.jackrabbit.oak.plugins.memory.MemoryPropertyBuilder;
+import org.apache.jackrabbit.oak.util.PropertyBuilder;
 import org.apache.jackrabbit.oak.plugins.nodetype.write.ReadWriteNodeTypeManager;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -378,7 +378,7 @@ abstract class ItemImpl<T extends ItemDe
             if (base == UNDEFINED) {
                 base = STRING;
             }
-            return MemoryPropertyBuilder.array(base)
+            return PropertyBuilder.array(base)
                     .setName(oakName).getPropertyState();
         }
         if (type == UNDEFINEDS) {