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/11/06 09:28:21 UTC

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

Author: tripod
Date: Sat Nov  6 00:28:19 2004
New Revision: 56733

Modified:
   incubator/jackrabbit/trunk/src/java/org/apache/jackrabbit/core/NodeImpl.java
   incubator/jackrabbit/trunk/src/java/org/apache/jackrabbit/core/nodetype/builtin_nodetypes.xml
Log:
- restore did not remove empty properties

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	Sat Nov  6 00:28:19 2004
@@ -31,6 +31,7 @@
 import javax.jcr.version.Version;
 import javax.jcr.version.VersionException;
 import javax.jcr.version.VersionHistory;
+import javax.jcr.version.OnParentVersionAction;
 import java.io.InputStream;
 import java.util.*;
 
@@ -208,7 +209,7 @@
         }
         // check if versioning allows write
         if (!safeIsCheckedOut()) {
-            String msg = "Cannot set the value of a property of a checked-in node " + safeGetJCRPath();
+            String msg = "Cannot set the value of a property of a checked-in node " + safeGetJCRPath() + "/" + name.toString();
             log.error(msg);
             throw new VersionException(msg);
         }
@@ -2572,11 +2573,12 @@
         // 2. N�s jcr:baseVersion property will be changed to point to V.
         internalSetProperty(VersionManager.PROPNAME_BASE_VERSION, InternalValue.create(new UUID(version.getId())));
 
+        // 4. N's jcr:predecessor property is set to null
+        internalSetProperty(VersionManager.PROPNAME_PREDECESSORS, new InternalValue[0]);
+
         // 3. N�s jcr:isCheckedOut property is set to false.
         internalSetProperty(VersionManager.PROPNAME_IS_CHECKED_OUT, InternalValue.create(false));
 
-        // 4. N's jcr:predecessor property is set to null
-        internalSetProperty(VersionManager.PROPNAME_PREDECESSORS, new InternalValue[0]);
     }
 
 
@@ -2632,8 +2634,10 @@
 
         // copy frozen properties
         PersistentProperty[] props = freeze.getFrozenProperties();
+        HashSet propNames = new HashSet();
         for (int i = 0; i < props.length; i++) {
             PersistentProperty prop = props[i];
+            propNames.add(prop.getName());
             if (prop.getValues().length == 1) {
                 try {
                     internalSetProperty(props[i].getName(), prop.getValues()[0]);
@@ -2643,6 +2647,23 @@
                 }
             }
             internalSetProperty(props[i].getName(), prop.getValues());
+        }
+        // remove properties that do not exist the the frozen representation
+        PropertyIterator piter = getProperties();
+        while (piter.hasNext()) {
+            PropertyImpl prop = (PropertyImpl) piter.nextProperty();
+            // ignore some props that are not well guarded by the OPV
+            if (prop.getQName().equals(VersionManager.PROPNAME_VERSION_HISTORY)) {
+                continue;
+            } else if (prop.getQName().equals(VersionManager.PROPNAME_PREDECESSORS)) {
+                continue;
+            }
+            if (prop.getDefinition().getOnParentVersion()==OnParentVersionAction.COPY
+                    || prop.getDefinition().getOnParentVersion()==OnParentVersionAction.VERSION) {
+                if (!propNames.contains(prop.getQName())) {
+                    removeChildProperty(prop.getQName());
+                }
+            }
         }
 
         // restore the frozen nodes

Modified: incubator/jackrabbit/trunk/src/java/org/apache/jackrabbit/core/nodetype/builtin_nodetypes.xml
==============================================================================
--- incubator/jackrabbit/trunk/src/java/org/apache/jackrabbit/core/nodetype/builtin_nodetypes.xml	(original)
+++ incubator/jackrabbit/trunk/src/java/org/apache/jackrabbit/core/nodetype/builtin_nodetypes.xml	Sat Nov  6 00:28:19 2004
@@ -247,7 +247,7 @@
         <supertypes>
             <supertype>mix:referenceable</supertype>
         </supertypes>
-        <propertyDef name="jcr:versionHistory" type="Reference" autoCreate="false" mandatory="false" onParentVersion="COPY" protected="true" primaryItem="false" multiple="false">
+        <propertyDef name="jcr:versionHistory" type="Reference" autoCreate="false" mandatory="false" onParentVersion="IGNORE" protected="true" primaryItem="false" multiple="false">
             <valueConstraints>
                 <valueConstraint>nt:versionHistory</valueConstraint>
             </valueConstraints>