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/01 15:30:33 UTC

svn commit: r159685 [2/2] - in lenya/trunk/src: java/org/apache/lenya/cms/ant/ java/org/apache/lenya/cms/cocoon/acting/ java/org/apache/lenya/cms/cocoon/components/modules/input/ java/org/apache/lenya/cms/cocoon/flow/ java/org/apache/lenya/cms/metadata/dublincore/ java/org/apache/lenya/cms/publication/ java/org/apache/lenya/cms/rc/ java/org/apache/lenya/cms/site/tree/ java/org/apache/lenya/cms/usecase/ java/org/apache/lenya/cms/workflow/ java/org/apache/lenya/transaction/ webapp/lenya/pubs/default/java/src/org/apache/lenya/defaultpub/cms/usecases/

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=159684&r2=159685
==============================================================================
--- lenya/trunk/src/java/org/apache/lenya/transaction/UnitOfWorkImpl.java (original)
+++ lenya/trunk/src/java/org/apache/lenya/transaction/UnitOfWorkImpl.java Fri Apr  1 05:30:25 2005
@@ -16,10 +16,8 @@
  */
 package org.apache.lenya.transaction;
 
-import java.util.ArrayList;
 import java.util.HashSet;
 import java.util.Iterator;
-import java.util.List;
 import java.util.Set;
 
 import org.apache.avalon.framework.logger.AbstractLogEnabled;
@@ -38,20 +36,20 @@
     public UnitOfWorkImpl() {
     }
 
-    private List identityMaps = new ArrayList();
+    private IdentityMap identityMap;
 
     /**
-     * @see org.apache.lenya.transaction.UnitOfWork#getIdentityMaps()
+     * @see org.apache.lenya.transaction.UnitOfWork#getIdentityMap()
      */
-    public IdentityMap[] getIdentityMaps() {
-        return (IdentityMap[]) this.identityMaps.toArray(new IdentityMap[this.identityMaps.size()]);
+    public IdentityMap getIdentityMap() {
+        return this.identityMap;
     }
 
     /**
-     * @see org.apache.lenya.transaction.UnitOfWork#addIdentityMap(org.apache.lenya.transaction.IdentityMap)
+     * @see org.apache.lenya.transaction.UnitOfWork#setIdentityMap(org.apache.lenya.transaction.IdentityMap)
      */
-    public void addIdentityMap(IdentityMap map) {
-        this.identityMaps.add(map);
+    public void setIdentityMap(IdentityMap map) {
+        this.identityMap = map;
         map.setUnitOfWork(this);
     }
 
@@ -62,22 +60,35 @@
     /**
      * @see org.apache.lenya.transaction.UnitOfWork#registerNew(org.apache.lenya.transaction.Transactionable)
      */
-    public void registerNew(Transactionable object) {
+    public void registerNew(Transactionable object) throws TransactionException {
+        if (!object.isLocked()) {
+            throw new LockException("Object [" + object
+                    + "] cannot be registered, it is not locked.");
+        }
         this.newObjects.add(object);
     }
 
     /**
+     * @throws TransactionException
+     * @throws LockException
      * @see org.apache.lenya.transaction.UnitOfWork#registerDirty(org.apache.lenya.transaction.Transactionable)
      */
-    public void registerDirty(Transactionable object) {
-        System.out.println(this + " register dirty: " + object);
+    public void registerDirty(Transactionable object) throws TransactionException {
+        if (!object.isLocked()) {
+            throw new LockException("Object [" + object
+                    + "] cannot be registered, it is not locked.");
+        }
         this.modifiedObjects.add(object);
     }
 
     /**
      * @see org.apache.lenya.transaction.UnitOfWork#registerRemoved(org.apache.lenya.transaction.Transactionable)
      */
-    public void registerRemoved(Transactionable object) {
+    public void registerRemoved(Transactionable object) throws TransactionException {
+        if (!object.isLocked()) {
+            throw new LockException("Object [" + object
+                    + "] cannot be registered, it is not locked.");
+        }
         this.removedObjects.add(object);
     }
 
@@ -88,24 +99,55 @@
         if (getLogger().isDebugEnabled()) {
             getLogger().debug("commit");
         }
+
+        Set involvedObjects = new HashSet();
+        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.getVersion() > t.getLock().getVersion()) {
+                throw new LockException("Cannot commit transaction: The object [" + t
+                        + "] was modified after it has been locked.");
+            }
+        }
+
         for (Iterator i = this.newObjects.iterator(); i.hasNext();) {
             Transactionable t = (Transactionable) i.next();
             t.create();
             t.save();
         }
-        for (Iterator i = this.modifiedObjects.iterator(); i.hasNext(); ) {
+        for (Iterator i = this.modifiedObjects.iterator(); i.hasNext();) {
             Transactionable t = (Transactionable) i.next();
             if (getLogger().isDebugEnabled()) {
                 getLogger().debug("save [" + t + "]");
             }
             t.save();
         }
-        for (Iterator i = this.removedObjects.iterator(); i.hasNext(); ) {
+        for (Iterator i = this.removedObjects.iterator(); i.hasNext();) {
             Transactionable t = (Transactionable) i.next();
             t.delete();
         }
+
+        for (Iterator i = involvedObjects.iterator(); i.hasNext();) {
+            Transactionable t = (Transactionable) i.next();
+            if (t.isCheckedOut()) {
+                t.checkin();
+            }
+        }
+
+        if (getIdentityMap() != null) {
+            Transactionable[] objects = getIdentityMap().getObjects();
+            for (int i = 0; i < objects.length; i++) {
+                if (objects[i].isLocked()) {
+                    objects[i].unlock();
+                }
+            }
+        }
+
     }
-    
+
     private Identity identity;
 
     /**
@@ -120,6 +162,13 @@
      */
     public void setIdentity(Identity identity) {
         this.identity = identity;
+    }
+
+    /**
+     * @see org.apache.lenya.transaction.UnitOfWork#isDirty(org.apache.lenya.transaction.Transactionable)
+     */
+    public boolean isDirty(Transactionable transactionable) {
+        return this.modifiedObjects.contains(transactionable);
     }
 
 }

Modified: lenya/trunk/src/webapp/lenya/pubs/default/java/src/org/apache/lenya/defaultpub/cms/usecases/Publish.java
URL: http://svn.apache.org/viewcvs/lenya/trunk/src/webapp/lenya/pubs/default/java/src/org/apache/lenya/defaultpub/cms/usecases/Publish.java?view=diff&r1=159684&r2=159685
==============================================================================
--- lenya/trunk/src/webapp/lenya/pubs/default/java/src/org/apache/lenya/defaultpub/cms/usecases/Publish.java (original)
+++ lenya/trunk/src/webapp/lenya/pubs/default/java/src/org/apache/lenya/defaultpub/cms/usecases/Publish.java Fri Apr  1 05:30:25 2005
@@ -213,6 +213,25 @@
             getLogger().debug("Subtree publishing: [" + isSubtreeEnabled() + "]");
         }
 
+        DocumentSet set = getInvolvedDocuments(document);
+        try {
+            set.visit(this);
+        } catch (PublicationException e) {
+            throw new RuntimeException(e);
+        }
+
+        if (getLogger().isDebugEnabled()) {
+            getLogger().debug("Publishing completed.");
+        }
+    }
+
+    /**
+     * @param document The document.
+     * @return A set containing the document itself and all requiring documents.
+     */
+    protected DocumentSet getInvolvedDocuments(Document document) {
+        DocumentSet set;
+
         ServiceSelector selector = null;
         SiteManager siteManager = null;
         try {
@@ -221,10 +240,9 @@
                     .getSiteManagerHint());
 
             Document[] descendants = siteManager.getRequiringResources(document);
-            DocumentSet set = new DocumentSet(descendants);
+            set = new DocumentSet(descendants);
             set.add(document);
             siteManager.sortAscending(set);
-            set.visit(this);
         } catch (Exception e) {
             throw new RuntimeException(e);
         } finally {
@@ -235,10 +253,7 @@
                 this.manager.release(selector);
             }
         }
-
-        if (getLogger().isDebugEnabled()) {
-            getLogger().debug("Publishing completed.");
-        }
+        return set;
     }
 
     /**



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