You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jackrabbit.apache.org by re...@apache.org on 2008/04/17 14:44:47 UTC

svn commit: r649071 - in /jackrabbit/trunk: jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/ jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/operation/ jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/version...

Author: reschke
Date: Thu Apr 17 05:44:41 2008
New Revision: 649071

URL: http://svn.apache.org/viewvc?rev=649071&view=rev
Log:
JCR-1513: allow RepositoryService.checkin() to return the NodeId of the created version; use it in JCR2SPI; implement it in SPI2JCR. 

Modified:
    jackrabbit/trunk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/NodeImpl.java
    jackrabbit/trunk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/WorkspaceManager.java
    jackrabbit/trunk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/operation/Checkin.java
    jackrabbit/trunk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/version/DefaultVersionManager.java
    jackrabbit/trunk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/version/VersionManager.java
    jackrabbit/trunk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/version/VersionManagerImpl.java
    jackrabbit/trunk/jackrabbit-spi/src/main/java/org/apache/jackrabbit/spi/RepositoryService.java
    jackrabbit/trunk/jackrabbit-spi2jcr/src/main/java/org/apache/jackrabbit/spi2jcr/RepositoryServiceImpl.java

Modified: jackrabbit/trunk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/NodeImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/NodeImpl.java?rev=649071&r1=649070&r2=649071&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/NodeImpl.java (original)
+++ jackrabbit/trunk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/NodeImpl.java Thu Apr 17 05:44:41 2008
@@ -767,13 +767,14 @@
         checkIsVersionable();
         checkHasPendingChanges();
         checkIsLocked();
+        NodeEntry newVersion = null;
         if (isCheckedOut()) {
-            session.getVersionManager().checkin(getNodeState());
+            newVersion = session.getVersionManager().checkin(getNodeState());
         } else {
             // nothing to do
             log.debug("Node " + safeGetJCRPath() + " is already checked in.");
         }
-        return getBaseVersion();
+        return newVersion == null ? getBaseVersion() : (Version) itemMgr.getItem(newVersion);
     }
 
     /**

Modified: jackrabbit/trunk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/WorkspaceManager.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/WorkspaceManager.java?rev=649071&r1=649070&r2=649071&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/WorkspaceManager.java (original)
+++ jackrabbit/trunk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/WorkspaceManager.java Thu Apr 17 05:44:41 2008
@@ -911,7 +911,8 @@
          * @see OperationVisitor#visit(Checkin)
          */
         public void visit(Checkin operation) throws UnsupportedRepositoryOperationException, LockException, InvalidItemStateException, RepositoryException {
-            service.checkin(sessionInfo, operation.getNodeId());
+            NodeId newId = service.checkin(sessionInfo, operation.getNodeId());
+            operation.setNewVersionId(newId);
         }
 
         /**

Modified: jackrabbit/trunk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/operation/Checkin.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/operation/Checkin.java?rev=649071&r1=649070&r2=649071&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/operation/Checkin.java (original)
+++ jackrabbit/trunk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/operation/Checkin.java Thu Apr 17 05:44:41 2008
@@ -43,6 +43,8 @@
     private final NodeState nodeState;
     private final VersionManager mgr;
 
+    private NodeId newVersionId;
+
     private Checkin(NodeState nodeState, VersionManager mgr) {
         this.nodeState = nodeState;
         this.mgr = mgr;
@@ -77,6 +79,7 @@
         nodeState.getHierarchyEntry().invalidate(false);
     }
     //----------------------------------------< Access Operation Parameters >---
+    
     /**
      *
      * @return The nodeState to be checked in.
@@ -85,6 +88,14 @@
         return nodeState.getNodeEntry().getWorkspaceId();
     }
 
+    public void setNewVersionId(NodeId newVersionId) {
+        this.newVersionId = newVersionId;
+    }
+
+    public NodeId getNewVersionId() {
+        return this.newVersionId;
+    }
+    
     //------------------------------------------------------------< Factory >---
     /**
      *
@@ -92,7 +103,7 @@
      * @param mgr
      * @return
      */
-    public static Operation create(NodeState nodeState, VersionManager mgr) {
+    public static Checkin create(NodeState nodeState, VersionManager mgr) {
         return new Checkin(nodeState, mgr);
     }
 }

Modified: jackrabbit/trunk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/version/DefaultVersionManager.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/version/DefaultVersionManager.java?rev=649071&r1=649070&r2=649071&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/version/DefaultVersionManager.java (original)
+++ jackrabbit/trunk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/version/DefaultVersionManager.java Thu Apr 17 05:44:41 2008
@@ -37,7 +37,7 @@
 
     private static Logger log = LoggerFactory.getLogger(DefaultVersionManager.class);
 
-    public void checkin(NodeState nodeState) throws RepositoryException {
+    public NodeEntry checkin(NodeState nodeState) throws RepositoryException {
         throw new UnsupportedRepositoryOperationException("Versioning ist not supported by this repository.");
     }
 

Modified: jackrabbit/trunk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/version/VersionManager.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/version/VersionManager.java?rev=649071&r1=649070&r2=649071&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/version/VersionManager.java (original)
+++ jackrabbit/trunk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/version/VersionManager.java Thu Apr 17 05:44:41 2008
@@ -41,6 +41,7 @@
 
     /**
      * @param nodeState
+     * @return <code>NodeEntry</code> of newly created version or <code>null</code>
      * @throws VersionException
      * @throws UnsupportedRepositoryOperationException
      * @throws InvalidItemStateException
@@ -48,7 +49,7 @@
      * @throws RepositoryException
      * @see javax.jcr.Node#checkin()
      */
-    public void checkin(NodeState nodeState) throws VersionException, UnsupportedRepositoryOperationException, InvalidItemStateException, LockException, RepositoryException;
+    public NodeEntry checkin(NodeState nodeState) throws VersionException, UnsupportedRepositoryOperationException, InvalidItemStateException, LockException, RepositoryException;
 
     /**
      * @param nodeState

Modified: jackrabbit/trunk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/version/VersionManagerImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/version/VersionManagerImpl.java?rev=649071&r1=649070&r2=649071&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/version/VersionManagerImpl.java (original)
+++ jackrabbit/trunk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/version/VersionManagerImpl.java Thu Apr 17 05:44:41 2008
@@ -58,9 +58,15 @@
         this.workspaceManager = workspaceManager;
     }
 
-    public void checkin(NodeState nodeState) throws RepositoryException {
-        Operation ci = Checkin.create(nodeState, this);
+    public NodeEntry checkin(NodeState nodeState) throws RepositoryException {
+        Checkin ci = Checkin.create(nodeState, this);
         workspaceManager.execute(ci);
+        if (ci.getNewVersionId() == null) {
+            return null;
+        }
+        else {
+            return (NodeEntry) workspaceManager.getHierarchyManager().getHierarchyEntry(ci.getNewVersionId());
+        }
     }
 
     public void checkout(NodeState nodeState) throws RepositoryException {

Modified: jackrabbit/trunk/jackrabbit-spi/src/main/java/org/apache/jackrabbit/spi/RepositoryService.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-spi/src/main/java/org/apache/jackrabbit/spi/RepositoryService.java?rev=649071&r1=649070&r2=649071&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-spi/src/main/java/org/apache/jackrabbit/spi/RepositoryService.java (original)
+++ jackrabbit/trunk/jackrabbit-spi/src/main/java/org/apache/jackrabbit/spi/RepositoryService.java Thu Apr 17 05:44:41 2008
@@ -584,8 +584,10 @@
      * @throws javax.jcr.lock.LockException
      * @throws javax.jcr.RepositoryException
      * @see javax.jcr.Node#checkin()
+     * @return <code>NodeId</code> of newly created version, or <code>null</code>
+     * when that information is not available
      */
-    public void checkin(SessionInfo sessionInfo, NodeId nodeId) throws VersionException, UnsupportedRepositoryOperationException, InvalidItemStateException, LockException, RepositoryException;
+    public NodeId checkin(SessionInfo sessionInfo, NodeId nodeId) throws VersionException, UnsupportedRepositoryOperationException, InvalidItemStateException, LockException, RepositoryException;
 
     /**
      * Performs a checkout for the <code>Node</code> identified by the given

Modified: jackrabbit/trunk/jackrabbit-spi2jcr/src/main/java/org/apache/jackrabbit/spi2jcr/RepositoryServiceImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-spi2jcr/src/main/java/org/apache/jackrabbit/spi2jcr/RepositoryServiceImpl.java?rev=649071&r1=649070&r2=649071&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-spi2jcr/src/main/java/org/apache/jackrabbit/spi2jcr/RepositoryServiceImpl.java (original)
+++ jackrabbit/trunk/jackrabbit-spi2jcr/src/main/java/org/apache/jackrabbit/spi2jcr/RepositoryServiceImpl.java Thu Apr 17 05:44:41 2008
@@ -626,15 +626,15 @@
     /**
      * {@inheritDoc}
      */
-    public void checkin(final SessionInfo sessionInfo, final NodeId nodeId)
+    public NodeId checkin(final SessionInfo sessionInfo, final NodeId nodeId)
             throws VersionException, UnsupportedRepositoryOperationException, InvalidItemStateException, LockException, RepositoryException {
         final SessionInfoImpl sInfo = getSessionInfoImpl(sessionInfo);
-        executeWithLocalEvents(new Callable() {
+        Version newVersion = (Version) executeWithLocalEvents(new Callable() {
             public Object run() throws RepositoryException {
-                getNode(nodeId, getSessionInfoImpl(sessionInfo)).checkin();
-                return null;
+                return getNode(nodeId, getSessionInfoImpl(sessionInfo)).checkin();
             }
         }, sInfo);
+        return idFactory.createNodeId(newVersion, sInfo.getNamePathResolver());
     }
 
     /**