You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lenya.apache.org by an...@apache.org on 2005/04/12 17:10:58 UTC

svn commit: r161064 - in lenya/trunk/src: java/org/apache/lenya/cms/rc/ java/org/apache/lenya/cms/usecase/ java/org/apache/lenya/transaction/ webapp/lenya/usecases/

Author: andreas
Date: Tue Apr 12 08:10:56 2005
New Revision: 161064

URL: http://svn.apache.org/viewcvs?view=rev&rev=161064
Log:
allow to cancel usecases incl. rollback of the transition, which means that objects are checked in when a usecase uses pessimistic offline lock

Modified:
    lenya/trunk/src/java/org/apache/lenya/cms/rc/RCML.java
    lenya/trunk/src/java/org/apache/lenya/cms/rc/RevisionController.java
    lenya/trunk/src/java/org/apache/lenya/cms/usecase/AbstractUsecase.java
    lenya/trunk/src/java/org/apache/lenya/cms/usecase/Usecase.java
    lenya/trunk/src/java/org/apache/lenya/transaction/UnitOfWork.java
    lenya/trunk/src/java/org/apache/lenya/transaction/UnitOfWorkImpl.java
    lenya/trunk/src/webapp/lenya/usecases/usecases.js

Modified: lenya/trunk/src/java/org/apache/lenya/cms/rc/RCML.java
URL: http://svn.apache.org/viewcvs/lenya/trunk/src/java/org/apache/lenya/cms/rc/RCML.java?view=diff&r1=161063&r2=161064
==============================================================================
--- lenya/trunk/src/java/org/apache/lenya/cms/rc/RCML.java (original)
+++ lenya/trunk/src/java/org/apache/lenya/cms/rc/RCML.java Tue Apr 12 08:10:56 2005
@@ -104,7 +104,7 @@
             // system checked the document in. We use the filesystem
             // modification date as checkin time.
             //
-            checkOutIn(RCML.ci, RevisionController.systemUsername, lastModified, false, false);
+            checkOutIn(RCML.ci, RevisionController.systemUsername, lastModified, false);
 
             File parent = new File(this.rcmlFile.getParent());
             parent.mkdirs();
@@ -153,12 +153,11 @@
      * @param identity The identity of the user
      * @param time Time at which the check in/out is made
      * @param backup Create backup element
-     * @param newVersion If true, a new version will be created.
      * @throws IOException if an error occurs
      * @throws Exception if an error occurs
      */
-    public void checkOutIn(short type, String identity, long time, boolean backup,
-            boolean newVersion) throws IOException, Exception {
+    public void checkOutIn(short type, String identity, long time, boolean backup)
+            throws IOException, Exception {
 
         if (type != co && type != ci) {
             throw new IllegalArgumentException("ERROR: " + this.getClass().getName()
@@ -182,9 +181,7 @@
             if (latestEntry != null) {
                 version = latestEntry.getVersion();
             }
-            if (newVersion) {
-                version++;
-            }
+            version++;
             Element versionElement = helper.createElement("Version", "" + version);
             checkOutElement.appendChild(versionElement);
         }
@@ -395,6 +392,18 @@
     public void deleteFirstCheckIn() throws Exception {
         Node root = this.document.getDocumentElement();
         Node firstCheckIn = XPathAPI.selectSingleNode(root, "/XPSRevisionControl/CheckIn[1]");
+        root.removeChild(firstCheckIn);
+        root.removeChild(root.getFirstChild()); // remove EOL (end of line)
+        setDirty();
+    }
+
+    /**
+     * Delete the latest check in
+     * @throws Exception if an error occurs
+     */
+    public void deleteFirstCheckOut() throws Exception {
+        Node root = this.document.getDocumentElement();
+        Node firstCheckIn = XPathAPI.selectSingleNode(root, "/XPSRevisionControl/CheckOut[1]");
         root.removeChild(firstCheckIn);
         root.removeChild(root.getFirstChild()); // remove EOL (end of line)
         setDirty();

Modified: lenya/trunk/src/java/org/apache/lenya/cms/rc/RevisionController.java
URL: http://svn.apache.org/viewcvs/lenya/trunk/src/java/org/apache/lenya/cms/rc/RevisionController.java?view=diff&r1=161063&r2=161064
==============================================================================
--- lenya/trunk/src/java/org/apache/lenya/cms/rc/RevisionController.java (original)
+++ lenya/trunk/src/java/org/apache/lenya/cms/rc/RevisionController.java Tue Apr 12 08:10:56 2005
@@ -129,7 +129,7 @@
             throw new FileReservedCheckOutException(this.rootDir + source, rcml);
         }
 
-        rcml.checkOutIn(RCML.co, identity, new Date().getTime(), false, false);
+        rcml.checkOutIn(RCML.co, identity, new Date().getTime(), false);
 
         return file;
     }
@@ -160,7 +160,7 @@
 
         return !checkedOutByOther;
     }
-    
+
     /**
      * @param source A source.
      * @return If the source is checked out.
@@ -275,7 +275,11 @@
                 }
             }
 
-            rcml.checkOutIn(RCML.ci, identity, time, backup, newVersion);
+            if (newVersion) {
+                rcml.checkOutIn(RCML.ci, identity, time, backup);
+            } else {
+                rcml.deleteFirstCheckOut();
+            }
             rcml.pruneEntries(this.backupDir);
             rcml.write();
 

Modified: lenya/trunk/src/java/org/apache/lenya/cms/usecase/AbstractUsecase.java
URL: http://svn.apache.org/viewcvs/lenya/trunk/src/java/org/apache/lenya/cms/usecase/AbstractUsecase.java?view=diff&r1=161063&r2=161064
==============================================================================
--- lenya/trunk/src/java/org/apache/lenya/cms/usecase/AbstractUsecase.java (original)
+++ lenya/trunk/src/java/org/apache/lenya/cms/usecase/AbstractUsecase.java Tue Apr 12 08:10:56 2005
@@ -574,4 +574,14 @@
         }
     }
 
+    /**
+     * @see org.apache.lenya.cms.usecase.Usecase#cancel()
+     */
+    public void cancel() throws UsecaseException {
+        try {
+            getUnitOfWork().rollback();
+        } catch (Exception e) {
+            throw new UsecaseException(e);
+        }
+    }
 }

Modified: lenya/trunk/src/java/org/apache/lenya/cms/usecase/Usecase.java
URL: http://svn.apache.org/viewcvs/lenya/trunk/src/java/org/apache/lenya/cms/usecase/Usecase.java?view=diff&r1=161063&r2=161064
==============================================================================
--- lenya/trunk/src/java/org/apache/lenya/cms/usecase/Usecase.java (original)
+++ lenya/trunk/src/java/org/apache/lenya/cms/usecase/Usecase.java Tue Apr 12 08:10:56 2005
@@ -137,6 +137,12 @@
     void execute() throws UsecaseException;
     
     /**
+     * Cancels the usecase.
+     * @throws UsecaseException if an error occurs.
+     */
+    void cancel() throws UsecaseException;
+    
+    /**
      * @return The web application URL the usecase was invoked on.
      */
     String getSourceURL();

Modified: lenya/trunk/src/java/org/apache/lenya/transaction/UnitOfWork.java
URL: http://svn.apache.org/viewcvs/lenya/trunk/src/java/org/apache/lenya/transaction/UnitOfWork.java?view=diff&r1=161063&r2=161064
==============================================================================
--- lenya/trunk/src/java/org/apache/lenya/transaction/UnitOfWork.java (original)
+++ lenya/trunk/src/java/org/apache/lenya/transaction/UnitOfWork.java Tue Apr 12 08:10:56 2005
@@ -71,6 +71,12 @@
     void commit() throws TransactionException;
     
     /**
+     * Rolls the transaction back.
+     * @throws TransactionException if an error occurs.
+     */
+    void rollback() throws TransactionException;
+    
+    /**
      * @return The identity.
      */
     Identity getIdentity();

Modified: lenya/trunk/src/java/org/apache/lenya/transaction/UnitOfWorkImpl.java
URL: http://svn.apache.org/viewcvs/lenya/trunk/src/java/org/apache/lenya/transaction/UnitOfWorkImpl.java?view=diff&r1=161063&r2=161064
==============================================================================
--- lenya/trunk/src/java/org/apache/lenya/transaction/UnitOfWorkImpl.java (original)
+++ lenya/trunk/src/java/org/apache/lenya/transaction/UnitOfWorkImpl.java Tue Apr 12 08:10:56 2005
@@ -104,7 +104,7 @@
         involvedObjects.addAll(this.newObjects);
         involvedObjects.addAll(this.modifiedObjects);
         involvedObjects.addAll(this.removedObjects);
-
+        
         for (Iterator i = involvedObjects.iterator(); i.hasNext();) {
             Transactionable t = (Transactionable) i.next();
             if (t.hasChanged()) {
@@ -168,6 +168,29 @@
      */
     public boolean isDirty(Transactionable transactionable) {
         return this.modifiedObjects.contains(transactionable);
+    }
+
+    /**
+     * @see org.apache.lenya.transaction.UnitOfWork#rollback()
+     */
+    public void rollback() throws TransactionException {
+        if (getLogger().isDebugEnabled()) {
+            getLogger().debug("rollback");
+        }
+        if (getIdentityMap() != null) {
+            Identifiable[] objects = getIdentityMap().getObjects();
+            for (int i = 0; i < objects.length; i++) {
+                if (objects[i] instanceof Transactionable) {
+                    Transactionable t = (Transactionable) objects[i];
+                    if (t.isCheckedOut()) {
+                        t.checkin();
+                    }
+                    if (t.isLocked()) {
+                        t.unlock();
+                    }
+                }
+            }
+        }
     }
 
 }

Modified: lenya/trunk/src/webapp/lenya/usecases/usecases.js
URL: http://svn.apache.org/viewcvs/lenya/trunk/src/webapp/lenya/usecases/usecases.js?view=diff&r1=161063&r2=161064
==============================================================================
--- lenya/trunk/src/webapp/lenya/usecases/usecases.js (original)
+++ lenya/trunk/src/webapp/lenya/usecases/usecases.js Tue Apr 12 08:10:56 2005
@@ -126,6 +126,7 @@
                     }
                 }
                 else if (cocoon.request.getParameter("cancel")) {
+                    usecase.cancel();
                     ready = true;
                 }
                 proxy = new Packages.org.apache.lenya.cms.usecase.UsecaseProxy(usecase);



---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@lenya.apache.org
For additional commands, e-mail: commits-help@lenya.apache.org