Return-Path: Delivered-To: apmail-incubator-jackrabbit-commits-archive@www.apache.org Received: (qmail 7242 invoked from network); 14 Oct 2004 13:45:08 -0000 Received: from hermes.apache.org (HELO mail.apache.org) (209.237.227.199) by minotaur-2.apache.org with SMTP; 14 Oct 2004 13:45:08 -0000 Received: (qmail 41159 invoked by uid 500); 14 Oct 2004 13:42:03 -0000 Mailing-List: contact jackrabbit-commits-help@incubator.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: jackrabbit-dev@incubator.apache.org Delivered-To: mailing list jackrabbit-commits@incubator.apache.org Received: (qmail 40997 invoked by uid 500); 14 Oct 2004 13:41:58 -0000 Delivered-To: apmail-incubator-jackrabbit-cvs@incubator.apache.org Received: (qmail 40933 invoked by uid 99); 14 Oct 2004 13:41:58 -0000 X-ASF-Spam-Status: No, hits=-10.0 required=10.0 tests=ALL_TRUSTED,NO_REAL_NAME X-Spam-Check-By: apache.org Received: from [209.237.227.194] (HELO minotaur.apache.org) (209.237.227.194) by apache.org (qpsmtpd/0.28) with SMTP; Thu, 14 Oct 2004 06:41:57 -0700 Received: (qmail 5543 invoked by uid 65534); 14 Oct 2004 13:41:53 -0000 Date: 14 Oct 2004 13:41:53 -0000 Message-ID: <20041014134153.5540.qmail@minotaur.apache.org> From: tripod@apache.org To: jackrabbit-cvs@incubator.apache.org Subject: svn commit: rev 54784 - in incubator/jackrabbit/trunk/src/java/org/apache/jackrabbit/core: . version X-Virus-Checked: Checked X-Spam-Rating: minotaur-2.apache.org 1.6.2 0/1000/N 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];