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 08:30:58 UTC

svn commit: r1521744 - in /jackrabbit/oak/trunk: oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/version/ oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/version/ oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/version/

Author: mreutegg
Date: Wed Sep 11 06:30:58 2013
New Revision: 1521744

URL: http://svn.apache.org/r1521744
Log:
OAK-999: Version creates frozenNode children with orignial NoteType instead of frozenNode

Modified:
    jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/version/VersionableState.java
    jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/version/VersionManagerImpl.java
    jackrabbit/oak/trunk/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/version/VersionTest.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=1521744&r1=1521743&r2=1521744&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 06:30:58 2013
@@ -154,25 +154,32 @@ class VersionableState {
     }
 
     /**
-     * Creates a frozen node under the version and initializes it with the basic
+     * Creates a frozen node and initializes it with the basic
      * frozen properties (jcr:frozenPrimaryType, jcr:frozenMixinTypes and
-     * jcr:frozenUuid) from the given node. The node must be referenceable.
+     * jcr:frozenUuid) from the given node.
      *
      * @return this versionable state.
      */
     private VersionableState initFrozen(NodeBuilder frozen,
-                                        NodeBuilder referenceable) {
+                                        NodeBuilder node) {
         // initialize jcr:frozenNode
         frozen.setProperty(JCR_UUID, IdentifierManager.generateUUID(), Type.STRING);
         frozen.setProperty(JCR_PRIMARYTYPE, NT_FROZENNODE, Type.NAME);
         List<String> mixinTypes;
-        if (referenceable.hasProperty(JCR_MIXINTYPES)) {
-            mixinTypes = Lists.newArrayList(referenceable.getNames(JCR_MIXINTYPES));
+        if (node.hasProperty(JCR_MIXINTYPES)) {
+            mixinTypes = Lists.newArrayList(node.getNames(JCR_MIXINTYPES));
         } else {
             mixinTypes = Collections.emptyList();
         }
-        frozen.setProperty(JCR_FROZENUUID, uuidFromNode(referenceable), Type.STRING);
-        frozen.setProperty(JCR_FROZENPRIMARYTYPE, primaryTypeOf(referenceable), Type.NAME);
+        String id;
+        if (node.hasProperty(JCR_UUID)) {
+            id = uuidFromNode(node);
+        } else {
+            // TODO: use identifier
+            id = "";
+        }
+        frozen.setProperty(JCR_FROZENUUID, id, Type.STRING);
+        frozen.setProperty(JCR_FROZENPRIMARYTYPE, primaryTypeOf(node), Type.NAME);
         if (mixinTypes.isEmpty()) {
             frozen.removeProperty(JCR_FROZENMIXINTYPES);
         } else {
@@ -311,9 +318,10 @@ class VersionableState {
                                           @Nonnull NodeBuilder dest) {
         dest.setProperty(JCR_PRIMARYTYPE,
                 frozen.getName(JCR_FROZENPRIMARYTYPE), Type.NAME);
-        dest.setProperty(JCR_UUID,
-                frozen.getProperty(JCR_FROZENUUID).getValue(Type.STRING),
-                Type.STRING);
+        String id = frozen.getProperty(JCR_FROZENUUID).getValue(Type.STRING);
+        if (id.length() > 0) {
+            dest.setProperty(JCR_UUID, id, Type.STRING);
+        }
         if (frozen.hasProperty(JCR_FROZENMIXINTYPES)) {
             dest.setProperty(JCR_MIXINTYPES,
                     frozen.getNames(JCR_FROZENMIXINTYPES), Type.NAMES);
@@ -483,12 +491,8 @@ class VersionableState {
     private void copy(NodeBuilder src,
                       NodeBuilder dest)
             throws RepositoryException, CommitFailedException {
-        if (isReferenceable(src)) {
-            initFrozen(dest, src);
-            copyProperties(src, dest, OPVForceCopy.INSTANCE, true);
-        } else {
-            copyProperties(src, dest, OPVForceCopy.INSTANCE, false);
-        }
+        initFrozen(dest, src);
+        copyProperties(src, dest, OPVForceCopy.INSTANCE, true);
         for (String name : src.getChildNodeNames()) {
             NodeBuilder child = src.getChildNode(name);
             copy(child, dest.child(name));

Modified: jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/version/VersionManagerImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/version/VersionManagerImpl.java?rev=1521744&r1=1521743&r2=1521744&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/version/VersionManagerImpl.java (original)
+++ jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/version/VersionManagerImpl.java Wed Sep 11 06:30:58 2013
@@ -422,7 +422,10 @@ public class VersionManagerImpl implemen
             protected void entering(Node node, int level)
                     throws RepositoryException {
                 if (node.isNodeType(NodeType.NT_FROZEN_NODE)) {
-                    uuids.add(node.getProperty(Property.JCR_FROZEN_UUID).getString());
+                    String id = node.getProperty(Property.JCR_FROZEN_UUID).getString();
+                    if (id.length() > 0) {
+                        uuids.add(id);
+                    }
                 } else if (node.isNodeType(NodeType.NT_VERSIONED_CHILD)) {
                     Node history = node.getProperty(
                             Property.JCR_CHILD_VERSION_HISTORY).getNode();

Modified: jackrabbit/oak/trunk/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/version/VersionTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/version/VersionTest.java?rev=1521744&r1=1521743&r2=1521744&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/version/VersionTest.java (original)
+++ jackrabbit/oak/trunk/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/version/VersionTest.java Wed Sep 11 06:30:58 2013
@@ -72,4 +72,16 @@ public class VersionTest extends Abstrac
         assertTrue(rows.hasNext());
         assertTrue(rows.nextRow().getNode() instanceof Version);
     }
+
+    public void testFrozenNode() throws RepositoryException {
+        Node n = testRootNode.addNode(nodeName1, testNodeType);
+        n.addMixin(mixVersionable);
+        Node child = n.addNode(nodeName2, ntUnstructured);
+        superuser.save();
+        VersionManager vMgr = superuser.getWorkspace().getVersionManager();
+        vMgr.checkpoint(n.getPath());
+        Version v = vMgr.getBaseVersion(n.getPath());
+        Node frozenChild = v.getFrozenNode().getNode(child.getName());
+        assertEquals(ntFrozenNode, frozenChild.getPrimaryNodeType().getName());
+    }
 }