You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jackrabbit.apache.org by mr...@apache.org on 2008/03/18 17:17:13 UTC

svn commit: r638430 - in /jackrabbit/trunk/jackrabbit-core/src: main/java/org/apache/jackrabbit/core/version/ test/java/org/apache/jackrabbit/core/version/

Author: mreutegg
Date: Tue Mar 18 09:17:07 2008
New Revision: 638430

URL: http://svn.apache.org/viewvc?rev=638430&view=rev
Log:
JCR-1481: VersionHistory.removeVersion() does not throw ReferentialIntegrityException

Modified:
    jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/version/AbstractVersionManager.java
    jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/version/InternalVersionHistoryImpl.java
    jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/version/VersionManagerImpl.java
    jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/version/XAVersionManager.java
    jackrabbit/trunk/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/version/CheckinRemoveVersionTest.java
    jackrabbit/trunk/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/version/TestAll.java

Modified: jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/version/AbstractVersionManager.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/version/AbstractVersionManager.java?rev=638430&r1=638429&r2=638430&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/version/AbstractVersionManager.java (original)
+++ jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/version/AbstractVersionManager.java Tue Mar 18 09:17:07 2008
@@ -32,8 +32,6 @@
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import java.util.List;
-
 import javax.jcr.RepositoryException;
 import javax.jcr.Session;
 import javax.jcr.Value;
@@ -287,16 +285,20 @@
     protected abstract boolean hasItem(NodeId id);
 
     /**
-     * Returns the item references that reference the given version item.
-     * Subclass responsiblity.
+     * Checks if there are item references (from outside the version storage)
+     * that reference the given version item. Subclass responsiblity.
      * <p/>
      * Please note, that the overridden method must aquire the readlock before
      * reading the state manager.
      *
      * @param item version item
-     * @return list of item references, may be empty.
+     * @return <code>true</code> if there are item references from outside the
+     *         version storage; <code>false</code> otherwise.
+     * @throws RepositoryException if an error occurs while reading from the
+     *                             repository.
      */
-    protected abstract List getItemReferences(InternalVersionItem item);
+    protected abstract boolean hasItemReferences(InternalVersionItem item)
+            throws RepositoryException;
 
     /**
      * Creates a new Version History.

Modified: jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/version/InternalVersionHistoryImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/version/InternalVersionHistoryImpl.java?rev=638430&r1=638429&r2=638430&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/version/InternalVersionHistoryImpl.java (original)
+++ jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/version/InternalVersionHistoryImpl.java Tue Mar 18 09:17:07 2008
@@ -37,7 +37,6 @@
 import java.util.Calendar;
 import java.util.HashMap;
 import java.util.Iterator;
-import java.util.List;
 import java.util.Set;
 
 /**
@@ -361,8 +360,7 @@
             throw new VersionException(msg);
         }
         // check if any references (from outside the version storage) exist on this version
-        List refs = vMgr.getItemReferences(v);
-        if (!refs.isEmpty()) {
+        if (vMgr.hasItemReferences(v)) {
             throw new ReferentialIntegrityException("Unable to remove version. At least once referenced.");
         }
 

Modified: jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/version/VersionManagerImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/version/VersionManagerImpl.java?rev=638430&r1=638429&r2=638430&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/version/VersionManagerImpl.java (original)
+++ jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/version/VersionManagerImpl.java Tue Mar 18 09:17:07 2008
@@ -41,6 +41,7 @@
 import org.apache.jackrabbit.core.state.PropertyState;
 import org.apache.jackrabbit.core.state.SharedItemStateManager;
 import org.apache.jackrabbit.core.state.ISMLocking;
+import org.apache.jackrabbit.core.state.NoSuchItemStateException;
 import org.apache.jackrabbit.core.value.InternalValue;
 import org.apache.jackrabbit.core.virtual.VirtualItemStateProvider;
 import org.apache.jackrabbit.spi.Path;
@@ -52,7 +53,6 @@
 import org.slf4j.LoggerFactory;
 
 import java.util.Collection;
-import java.util.Collections;
 import java.util.Iterator;
 import java.util.List;
 
@@ -398,13 +398,16 @@
     /**
      * {@inheritDoc}
      */
-    protected List getItemReferences(InternalVersionItem item) {
+    protected boolean hasItemReferences(InternalVersionItem item)
+            throws RepositoryException {
         try {
             NodeReferences refs = stateMgr.getNodeReferences(
                     new NodeReferencesId(item.getId()));
-            return refs.getReferences();
+            return refs.hasReferences();
+        } catch (NoSuchItemStateException e) {
+            return false;
         } catch (ItemStateException e) {
-            return Collections.EMPTY_LIST;
+            throw new RepositoryException(e);
         }
     }
 

Modified: jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/version/XAVersionManager.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/version/XAVersionManager.java?rev=638430&r1=638429&r2=638430&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/version/XAVersionManager.java (original)
+++ jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/version/XAVersionManager.java Tue Mar 18 09:17:07 2008
@@ -48,7 +48,6 @@
 import javax.jcr.version.VersionException;
 import javax.jcr.version.VersionHistory;
 import java.util.HashMap;
-import java.util.List;
 import java.util.Map;
 
 /**
@@ -343,8 +342,9 @@
     /**
      * {@inheritDoc}
      */
-    protected List getItemReferences(InternalVersionItem item) {
-        return vMgr.getItemReferences(item);
+    protected boolean hasItemReferences(InternalVersionItem item)
+            throws RepositoryException {
+        return session.getNodeById(item.getId()).getReferences().hasNext();
     }
 
     /**

Modified: jackrabbit/trunk/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/version/CheckinRemoveVersionTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/version/CheckinRemoveVersionTest.java?rev=638430&r1=638429&r2=638430&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/version/CheckinRemoveVersionTest.java (original)
+++ jackrabbit/trunk/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/version/CheckinRemoveVersionTest.java Tue Mar 18 09:17:07 2008
@@ -36,6 +36,7 @@
         tx.begin();
         try {
             Version v10 = n.checkin();
+            assertTrue("Version.getReferences() must return base version", v10.getReferences().hasNext());
             try {
                 n.getVersionHistory().removeVersion(v10.getName());
                 fail("VersionHistory.removeVersion() must throw ReferentialIntegrityException when" +

Modified: jackrabbit/trunk/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/version/TestAll.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/version/TestAll.java?rev=638430&r1=638429&r2=638430&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/version/TestAll.java (original)
+++ jackrabbit/trunk/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/version/TestAll.java Tue Mar 18 09:17:07 2008
@@ -32,8 +32,7 @@
      */
     public static Test suite() {
         TestSuite suite = new TestSuite("Version tests");
-        // disabled because JCR-1481 is not yet fixed
-        //suite.addTestSuite(CheckinRemoveVersionTest.class);
+        suite.addTestSuite(CheckinRemoveVersionTest.class);
         suite.addTestSuite(RemoveVersionLabelTest.class);
         suite.addTestSuite(RestoreTest.class);
         suite.addTestSuite(VersionIteratorImplTest.class);