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 mr...@apache.org on 2013/09/11 10:07:01 UTC

svn commit: r1521755 - /jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/version/VersionableState.java

Author: mreutegg
Date: Wed Sep 11 08:07:00 2013
New Revision: 1521755

URL: http://svn.apache.org/r1521755
Log:
OAK-168: Basic JCR VersionManager support

Modified:
    jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/version/VersionableState.java

Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/version/VersionableState.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/version/VersionableState.java?rev=1521755&r1=1521754&r2=1521755&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/version/VersionableState.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/version/VersionableState.java Wed Sep 11 08:07:00 2013
@@ -62,9 +62,12 @@ import org.apache.jackrabbit.oak.api.Pro
 import org.apache.jackrabbit.oak.api.Type;
 import org.apache.jackrabbit.oak.core.IdentifierManager;
 import org.apache.jackrabbit.oak.core.ImmutableTree;
+import org.apache.jackrabbit.oak.plugins.memory.EmptyNodeState;
+import org.apache.jackrabbit.oak.plugins.memory.MemoryNodeBuilder;
 import org.apache.jackrabbit.oak.plugins.memory.PropertyStates;
 import org.apache.jackrabbit.oak.plugins.nodetype.ReadOnlyNodeTypeManager;
 import org.apache.jackrabbit.oak.spi.state.NodeBuilder;
+import org.apache.jackrabbit.oak.spi.state.NodeState;
 import org.apache.jackrabbit.oak.util.TODO;
 
 /**
@@ -537,8 +540,18 @@ class VersionableState {
     private int getOPV(NodeBuilder parent, NodeBuilder child, String childName)
             throws RepositoryException {
         ImmutableTree parentTree = new ImmutableTree(parent.getNodeState());
+        NodeState childState;
+        if (NT_FROZENNODE.equals(child.getName(JCR_PRIMARYTYPE))) {
+            // need to translate into a regular node to get proper OPV value
+            NodeBuilder builder = new MemoryNodeBuilder(EmptyNodeState.EMPTY_NODE);
+            builder.setProperty(JCR_PRIMARYTYPE, child.getName(JCR_FROZENPRIMARYTYPE), Type.NAME);
+            builder.setProperty(JCR_MIXINTYPES, child.getNames(JCR_MIXINTYPES), Type.NAMES);
+            childState = builder.getNodeState();
+        } else {
+            childState = child.getNodeState();
+        }
         ImmutableTree childTree = new ImmutableTree(
-                parentTree, childName, child.getNodeState());
+                parentTree, childName, childState);
         return ntMgr.getDefinition(parentTree, childTree).getOnParentVersion();
     }