You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jackrabbit.apache.org by tr...@apache.org on 2004/10/14 15:41:53 UTC

svn commit: rev 54784 - in incubator/jackrabbit/trunk/src/java/org/apache/jackrabbit/core: . version

Author: tripod
Date: Thu Oct 14 06:41:53 2004
New Revision: 54784

Modified:
   incubator/jackrabbit/trunk/src/java/org/apache/jackrabbit/core/NodeImpl.java
   incubator/jackrabbit/trunk/src/java/org/apache/jackrabbit/core/version/InternalFrozenNode.java
Log:
- Checkin did not work if node has unreferenceable child node with OPV=Copy

Modified: incubator/jackrabbit/trunk/src/java/org/apache/jackrabbit/core/NodeImpl.java
==============================================================================
--- incubator/jackrabbit/trunk/src/java/org/apache/jackrabbit/core/NodeImpl.java	(original)
+++ incubator/jackrabbit/trunk/src/java/org/apache/jackrabbit/core/NodeImpl.java	Thu Oct 14 06:41:53 2004
@@ -2666,11 +2666,11 @@
     void restoreFrozenState(InternalFrozenNode freeze, VersionSelector vsel)
             throws RepositoryException {
         // check uuid
-        if (!isNodeType(NodeTypeRegistry.MIX_REFERENCEABLE)) {
-            throw new ItemExistsException("Unable to restore version of " + safeGetJCRPath() + ". Not referenceable.");
-        }
-        if (!freeze.getFrozenUUID().equals(getUUID())) {
-            throw new ItemExistsException("Unable to restore version of " + safeGetJCRPath() + ". UUID changed.");
+        if (isNodeType(NodeTypeRegistry.MIX_REFERENCEABLE)) {
+            String uuid = freeze.getFrozenUUID();
+            if (uuid!=null && !uuid.equals(getUUID())) {
+                throw new ItemExistsException("Unable to restore version of " + safeGetJCRPath() + ". UUID changed.");
+            }
         }
         // check primarty type
         if (!freeze.getFrozenPrimaryType().equals(nodeType.getQName())) {

Modified: incubator/jackrabbit/trunk/src/java/org/apache/jackrabbit/core/version/InternalFrozenNode.java
==============================================================================
--- incubator/jackrabbit/trunk/src/java/org/apache/jackrabbit/core/version/InternalFrozenNode.java	(original)
+++ incubator/jackrabbit/trunk/src/java/org/apache/jackrabbit/core/version/InternalFrozenNode.java	Thu Oct 14 06:41:53 2004
@@ -55,17 +55,17 @@
     /**
      * the frozen uuid of the original node
      */
-    private String frozenUUID;
+    private String frozenUUID=null;
 
     /**
      * the frozen primary type of the orginal node
      */
-    private QName frozenPrimaryType;
+    private QName frozenPrimaryType=null;
 
     /**
      * the frozen list of mixin types of the original node
      */
-    private QName[] frozenMixinTypes;
+    private QName[] frozenMixinTypes=null;
 
     /**
      * Creates a new frozen node based on the given persistance node.
@@ -76,29 +76,28 @@
     protected InternalFrozenNode(PersistentNode node) throws RepositoryException {
         this.node = node;
 
-        // init the internal properties
-        frozenUUID = node.getPropertyValue(VersionManager.PROPNAME_FROZEN_UUID).internalValue().toString();
-        frozenPrimaryType = (QName) node.getPropertyValue(VersionManager.PROPNAME_FROZEN_PRIMARY_TYPE).internalValue();
-        InternalValue[] values = node.getPropertyValues(VersionManager.PROPNAME_FROZEN_MIXIN_TYPES);
-        if (values == null) {
-            frozenMixinTypes = new QName[0];
-        } else {
-            frozenMixinTypes = new QName[values.length];
-            for (int i = 0; i < values.length; i++) {
-                frozenMixinTypes[i] = (QName) values[i].internalValue();
-            }
-        }
         // init the frozen properties
         PersistentProperty[] props = node.getProperties();
         List propList = new ArrayList();
         for (int i = 0; i < props.length; i++) {
             PersistentProperty prop = props[i];
             if (prop.getName().equals(VersionManager.PROPNAME_FROZEN_UUID)) {
-                // already set
+                // special property
+                frozenUUID = node.getPropertyValue(VersionManager.PROPNAME_FROZEN_UUID).internalValue().toString();
             } else if (prop.getName().equals(VersionManager.PROPNAME_FROZEN_PRIMARY_TYPE)) {
-                // already set
+                // special property
+                frozenPrimaryType = (QName) node.getPropertyValue(VersionManager.PROPNAME_FROZEN_PRIMARY_TYPE).internalValue();
             } else if (prop.getName().equals(VersionManager.PROPNAME_FROZEN_MIXIN_TYPES)) {
-                // already set
+                // special property
+                InternalValue[] values = node.getPropertyValues(VersionManager.PROPNAME_FROZEN_MIXIN_TYPES);
+                if (values == null) {
+                    frozenMixinTypes = new QName[0];
+                } else {
+                    frozenMixinTypes = new QName[values.length];
+                    for (int j = 0; j < values.length; j++) {
+                        frozenMixinTypes[j] = (QName) values[j].internalValue();
+                    }
+                }
             } else if (prop.getName().equals(ItemImpl.PROPNAME_PRIMARYTYPE)) {
                 // ignore
             } else if (prop.getName().equals(ItemImpl.PROPNAME_UUID)) {
@@ -109,6 +108,13 @@
         }
         frozenProperties = (PersistentProperty[]) propList.toArray(new PersistentProperty[propList.size()]);
 
+        // do some checks
+        if (frozenMixinTypes==null) {
+            frozenMixinTypes=new QName[0];
+        }
+        if (frozenPrimaryType==null) {
+            throw new RepositoryException("Illegal frozen node. Must have 'frozenPrimaryType'");
+        }
         // init the frozen child nodes
         PersistentNode[] childNodes = node.getChildNodes();
         frozenChildNodes = new InternalFreeze[childNodes.length];