You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jackrabbit.apache.org by ju...@apache.org on 2008/04/22 01:42:53 UTC

svn commit: r650317 - in /jackrabbit/branches/1.4/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/version: AbstractVersionManager.java InternalVersion.java InternalVersionImpl.java VersionManagerImpl.java XAVersionManager.java

Author: jukka
Date: Mon Apr 21 16:42:52 2008
New Revision: 650317

URL: http://svn.apache.org/viewvc?rev=650317&view=rev
Log:
1.4: Merged revision 638303 (JCR-1476, without tests)

Modified:
    jackrabbit/branches/1.4/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/version/AbstractVersionManager.java
    jackrabbit/branches/1.4/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/version/InternalVersion.java
    jackrabbit/branches/1.4/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/version/InternalVersionImpl.java
    jackrabbit/branches/1.4/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/version/VersionManagerImpl.java
    jackrabbit/branches/1.4/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/version/XAVersionManager.java

Modified: jackrabbit/branches/1.4/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/version/AbstractVersionManager.java
URL: http://svn.apache.org/viewvc/jackrabbit/branches/1.4/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/version/AbstractVersionManager.java?rev=650317&r1=650316&r2=650317&view=diff
==============================================================================
--- jackrabbit/branches/1.4/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/version/AbstractVersionManager.java (original)
+++ jackrabbit/branches/1.4/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/version/AbstractVersionManager.java Mon Apr 21 16:42:52 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/branches/1.4/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/version/InternalVersion.java
URL: http://svn.apache.org/viewvc/jackrabbit/branches/1.4/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/version/InternalVersion.java?rev=650317&r1=650316&r2=650317&view=diff
==============================================================================
--- jackrabbit/branches/1.4/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/version/InternalVersion.java (original)
+++ jackrabbit/branches/1.4/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/version/InternalVersion.java Mon Apr 21 16:42:52 2008
@@ -17,6 +17,7 @@
 package org.apache.jackrabbit.core.version;
 
 import org.apache.jackrabbit.spi.Name;
+import org.apache.jackrabbit.core.NodeId;
 
 import javax.jcr.version.Version;
 import java.util.Calendar;
@@ -40,6 +41,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/branches/1.4/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/version/InternalVersionImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/branches/1.4/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/version/InternalVersionImpl.java?rev=650317&r1=650316&r2=650317&view=diff
==============================================================================
--- jackrabbit/branches/1.4/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/version/InternalVersionImpl.java (original)
+++ jackrabbit/branches/1.4/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/version/InternalVersionImpl.java Mon Apr 21 16:42:52 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/branches/1.4/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/version/VersionManagerImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/branches/1.4/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/version/VersionManagerImpl.java?rev=650317&r1=650316&r2=650317&view=diff
==============================================================================
--- jackrabbit/branches/1.4/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/version/VersionManagerImpl.java (original)
+++ jackrabbit/branches/1.4/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/version/VersionManagerImpl.java Mon Apr 21 16:42:52 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/branches/1.4/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/version/XAVersionManager.java
URL: http://svn.apache.org/viewvc/jackrabbit/branches/1.4/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/version/XAVersionManager.java?rev=650317&r1=650316&r2=650317&view=diff
==============================================================================
--- jackrabbit/branches/1.4/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/version/XAVersionManager.java (original)
+++ jackrabbit/branches/1.4/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/version/XAVersionManager.java Mon Apr 21 16:42:52 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;
     }
 
     /**