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