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 11:17:32 UTC
svn commit: r638303 - 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 03:17:26 2008
New Revision: 638303
URL: http://svn.apache.org/viewvc?rev=638303&view=rev
Log:
JCR-1476: Restore to base version throws NullPointerException
Added:
jackrabbit/trunk/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/version/TestAll.java (with props)
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/InternalVersion.java
jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/version/InternalVersionImpl.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/RestoreTest.java
jackrabbit/trunk/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/version/VersionIteratorImplTest.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=638303&r1=638302&r2=638303&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 03:17:26 2008
@@ -21,6 +21,7 @@
import org.apache.jackrabbit.core.NodeId;
import org.apache.jackrabbit.core.NodeImpl;
import org.apache.jackrabbit.core.SessionImpl;
+import org.apache.jackrabbit.core.nodetype.NodeTypeRegistry;
import org.apache.jackrabbit.core.state.ItemStateException;
import org.apache.jackrabbit.core.state.LocalItemStateManager;
import org.apache.jackrabbit.core.state.NodeState;
@@ -59,6 +60,11 @@
protected LocalItemStateManager stateMgr;
/**
+ * Node type registry.
+ */
+ protected final NodeTypeRegistry ntReg;
+
+ /**
* Persistent root node of the version histories.
*/
protected NodeStateEx historyRoot;
@@ -78,6 +84,10 @@
}
};
+ public AbstractVersionManager(NodeTypeRegistry ntReg) {
+ this.ntReg = ntReg;
+ }
+
//-------------------------------------------------------< VersionManager >
/**
@@ -528,5 +538,43 @@
* @param item
*/
protected void itemDiscarded(InternalVersionItem item) {
+ }
+
+ /**
+ * Creates an {@link InternalVersionItem} based on the {@link NodeState}
+ * identified by <code>id</code>.
+ *
+ * @param id the node id of the version item.
+ * @return the version item or <code>null</code> if there is no node state
+ * with the given <code>id</code>.
+ * @throws RepositoryException if an error occurs while reading from the
+ * version storage.
+ */
+ protected InternalVersionItem createInternalVersionItem(NodeId id)
+ throws RepositoryException {
+ try {
+ if (stateMgr.hasItemState(id)) {
+ NodeState state = (NodeState) stateMgr.getItemState(id);
+ NodeStateEx pNode = new NodeStateEx(stateMgr, ntReg, state, null);
+ NodeId parentId = pNode.getParentId();
+ InternalVersionItem parent = getItem(parentId);
+ Name ntName = state.getNodeTypeName();
+ if (ntName.equals(NameConstants.NT_FROZENNODE)) {
+ return new InternalFrozenNodeImpl(this, pNode, parent);
+ } else if (ntName.equals(NameConstants.NT_VERSIONEDCHILD)) {
+ return new InternalFrozenVHImpl(this, pNode, parent);
+ } else if (ntName.equals(NameConstants.NT_VERSION)) {
+ return ((InternalVersionHistory) parent).getVersion(id);
+ } else if (ntName.equals(NameConstants.NT_VERSIONHISTORY)) {
+ return new InternalVersionHistoryImpl(this, pNode);
+ } else {
+ return null;
+ }
+ } else {
+ return null;
+ }
+ } catch (ItemStateException e) {
+ throw new RepositoryException(e);
+ }
}
}
Modified: jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/version/InternalVersion.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/version/InternalVersion.java?rev=638303&r1=638302&r2=638303&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/version/InternalVersion.java (original)
+++ jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/version/InternalVersion.java Tue Mar 18 03:17:26 2008
@@ -17,6 +17,7 @@
package org.apache.jackrabbit.core.version;
import org.apache.jackrabbit.spi.Name;
+import org.apache.jackrabbit.core.NodeId;
import java.util.Calendar;
@@ -39,6 +40,13 @@
* @return the frozen node.
*/
InternalFrozenNode getFrozenNode();
+
+ /**
+ * Returns the node id of the frozen node.
+ *
+ * @return the node id of the frozen node;
+ */
+ NodeId getFrozenNodeId();
/**
* Equivalent to {@link Version#getCreated()}
Modified: jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/version/InternalVersionImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/version/InternalVersionImpl.java?rev=638303&r1=638302&r2=638303&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/version/InternalVersionImpl.java (original)
+++ jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/version/InternalVersionImpl.java Tue Mar 18 03:17:26 2008
@@ -108,14 +108,21 @@
public InternalFrozenNode getFrozenNode() {
// get frozen node
try {
- NodeState.ChildNodeEntry entry = node.getState().getChildNodeEntry(NameConstants.JCR_FROZENNODE, 1);
- if (entry == null) {
- throw new InternalError("version has no frozen node: " + getId());
- }
- return (InternalFrozenNode) vMgr.getItem(entry.getId());
+ return (InternalFrozenNode) vMgr.getItem(getFrozenNodeId());
} catch (RepositoryException e) {
throw new IllegalStateException("unable to retrieve frozen node: " + e);
}
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public NodeId getFrozenNodeId() {
+ NodeState.ChildNodeEntry entry = node.getState().getChildNodeEntry(NameConstants.JCR_FROZENNODE, 1);
+ if (entry == null) {
+ throw new InternalError("version has no frozen node: " + getId());
+ }
+ return entry.getId();
}
/**
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=638303&r1=638302&r2=638303&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 03:17:26 2008
@@ -112,11 +112,6 @@
private final VersionItemStateProvider versProvider;
/**
- * the node type manager
- */
- private NodeTypeRegistry ntReg;
-
- /**
* the dynamic event state collection factory
*/
private final DynamicESCFactory escFactory;
@@ -136,10 +131,10 @@
NodeId rootParentId,
ItemStateCacheFactory cacheFactory,
ISMLocking ismLocking) throws RepositoryException {
+ super(ntReg);
try {
this.pMgr = pMgr;
this.fs = fs;
- this.ntReg = ntReg;
this.escFactory = new DynamicESCFactory(obsMgr);
// need to store the version storage root directly into the persistence manager
@@ -257,37 +252,20 @@
synchronized (versionItems) {
InternalVersionItem item = (InternalVersionItem) versionItems.get(id);
if (item == null) {
- if (stateMgr.hasItemState(id)) {
- NodeState state = (NodeState) stateMgr.getItemState(id);
- NodeStateEx pNode = new NodeStateEx(stateMgr, ntReg, state, null);
- NodeId parentId = pNode.getParentId();
- InternalVersionItem parent = getItem(parentId);
- Name ntName = state.getNodeTypeName();
- if (ntName.equals(NameConstants.NT_FROZENNODE)) {
- item = new InternalFrozenNodeImpl(this, pNode, parent);
- } else if (ntName.equals(NameConstants.NT_VERSIONEDCHILD)) {
- item = new InternalFrozenVHImpl(this, pNode, parent);
- } else if (ntName.equals(NameConstants.NT_VERSION)) {
- item = ((InternalVersionHistory) parent).getVersion(id);
- } else if (ntName.equals(NameConstants.NT_VERSIONHISTORY)) {
- item = new InternalVersionHistoryImpl(this, pNode);
- } else {
- return null;
- }
+ item = createInternalVersionItem(id);
+ if (item != null) {
+ versionItems.put(id, item);
} else {
return null;
}
- versionItems.put(id, item);
}
return item;
}
- } catch (ItemStateException e) {
- throw new RepositoryException(e);
} finally {
releaseReadLock();
}
}
-
+
/**
* {@inheritDoc}
* <p/>
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=638303&r1=638302&r2=638303&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 03:17:26 2008
@@ -75,11 +75,6 @@
private final VersionManagerImpl vMgr;
/**
- * Node type registry.
- */
- private NodeTypeRegistry ntReg;
-
- /**
* The session that uses this version manager.
*/
private SessionImpl session;
@@ -100,9 +95,8 @@
public XAVersionManager(VersionManagerImpl vMgr, NodeTypeRegistry ntReg,
SessionImpl session, ItemStateCacheFactory cacheFactory)
throws RepositoryException {
-
+ super(ntReg);
this.vMgr = vMgr;
- this.ntReg = ntReg;
this.session = session;
this.stateMgr = new XAItemStateManager(vMgr.getSharedStateMgr(),
this, CHANGE_LOG_ATTRIBUTE_NAME, cacheFactory);
@@ -366,7 +360,13 @@
history = makeLocalCopy(history);
xaItems.put(history.getId(), history);
}
- return super.checkin(history, node);
+ InternalVersion version = super.checkin(history, node);
+ NodeId frozenNodeId = version.getFrozenNodeId();
+ InternalVersionItem frozenNode = createInternalVersionItem(frozenNodeId);
+ if (frozenNode != null) {
+ xaItems.put(frozenNodeId, frozenNode);
+ }
+ return version;
}
/**
Modified: jackrabbit/trunk/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/version/RestoreTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/version/RestoreTest.java?rev=638303&r1=638302&r2=638303&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/version/RestoreTest.java (original)
+++ jackrabbit/trunk/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/version/RestoreTest.java Tue Mar 18 03:17:26 2008
@@ -34,7 +34,9 @@
UserTransactionImpl tx = new UserTransactionImpl(superuser);
tx.begin();
Version v10 = n.checkin();
+ String versionName = v10.getName();
n.restore(v10, true);
+ assertEquals("Wrong version restored", versionName, n.getBaseVersion().getName());
tx.commit();
}
}
Added: 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=638303&view=auto
==============================================================================
--- jackrabbit/trunk/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/version/TestAll.java (added)
+++ jackrabbit/trunk/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/version/TestAll.java Tue Mar 18 03:17:26 2008
@@ -0,0 +1,42 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.jackrabbit.core.version;
+
+import junit.framework.Test;
+import junit.framework.TestCase;
+import junit.framework.TestSuite;
+
+/**
+ * Test suite that includes all jackrabbit core version tests.
+ */
+public class TestAll extends TestCase {
+
+ /**
+ * Returns a test suite that executes all tests inside this package.
+ *
+ * @return a test suite that executes all tests inside this package
+ */
+ public static Test suite() {
+ TestSuite suite = new TestSuite("Version tests");
+ // disabled because JCR-1481 is not yet fixed
+ //suite.addTestSuite(CheckinRemoveVersionTest.class);
+ suite.addTestSuite(RemoveVersionLabelTest.class);
+ suite.addTestSuite(RestoreTest.class);
+ suite.addTestSuite(VersionIteratorImplTest.class);
+ return suite;
+ }
+}
Propchange: jackrabbit/trunk/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/version/TestAll.java
------------------------------------------------------------------------------
svn:eol-style = native
Modified: jackrabbit/trunk/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/version/VersionIteratorImplTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/version/VersionIteratorImplTest.java?rev=638303&r1=638302&r2=638303&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/version/VersionIteratorImplTest.java (original)
+++ jackrabbit/trunk/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/version/VersionIteratorImplTest.java Tue Mar 18 03:17:26 2008
@@ -48,6 +48,7 @@
public Calendar getCreated() {return null;}
public InternalFrozenNode getFrozenNode() {return null;}
+ public NodeId getFrozenNodeId() {return null;}
public Name[] getLabels() {return null;}
public Name getName() {return null;}
public InternalVersion[] getPredecessors() {return null;}