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