svn commit: r564507 - in /lenya/trunk/src: impl/java/org/apache/lenya/cms/publication/ impl/test/org/apache/lenya/cms/rc/ java/org/apache/lenya/cms/cocoon/acting/ java/org/apache/lenya/cms/cocoon/flow/ java/org/apache/lenya/cms/rc/ java/org/apache/leny...
[email protected] Fri, 10 Aug 2007 08:33:32 -0000
Newsgroups
gmane.comp.cms.lenya.cvs
Message-ID
<[email protected] >
Author: andreas
Date: Fri Aug 10 01:33:31 2007
New Revision: 564507
URL: http://svn.apache.org/viewvc?view=rev&rev=564507
Log:
Removed method Node.getRcml() for safety reasons. This lead to the removal of the revision controller class and some refactorings.
Removed:
lenya/trunk/src/java/org/apache/lenya/cms/rc/RevisionController.java
Modified:
lenya/trunk/src/impl/java/org/apache/lenya/cms/publication/DocumentManagerImpl.java
lenya/trunk/src/impl/test/org/apache/lenya/cms/rc/RCMLTest.java
lenya/trunk/src/impl/test/org/apache/lenya/cms/rc/RevisionControllerTest.java
lenya/trunk/src/java/org/apache/lenya/cms/cocoon/acting/DiscoverCheckoutAction.java
lenya/trunk/src/java/org/apache/lenya/cms/cocoon/acting/ReservedCheckinAction.java
lenya/trunk/src/java/org/apache/lenya/cms/cocoon/acting/ReservedCheckoutTestAction.java
lenya/trunk/src/java/org/apache/lenya/cms/cocoon/acting/RevisionControllerAction.java
lenya/trunk/src/java/org/apache/lenya/cms/cocoon/flow/FlowHelper.java
lenya/trunk/src/java/org/apache/lenya/cms/cocoon/flow/FlowHelperImpl.java
lenya/trunk/src/java/org/apache/lenya/cms/repository/History.java
lenya/trunk/src/java/org/apache/lenya/cms/repository/Node.java
lenya/trunk/src/java/org/apache/lenya/cms/repository/Revision.java
lenya/trunk/src/modules-core/sitemanagement/java/src/org/apache/lenya/cms/site/usecases/Revisions.java
lenya/trunk/src/modules-core/sitemanagement/java/src/org/apache/lenya/cms/site/usecases/Rollback.java
lenya/trunk/src/modules-core/sitemanagement/java/src/org/apache/lenya/cms/site/usecases/SiteOverview.java
lenya/trunk/src/modules-core/sitemanagement/usecases/tab/revisions.jx
lenya/trunk/src/modules/sourcerepository/java/src/org/apache/lenya/cms/repository/SourceNode.java
lenya/trunk/src/modules/sourcerepository/java/src/org/apache/lenya/cms/repository/SourceNodeHistory.java
lenya/trunk/src/modules/sourcerepository/java/src/org/apache/lenya/cms/repository/SourceNodeRCML.java
lenya/trunk/src/modules/sourcerepository/java/src/org/apache/lenya/cms/repository/SourceNodeRevision.java
lenya/trunk/src/modules/webdav/java/src/org/apache/lenya/cms/usecases/webdav/FilePropfind.java
lenya/trunk/src/modules/webdav/java/src/org/apache/lenya/cms/usecases/webdav/Propfind.java
Modified: lenya/trunk/src/impl/java/org/apache/lenya/cms/publication/DocumentManagerImpl.java
URL: http://svn.apache.org/viewvc/lenya/trunk/src/impl/java/org/apache/lenya/cms/publication/DocumentManagerImpl.java?view=diff&rev=564507&r1=564506&r2=564507
==============================================================================
--- lenya/trunk/src/impl/java/org/apache/lenya/cms/publication/DocumentManagerImpl.java (original)
+++ lenya/trunk/src/impl/java/org/apache/lenya/cms/publication/DocumentManagerImpl.java Fri Aug 10 01:33:31 2007
@@ -42,7 +42,6 @@
import org.apache.lenya.cms.metadata.MetaDataException;
import org.apache.lenya.cms.publication.util.DocumentSet;
import org.apache.lenya.cms.publication.util.DocumentVisitor;
-import org.apache.lenya.cms.rc.RevisionController;
import org.apache.lenya.cms.repository.Node;
import org.apache.lenya.cms.repository.RepositoryException;
import org.apache.lenya.cms.repository.UUIDGenerator;
@@ -555,12 +554,11 @@
}
protected void copyRevisions(Document sourceDoc, Document targetDoc) throws PublicationException {
- RevisionController controller = new RevisionController(getLogger());
try {
Node targetNode = targetDoc.getRepositoryNode();
// reset the lock so that the node doesn't complain about being changed
targetNode.unlock();
- controller.copyRCML(sourceDoc.getRepositoryNode(), targetNode);
+ targetNode.copyRevisionsFrom(sourceDoc.getRepositoryNode());
targetNode.lock();
} catch (Exception e) {
throw new PublicationException(e);
Modified: lenya/trunk/src/impl/test/org/apache/lenya/cms/rc/RCMLTest.java
URL: http://svn.apache.org/viewvc/lenya/trunk/src/impl/test/org/apache/lenya/cms/rc/RCMLTest.java?view=diff&rev=564507&r1=564506&r2=564507
==============================================================================
--- lenya/trunk/src/impl/test/org/apache/lenya/cms/rc/RCMLTest.java (original)
+++ lenya/trunk/src/impl/test/org/apache/lenya/cms/rc/RCMLTest.java Fri Aug 10 01:33:31 2007
@@ -65,18 +65,16 @@
try {
org.apache.lenya.cms.publication.Document doc = null;
- RCML rcml = doc.getRepositoryNode().getRcml();
- rcml.checkOut(doc.getRepositoryNode());
+ doc.getRepositoryNode().checkout();
(new PrintWriter(System.out)).print(this.document);
- CheckOutEntry coe = rcml.getLatestCheckOutEntry();
System.out.println("\n");
- if (coe == null) {
- System.out.println("Not checked out");
+ if (doc.getRepositoryNode().isCheckedOut()) {
+ System.out.println("Checked out");
} else {
- System.out.println("Checked out: " + coe.getIdentity() + " " + coe.getTime());
+ System.out.println("Not checked out");
}
} catch (Exception e) {
System.out.println(e);
Modified: lenya/trunk/src/impl/test/org/apache/lenya/cms/rc/RevisionControllerTest.java
URL: http://svn.apache.org/viewvc/lenya/trunk/src/impl/test/org/apache/lenya/cms/rc/RevisionControllerTest.java?view=diff&rev=564507&r1=564506&r2=564507
==============================================================================
--- lenya/trunk/src/impl/test/org/apache/lenya/cms/rc/RevisionControllerTest.java (original)
+++ lenya/trunk/src/impl/test/org/apache/lenya/cms/rc/RevisionControllerTest.java Fri Aug 10 01:33:31 2007
@@ -20,9 +20,6 @@
package org.apache.lenya.cms.rc;
-import java.io.FileNotFoundException;
-import java.io.IOException;
-
import org.apache.lenya.ac.impl.AbstractAccessControlTest;
import org.apache.lenya.cms.publication.Document;
import org.apache.lenya.cms.publication.DocumentManager;
@@ -67,7 +64,7 @@
if (args.length != 4) {
System.out
.println("Usage: "
- + RevisionController.class.getName()
+ + RevisionControllerTest.class.getName()
+ " username(user who checkout) source(filename without the rootDirectory of the document to checkout) username(user who checkin) destination(filename without the rootDirectory of document to checkin)");
return;
@@ -80,9 +77,8 @@
String source = args[1];
String identityD = args[2];
String destination = args[3];
- RevisionController rc = new RevisionController(getLogger());
doc1.getRepositoryNode().checkout();
- doc2.getRepositoryNode().getRcml().checkIn(doc2.getRepositoryNode(), true, true);
+ doc2.getRepositoryNode().checkin();
}
}
Modified: lenya/trunk/src/java/org/apache/lenya/cms/cocoon/acting/DiscoverCheckoutAction.java
URL: http://svn.apache.org/viewvc/lenya/trunk/src/java/org/apache/lenya/cms/cocoon/acting/DiscoverCheckoutAction.java?view=diff&rev=564507&r1=564506&r2=564507
==============================================================================
--- lenya/trunk/src/java/org/apache/lenya/cms/cocoon/acting/DiscoverCheckoutAction.java (original)
+++ lenya/trunk/src/java/org/apache/lenya/cms/cocoon/acting/DiscoverCheckoutAction.java Fri Aug 10 01:33:31 2007
@@ -24,8 +24,7 @@
import org.apache.avalon.framework.parameters.Parameters;
import org.apache.cocoon.environment.Redirector;
import org.apache.cocoon.environment.SourceResolver;
-import org.apache.lenya.cms.rc.RCML;
-import org.apache.lenya.cms.rc.RCMLEntry;
+import org.apache.lenya.cms.repository.Node;
/**
@@ -42,11 +41,11 @@
super.act(redirector, resolver, objectModel, src, parameters);
HashMap actionMap = new HashMap();
- final RCMLEntry entry = getNode().getRcml().getLatestEntry();
+ Node node = getNode();
- if ((entry != null) && (entry.getType() == RCML.co) ) {
- actionMap.put("filename", getNode().getSourceURI());
- actionMap.put("user", entry.getIdentity());
+ if (node.isCheckedOut()) {
+ actionMap.put("filename", node.getSourceURI());
+ actionMap.put("user", node.getCheckoutUserId());
return actionMap;
}
return null;
Modified: lenya/trunk/src/java/org/apache/lenya/cms/cocoon/acting/ReservedCheckinAction.java
URL: http://svn.apache.org/viewvc/lenya/trunk/src/java/org/apache/lenya/cms/cocoon/acting/ReservedCheckinAction.java?view=diff&rev=564507&r1=564506&r2=564507
==============================================================================
--- lenya/trunk/src/java/org/apache/lenya/cms/cocoon/acting/ReservedCheckinAction.java (original)
+++ lenya/trunk/src/java/org/apache/lenya/cms/cocoon/acting/ReservedCheckinAction.java Fri Aug 10 01:33:31 2007
@@ -54,7 +54,7 @@
try {
Node node = getNode();
if (node.isCheckedOutBySession()) {
- node.getRcml().checkIn(node, backup, true);
+ node.checkin();
}
} catch (RepositoryException e) {
actionMap.put("exception", "genericException");
Modified: lenya/trunk/src/java/org/apache/lenya/cms/cocoon/acting/ReservedCheckoutTestAction.java
URL: http://svn.apache.org/viewvc/lenya/trunk/src/java/org/apache/lenya/cms/cocoon/acting/ReservedCheckoutTestAction.java?view=diff&rev=564507&r1=564506&r2=564507
==============================================================================
--- lenya/trunk/src/java/org/apache/lenya/cms/cocoon/acting/ReservedCheckoutTestAction.java (original)
+++ lenya/trunk/src/java/org/apache/lenya/cms/cocoon/acting/ReservedCheckoutTestAction.java Fri Aug 10 01:33:31 2007
@@ -26,8 +26,7 @@
import org.apache.avalon.framework.parameters.Parameters;
import org.apache.cocoon.environment.Redirector;
import org.apache.cocoon.environment.SourceResolver;
-import org.apache.lenya.cms.rc.RCML;
-import org.apache.lenya.cms.rc.RCMLEntry;
+import org.apache.lenya.cms.repository.Node;
import org.apache.lenya.cms.repository.RepositoryException;
@@ -48,9 +47,9 @@
HashMap actionMap = new HashMap();
try {
- RCMLEntry entry = getNode().getRcml().getLatestEntry();
+ Node node = getNode();
- if ((entry == null) || (entry.getType() != RCML.co) || !entry.getIdentity().equals(getUsername())) {
+ if (!node.isCheckedOut() || !node.getCheckoutUserId().equals(getUsername())) {
//check out
getNode().checkout();
}
Modified: lenya/trunk/src/java/org/apache/lenya/cms/cocoon/acting/RevisionControllerAction.java
URL: http://svn.apache.org/viewvc/lenya/trunk/src/java/org/apache/lenya/cms/cocoon/acting/RevisionControllerAction.java?view=diff&rev=564507&r1=564506&r2=564507
==============================================================================
--- lenya/trunk/src/java/org/apache/lenya/cms/cocoon/acting/RevisionControllerAction.java (original)
+++ lenya/trunk/src/java/org/apache/lenya/cms/cocoon/acting/RevisionControllerAction.java Fri Aug 10 01:33:31 2007
@@ -39,7 +39,6 @@
import org.apache.lenya.cms.publication.Publication;
import org.apache.lenya.cms.publication.PublicationUtil;
import org.apache.lenya.cms.rc.RCEnvironment;
-import org.apache.lenya.cms.rc.RevisionController;
import org.apache.lenya.cms.repository.Node;
import org.apache.lenya.cms.repository.RepositoryUtil;
@@ -53,7 +52,6 @@
private String rcmlDirectory = null;
private String backupDirectory = null;
- private RevisionController rc = null;
private String username = null;
private Node node = null;
@@ -106,10 +104,6 @@
this.backupDirectory = rcEnvironment.getBackupDirectory();
this.backupDirectory = publicationPath + File.separator + this.backupDirectory;
- // Initialize Revision Controller
- this.rc = new RevisionController(getLogger());
-
- // /Initialize Revision Controller
// Get session
Session session = request.getSession(false);
@@ -176,14 +170,6 @@
*/
protected Node getNode() {
return this.node;
- }
-
- /**
- * Get the revision controller.
- * @return the revision controller
- */
- protected RevisionController getRc() {
- return this.rc;
}
/**
Modified: lenya/trunk/src/java/org/apache/lenya/cms/cocoon/flow/FlowHelper.java
URL: http://svn.apache.org/viewvc/lenya/trunk/src/java/org/apache/lenya/cms/cocoon/flow/FlowHelper.java?view=diff&rev=564507&r1=564506&r2=564507
==============================================================================
--- lenya/trunk/src/java/org/apache/lenya/cms/cocoon/flow/FlowHelper.java (original)
+++ lenya/trunk/src/java/org/apache/lenya/cms/cocoon/flow/FlowHelper.java Fri Aug 10 01:33:31 2007
@@ -17,7 +17,6 @@
*/
package org.apache.lenya.cms.cocoon.flow;
-import java.io.IOException;
import java.util.Map;
import org.apache.cocoon.components.flow.javascript.fom.FOM_Cocoon;
@@ -27,7 +26,6 @@
import org.apache.lenya.cms.publication.PageEnvelopeException;
import org.apache.lenya.cms.publication.util.DocumentHelper;
import org.apache.lenya.cms.rc.FileReservedCheckInException;
-import org.apache.lenya.cms.rc.RevisionController;
import org.apache.lenya.workflow.WorkflowException;
/**
@@ -101,24 +99,11 @@
PageEnvelopeException, AccessControlException;
/**
- * Get a RevisionController instance.
- * @param cocoon The Cocoon Flow Object Model
- * @return A RevisionController
- * @throws PageEnvelopeException Page envelope can not operate properly.
- * @throws IOException If an IOException occurs.
- * @see PageEnvelope
- * @see RevisionController
- */
- RevisionController getRevisionController(FOM_Cocoon cocoon) throws PageEnvelopeException,
- IOException;
-
- /**
* Checkis in the current document from the PageEnvelope context.
* @param cocoon The Cocoon Flow Object Model
* @param backup Wether a new revision should be created.
* @throws FileReservedCheckInException
* @throws Exception
- * @see RevisionController#reservedCheckIn(org.apache.lenya.cms.repository.Node, String, boolean, boolean)
*/
void reservedCheckIn(FOM_Cocoon cocoon, boolean backup) throws FileReservedCheckInException,
Exception;
Modified: lenya/trunk/src/java/org/apache/lenya/cms/cocoon/flow/FlowHelperImpl.java
URL: http://svn.apache.org/viewvc/lenya/trunk/src/java/org/apache/lenya/cms/cocoon/flow/FlowHelperImpl.java?view=diff&rev=564507&r1=564506&r2=564507
==============================================================================
--- lenya/trunk/src/java/org/apache/lenya/cms/cocoon/flow/FlowHelperImpl.java (original)
+++ lenya/trunk/src/java/org/apache/lenya/cms/cocoon/flow/FlowHelperImpl.java Fri Aug 10 01:33:31 2007
@@ -20,7 +20,6 @@
package org.apache.lenya.cms.cocoon.flow;
-import java.io.IOException;
import java.util.Enumeration;
import java.util.Map;
@@ -41,7 +40,6 @@
import org.apache.lenya.cms.publication.PublicationUtil;
import org.apache.lenya.cms.publication.util.DocumentHelper;
import org.apache.lenya.cms.rc.FileReservedCheckInException;
-import org.apache.lenya.cms.rc.RevisionController;
import org.apache.lenya.cms.repository.Node;
import org.apache.lenya.cms.repository.RepositoryUtil;
import org.apache.lenya.cms.repository.Session;
@@ -155,14 +153,6 @@
}
/**
- * @see org.apache.lenya.cms.cocoon.flow.FlowHelper#getRevisionController(org.apache.cocoon.components.flow.javascript.fom.FOM_Cocoon)
- */
- public RevisionController getRevisionController(FOM_Cocoon cocoon)
- throws PageEnvelopeException, IOException {
- return new RevisionController(getLogger());
- }
-
- /**
* @see org.apache.lenya.cms.cocoon.flow.FlowHelper#reservedCheckIn(org.apache.cocoon.components.flow.javascript.fom.FOM_Cocoon,
* boolean)
*/
@@ -170,7 +160,7 @@
throws FileReservedCheckInException, Exception {
final PageEnvelope pageEnvelope = getPageEnvelope(cocoon);
Node node = pageEnvelope.getDocument().getRepositoryNode();
- node.getRcml().checkIn(node, backup, true);
+ node.checkin();
}
private ServiceManager manager;
Modified: lenya/trunk/src/java/org/apache/lenya/cms/repository/History.java
URL: http://svn.apache.org/viewvc/lenya/trunk/src/java/org/apache/lenya/cms/repository/History.java?view=diff&rev=564507&r1=564506&r2=564507
==============================================================================
--- lenya/trunk/src/java/org/apache/lenya/cms/repository/History.java (original)
+++ lenya/trunk/src/java/org/apache/lenya/cms/repository/History.java Fri Aug 10 01:33:31 2007
@@ -23,6 +23,11 @@
public interface History {
/**
+ * @return The available revision numbers in descending order (starting with the newest one).
+ */
+ int[] getRevisionNumbers();
+
+ /**
* @return The latest revision.
*/
Revision getLatestRevision();
Modified: lenya/trunk/src/java/org/apache/lenya/cms/repository/Node.java
URL: http://svn.apache.org/viewvc/lenya/trunk/src/java/org/apache/lenya/cms/repository/Node.java?view=diff&rev=564507&r1=564506&r2=564507
==============================================================================
--- lenya/trunk/src/java/org/apache/lenya/cms/repository/Node.java (original)
+++ lenya/trunk/src/java/org/apache/lenya/cms/repository/Node.java Fri Aug 10 01:33:31 2007
@@ -20,8 +20,6 @@
import java.io.OutputStream;
import java.util.Collection;
-import org.apache.lenya.cms.rc.RCML;
-
/**
* Repository node.
*
@@ -105,10 +103,28 @@
boolean isCheckedOut() throws RepositoryException;
/**
+ * @return The ID of the user who has checked out this node.
+ * @throws RepositoryException if the node is not checked out.
+ */
+ String getCheckoutUserId() throws RepositoryException;
+
+ /**
* @return if the node is checked out by the current session.
* @throws RepositoryException if an error occurs.
*/
boolean isCheckedOutBySession() throws RepositoryException;
+
+ /**
+ * @param source The node to copy the revisions from.
+ * @throws RepositoryException if an error occurs.
+ */
+ void copyRevisionsFrom(Node source) throws RepositoryException;
+
+ /**
+ * @param revisionNumber The revision number to roll back.
+ * @throws RepositoryException if this revision doesn't exist.
+ */
+ void rollback(int revisionNumber) throws RepositoryException;
/**
* @return if the node is locked.
@@ -122,12 +138,6 @@
*/
void registerRemoved() throws RepositoryException;
-
- /**
- * @return The RCML to use for this node.
- */
- RCML getRcml();
-
/**
* @return The revision history.
*/
@@ -138,5 +148,5 @@
* @throws RepositoryException if an error occurs.
*/
void delete() throws RepositoryException;
-
+
}
Modified: lenya/trunk/src/java/org/apache/lenya/cms/repository/Revision.java
URL: http://svn.apache.org/viewvc/lenya/trunk/src/java/org/apache/lenya/cms/repository/Revision.java?view=diff&rev=564507&r1=564506&r2=564507
==============================================================================
--- lenya/trunk/src/java/org/apache/lenya/cms/repository/Revision.java (original)
+++ lenya/trunk/src/java/org/apache/lenya/cms/repository/Revision.java Fri Aug 10 01:33:31 2007
@@ -27,4 +27,14 @@
*/
int getNumber();
+ /**
+ * @return The time when this revision was created.
+ */
+ long getTime();
+
+ /**
+ * @return The ID of the user who created this revision.
+ */
+ String getUserId();
+
}
Modified: lenya/trunk/src/modules-core/sitemanagement/java/src/org/apache/lenya/cms/site/usecases/Revisions.java
URL: http://svn.apache.org/viewvc/lenya/trunk/src/modules-core/sitemanagement/java/src/org/apache/lenya/cms/site/usecases/Revisions.java?view=diff&rev=564507&r1=564506&r2=564507
==============================================================================
--- lenya/trunk/src/modules-core/sitemanagement/java/src/org/apache/lenya/cms/site/usecases/Revisions.java (original)
+++ lenya/trunk/src/modules-core/sitemanagement/java/src/org/apache/lenya/cms/site/usecases/Revisions.java Fri Aug 10 01:33:31 2007
@@ -17,10 +17,9 @@
*/
package org.apache.lenya.cms.site.usecases;
-import java.util.Vector;
-
import org.apache.lenya.cms.publication.Document;
-import org.apache.lenya.cms.rc.RCML;
+import org.apache.lenya.cms.repository.History;
+import org.apache.lenya.cms.repository.Revision;
import org.apache.lenya.cms.workflow.WorkflowUtil;
import org.apache.lenya.workflow.Version;
import org.apache.lenya.workflow.Workflow;
@@ -33,8 +32,6 @@
*/
public class Revisions extends SiteUsecase {
- private RCML rcml = null;
-
/**
* @see org.apache.lenya.cms.usecase.AbstractUsecase#initParameters() TODO
* filter out checkin entries
@@ -44,29 +41,19 @@
Document sourceDoc = getSourceDocument();
if (sourceDoc != null) {
try {
- this.rcml = sourceDoc.getRepositoryNode().getRcml();
- } catch (final Exception e) {
- throw new RuntimeException(e);
- }
-
- Vector entries;
- try {
- entries = this.rcml.getBackupEntries();
- } catch (final Exception e) {
- throw new RuntimeException(e);
- }
- setParameter("entries", entries);
+ History history = sourceDoc.getRepositoryNode().getHistory();
- Boolean canRollback;
- try {
- canRollback = new Boolean(WorkflowUtil.canInvoke(this.manager, getDocumentFactory()
- .getSession(), getLogger(), sourceDoc, getEvent()));
- } catch (final Exception e) {
- throw new RuntimeException(e);
- }
- setParameter("canRollback", canRollback);
+ int[] numbers = history.getRevisionNumbers();
+ Revision[] revisions = new Revision[numbers.length];
+ for (int i = 0; i < numbers.length; i++) {
+ revisions[i] = history.getRevision(numbers[i]);
+ }
+ setParameter("revisions", revisions);
+
+ Boolean canRollback = new Boolean(WorkflowUtil.canInvoke(this.manager,
+ getDocumentFactory().getSession(), getLogger(), sourceDoc, getEvent()));
+ setParameter("canRollback", canRollback);
- try {
if (WorkflowUtil.hasWorkflow(this.manager, getSession(), getLogger(), sourceDoc)) {
Workflowable workflowable = WorkflowUtil.getWorkflowable(this.manager,
getSession(), getLogger(), sourceDoc);
Modified: lenya/trunk/src/modules-core/sitemanagement/java/src/org/apache/lenya/cms/site/usecases/Rollback.java
URL: http://svn.apache.org/viewvc/lenya/trunk/src/modules-core/sitemanagement/java/src/org/apache/lenya/cms/site/usecases/Rollback.java?view=diff&rev=564507&r1=564506&r2=564507
==============================================================================
--- lenya/trunk/src/modules-core/sitemanagement/java/src/org/apache/lenya/cms/site/usecases/Rollback.java (original)
+++ lenya/trunk/src/modules-core/sitemanagement/java/src/org/apache/lenya/cms/site/usecases/Rollback.java Fri Aug 10 01:33:31 2007
@@ -52,12 +52,11 @@
protected void doExecute() throws Exception {
super.doExecute();
- String rollbackTime = getParameterAsString("rollbackTime");
+ int revision = getParameterAsInteger("rollbackRevision", -1);
Document document = getSourceDocument();
- long time = new Long(rollbackTime).longValue();
Node node = document.getRepositoryNode();
- node.getRcml().restoreBackup(node, time);
+ node.rollback(revision);
WorkflowUtil.invoke(this.manager, getSession(), getLogger(), getSourceDocument(),
getEvent());
Modified: lenya/trunk/src/modules-core/sitemanagement/java/src/org/apache/lenya/cms/site/usecases/SiteOverview.java
URL: http://svn.apache.org/viewvc/lenya/trunk/src/modules-core/sitemanagement/java/src/org/apache/lenya/cms/site/usecases/SiteOverview.java?view=diff&rev=564507&r1=564506&r2=564507
==============================================================================
--- lenya/trunk/src/modules-core/sitemanagement/java/src/org/apache/lenya/cms/site/usecases/SiteOverview.java (original)
+++ lenya/trunk/src/modules-core/sitemanagement/java/src/org/apache/lenya/cms/site/usecases/SiteOverview.java Fri Aug 10 01:33:31 2007
@@ -39,9 +39,7 @@
import org.apache.lenya.cms.publication.PublicationException;
import org.apache.lenya.cms.publication.PublicationUtil;
import org.apache.lenya.cms.publication.ResourceType;
-import org.apache.lenya.cms.rc.RCML;
-import org.apache.lenya.cms.rc.RCMLEntry;
-import org.apache.lenya.cms.rc.RevisionController;
+import org.apache.lenya.cms.repository.Node;
import org.apache.lenya.cms.site.SiteException;
import org.apache.lenya.cms.site.SiteManager;
import org.apache.lenya.cms.usecase.AbstractUsecase;
@@ -133,11 +131,9 @@
entry.setValue(KEY_WORKFLOW_STATE, "");
}
- if (documents[i].getRepositoryNode().isCheckedOut()) {
- RCML rcml = documents[i].getRepositoryNode().getRcml();
- RCMLEntry lastEntry = rcml.getLatestCheckOutEntry();
- String userId = lastEntry.getIdentity();
- entry.setValue(KEY_CHECKED_OUT, userId);
+ Node node = documents[i].getRepositoryNode();
+ if (node.isCheckedOut()) {
+ entry.setValue(KEY_CHECKED_OUT, node.getCheckoutUserId());
} else {
entry.setValue(KEY_CHECKED_OUT, "");
}
@@ -167,10 +163,6 @@
} catch (Exception e) {
throw new RuntimeException(e);
}
- }
-
- protected RevisionController getRevisionController() {
- return new RevisionController(getLogger());
}
/**
Modified: lenya/trunk/src/modules-core/sitemanagement/usecases/tab/revisions.jx
URL: http://svn.apache.org/viewvc/lenya/trunk/src/modules-core/sitemanagement/usecases/tab/revisions.jx?view=diff&rev=564507&r1=564506&r2=564507
==============================================================================
--- lenya/trunk/src/modules-core/sitemanagement/usecases/tab/revisions.jx (original)
+++ lenya/trunk/src/modules-core/sitemanagement/usecases/tab/revisions.jx Fri Aug 10 01:33:31 2007
@@ -53,10 +53,10 @@
);
}
- function rollback(toTime) {
+ function rollback(toRevision) {
window.location.href="?lenya.usecase=sitemanagement.rollback"
+ String.fromCharCode(38) // an & does not work, since it's not being decoded
- + "rollbackTime=" + toTime;
+ + "rollbackRevision=" + toRevision;
}
</script>
@@ -80,26 +80,26 @@
<th><i18n:text>Actions</i18n:text></th>
</tr>
- <jx:set var="count" value="${usecase.getParameter('entries').size()}"/>
+ <jx:set var="count" value="${usecase.getParameter('revisions').size()}"/>
<jx:set var="isFirstItem" value="true"/>
- <jx:forEach var="item" items="${usecase.getParameter('entries')}" begin="0">
+ <jx:forEach var="revision" items="${usecase.getParameter('revisions')}" begin="0">
<tr>
<td align="right">
<input
type="button"
i18n:attr="title"
- onclick="showRevision(${item.version});"
+ onclick="showRevision(${revision.getNumber()});"
title="view-revision-in-new-window"
- value="${item.version}"
+ value="${revision.getNumber()}"
/>
</td>
- <td align="right"><i18n:date-time src-pattern="yyyy-MM-dd HH:mm:ss"><jx:formatDate value="${item.time}" pattern="yyyy-MM-dd HH:mm:ss"/></i18n:date-time></td>
- <td><jx:out value="${item.identity}"/></td>
+ <td align="right"><i18n:date-time src-pattern="yyyy-MM-dd HH:mm:ss"><jx:formatDate value="${revision.getTime()}" pattern="yyyy-MM-dd HH:mm:ss"/></i18n:date-time></td>
+ <td><jx:out value="${revision.getUserId()}"/></td>
<td>
<input
type="button"
i18n:attr="value title"
- onclick="showRevision(${item.version});"
+ onclick="showRevision(${revision.getNumber()});"
title="view-revision-in-new-window"
value="view-revision"
/>
@@ -110,22 +110,12 @@
</jx:when>
<jx:when test="${usecase.getParameter('canRollback') == 'true'}">
 
- <input
- type="button"
- i18n:attr="value title"
- title="${rollbackMessage}"
- onclick="void rollback(${item.time});"
- value="rollback"
+ <input type="button" i18n:attr="value title" title="${rollbackMessage}" value="rollback"
+ onclick="void rollback(${revision.getNumber()});"
/>
</jx:when>
<jx:otherwise>
- <input
- type="button"
- i18n:attr="value title"
- title="${rollbackMessage}"
- disabled="disabled"
- value="rollback"
- />
+ <input type="button" i18n:attr="value title" title="${rollbackMessage}" disabled="disabled" value="rollback"/>
</jx:otherwise>
</jx:choose>
</td>
Modified: lenya/trunk/src/modules/sourcerepository/java/src/org/apache/lenya/cms/repository/SourceNode.java
URL: http://svn.apache.org/viewvc/lenya/trunk/src/modules/sourcerepository/java/src/org/apache/lenya/cms/repository/SourceNode.java?view=diff&rev=564507&r1=564506&r2=564507
==============================================================================
--- lenya/trunk/src/modules/sourcerepository/java/src/org/apache/lenya/cms/repository/SourceNode.java (original)
+++ lenya/trunk/src/modules/sourcerepository/java/src/org/apache/lenya/cms/repository/SourceNode.java Fri Aug 10 01:33:31 2007
@@ -36,7 +36,6 @@
import org.apache.lenya.cms.observation.RepositoryEventFactory;
import org.apache.lenya.cms.rc.RCML;
import org.apache.lenya.cms.rc.RevisionControlException;
-import org.apache.lenya.cms.rc.RevisionController;
import org.apache.lenya.transaction.Lock;
import org.apache.lenya.transaction.TransactionException;
import org.apache.lenya.transaction.Transactionable;
@@ -164,15 +163,6 @@
}
}
- private RevisionController revisionController;
-
- protected RevisionController getRevisionController() throws RepositoryException {
- if (this.revisionController == null) {
- this.revisionController = new RevisionController(getLogger());
- }
- return this.revisionController;
- }
-
private Lock lock;
/**
@@ -180,7 +170,7 @@
*/
public boolean hasChanged() throws RepositoryException {
try {
- int currentVersion = getRevisionController().getLatestVersion(this);
+ int currentVersion = getCurrentRevisionNumber();
int lockVersion = getLock().getVersion();
return currentVersion > lockVersion;
} catch (Exception e) {
@@ -188,6 +178,15 @@
}
}
+ protected int getCurrentRevisionNumber() {
+ if (getHistory().getRevisionNumbers().length > 0) {
+ return getHistory().getLatestRevision().getNumber();
+ }
+ else {
+ return 0;
+ }
+ }
+
/**
* @return The document node, if this is a meta data node, or the node
* itself otherwise.
@@ -232,13 +231,8 @@
if (getLogger().isDebugEnabled()) {
getLogger().debug("Locking [" + this + "]");
}
- int currentVersion;
- try {
- currentVersion = getRevisionController().getLatestVersion(this);
- } catch (Exception e) {
- throw new RepositoryException(e);
- }
try {
+ int currentVersion = getCurrentRevisionNumber();
this.lock = getSession().createLock(this, currentVersion);
} catch (TransactionException e) {
throw new RepositoryException(e);
@@ -361,7 +355,7 @@
private RCML rcml;
- public synchronized RCML getRcml() {
+ protected synchronized RCML getRcml() {
if (this.rcml == null) {
SourceNodeRcmlFactory factory = SourceNodeRcmlFactory.getInstance();
this.rcml = factory.getRcml(this, this.manager);
@@ -429,6 +423,37 @@
this.contentSource.delete();
this.metaSource.delete();
registerRemoved();
+ }
+
+ public String getCheckoutUserId() throws RepositoryException {
+ RCML rcml = getRcml();
+ synchronized (rcml) {
+ try {
+ if (!rcml.isCheckedOut()) {
+ throw new RepositoryException("The node [" + this + "] is not checked out!");
+ }
+ return rcml.getLatestEntry().getIdentity();
+ } catch (RevisionControlException e) {
+ throw new RepositoryException(e);
+ }
+ }
+ }
+
+ public void copyRevisionsFrom(Node source) throws RepositoryException {
+ try {
+ getRcml().copyFrom(this, source);
+ } catch (RevisionControlException e) {
+ throw new RepositoryException(e);
+ }
+ }
+
+ public void rollback(int revisionNumber) throws RepositoryException {
+ try {
+ long time = getHistory().getRevision(revisionNumber).getTime();
+ getRcml().restoreBackup(this, time);
+ } catch (RevisionControlException e) {
+ throw new RepositoryException(e);
+ }
}
}
Modified: lenya/trunk/src/modules/sourcerepository/java/src/org/apache/lenya/cms/repository/SourceNodeHistory.java
URL: http://svn.apache.org/viewvc/lenya/trunk/src/modules/sourcerepository/java/src/org/apache/lenya/cms/repository/SourceNodeHistory.java?view=diff&rev=564507&r1=564506&r2=564507
==============================================================================
--- lenya/trunk/src/modules/sourcerepository/java/src/org/apache/lenya/cms/repository/SourceNodeHistory.java (original)
+++ lenya/trunk/src/modules/sourcerepository/java/src/org/apache/lenya/cms/repository/SourceNodeHistory.java Fri Aug 10 01:33:31 2007
@@ -17,10 +17,14 @@
*/
package org.apache.lenya.cms.repository;
+import java.util.Vector;
+
import org.apache.avalon.framework.container.ContainerUtil;
import org.apache.avalon.framework.logger.AbstractLogEnabled;
import org.apache.avalon.framework.logger.Logger;
import org.apache.avalon.framework.service.ServiceManager;
+import org.apache.lenya.cms.rc.CheckInEntry;
+import org.apache.lenya.cms.rc.RCML;
/**
* Revision history implementation.
@@ -44,8 +48,13 @@
public Revision getLatestRevision() {
try {
- int latestRevisionNumber = this.node.getRcml().getLatestCheckInEntry().getVersion();
- return getRevision(latestRevisionNumber);
+ int[] numbers = getRevisionNumbers();
+ if (numbers.length > 0) {
+ return getRevision(numbers[0]);
+ }
+ else {
+ throw new RepositoryException("There is no revision for node [" + this.node + "] yet.");
+ }
} catch (Exception e) {
throw new RuntimeException(e);
}
@@ -53,6 +62,21 @@
public Revision getRevision(int number) throws RepositoryException {
return new SourceNodeRevision(this.node, number, this.manager, getLogger());
+ }
+
+ public int[] getRevisionNumbers() {
+ RCML rcml = this.node.getRcml();
+ try {
+ Vector entries = rcml.getBackupEntries();
+ int[] numbers = new int[entries.size()];
+ for (int i = 0; i < entries.size(); i++) {
+ CheckInEntry entry = (CheckInEntry) entries.get(i);
+ numbers[i] = entry.getVersion();
+ }
+ return numbers;
+ } catch (Exception e) {
+ throw new RuntimeException(e);
+ }
}
}
Modified: lenya/trunk/src/modules/sourcerepository/java/src/org/apache/lenya/cms/repository/SourceNodeRCML.java
URL: http://svn.apache.org/viewvc/lenya/trunk/src/modules/sourcerepository/java/src/org/apache/lenya/cms/repository/SourceNodeRCML.java?view=diff&rev=564507&r1=564506&r2=564507
==============================================================================
--- lenya/trunk/src/modules/sourcerepository/java/src/org/apache/lenya/cms/repository/SourceNodeRCML.java (original)
+++ lenya/trunk/src/modules/sourcerepository/java/src/org/apache/lenya/cms/repository/SourceNodeRCML.java Fri Aug 10 01:33:31 2007
@@ -532,7 +532,7 @@
SourceNode otherSourceNode = (SourceNode) otherNode;
SourceNode sourceNode = (SourceNode) node;
- SourceNodeRCML otherRcml = (SourceNodeRCML) otherNode.getRcml();
+ SourceNodeRCML otherRcml = (SourceNodeRCML) ((SourceNode) otherNode).getRcml();
try {
Modified: lenya/trunk/src/modules/sourcerepository/java/src/org/apache/lenya/cms/repository/SourceNodeRevision.java
URL: http://svn.apache.org/viewvc/lenya/trunk/src/modules/sourcerepository/java/src/org/apache/lenya/cms/repository/SourceNodeRevision.java?view=diff&rev=564507&r1=564506&r2=564507
==============================================================================
--- lenya/trunk/src/modules/sourcerepository/java/src/org/apache/lenya/cms/repository/SourceNodeRevision.java (original)
+++ lenya/trunk/src/modules/sourcerepository/java/src/org/apache/lenya/cms/repository/SourceNodeRevision.java Fri Aug 10 01:33:31 2007
@@ -42,6 +42,8 @@
private SourceNode node;
private int number;
private ServiceManager manager;
+ private long time = -1;
+ private String userId;
/**
* @param node The node.
@@ -56,9 +58,12 @@
ContainerUtil.enableLogging(this, logger);
}
- private long time = -1;
+ public long getTime() {
+ initialize();
+ return this.time;
+ }
- protected long getTime() {
+ protected void initialize() {
try {
if (this.time == -1) {
SourceNodeRCML rcml = (SourceNodeRCML) this.node.getRcml();
@@ -68,6 +73,7 @@
if (entry.getType() == RCML.ci
&& ((CheckInEntry) entry).getVersion() == this.number) {
this.time = entry.getTime();
+ this.userId = entry.getIdentity();
}
}
}
@@ -78,7 +84,6 @@
} catch (Exception e) {
throw new RuntimeException(e);
}
- return this.time;
}
public InputStream getInputStream() {
@@ -171,6 +176,11 @@
} catch (Exception e) {
throw new RepositoryException(e);
}
+ }
+
+ public String getUserId() {
+ initialize();
+ return this.userId;
}
}
Modified: lenya/trunk/src/modules/webdav/java/src/org/apache/lenya/cms/usecases/webdav/FilePropfind.java
URL: http://svn.apache.org/viewvc/lenya/trunk/src/modules/webdav/java/src/org/apache/lenya/cms/usecases/webdav/FilePropfind.java?view=diff&rev=564507&r1=564506&r2=564507
==============================================================================
--- lenya/trunk/src/modules/webdav/java/src/org/apache/lenya/cms/usecases/webdav/FilePropfind.java (original)
+++ lenya/trunk/src/modules/webdav/java/src/org/apache/lenya/cms/usecases/webdav/FilePropfind.java Fri Aug 10 01:33:31 2007
@@ -25,8 +25,7 @@
import org.apache.lenya.cms.publication.PublicationException;
import org.apache.lenya.cms.publication.PublicationUtil;
import org.apache.lenya.cms.publication.URLInformation;
-import org.apache.lenya.cms.rc.RCML;
-import org.apache.lenya.cms.rc.RCMLEntry;
+import org.apache.lenya.cms.repository.Node;
import org.apache.lenya.cms.site.usecases.SiteUsecase;
/**
@@ -56,12 +55,14 @@
Document doc = getTargetDocument(false);
docs.add(doc);
-
- RCMLEntry entry = doc.getRepositoryNode().getRcml().getLatestEntry();
- if ((entry != null) && (entry.getType() == RCML.co))
- checkedOut.add(entry);
- else
+
+ Node node = doc.getRepositoryNode();
+ if (node.isCheckedOut()) {
+ checkedOut.add(node.getCheckoutUserId());
+ }
+ else {
checkedOut.add(null);
+ }
setParameter(DOCUMENTS, docs);
setParameter(RC, checkedOut);
Modified: lenya/trunk/src/modules/webdav/java/src/org/apache/lenya/cms/usecases/webdav/Propfind.java
URL: http://svn.apache.org/viewvc/lenya/trunk/src/modules/webdav/java/src/org/apache/lenya/cms/usecases/webdav/Propfind.java?view=diff&rev=564507&r1=564506&r2=564507
==============================================================================
--- lenya/trunk/src/modules/webdav/java/src/org/apache/lenya/cms/usecases/webdav/Propfind.java (original)
+++ lenya/trunk/src/modules/webdav/java/src/org/apache/lenya/cms/usecases/webdav/Propfind.java Fri Aug 10 01:33:31 2007
@@ -26,8 +26,7 @@
import org.apache.lenya.cms.publication.Publication;
import org.apache.lenya.cms.publication.PublicationException;
import org.apache.lenya.cms.publication.PublicationUtil;
-import org.apache.lenya.cms.rc.RCML;
-import org.apache.lenya.cms.rc.RCMLEntry;
+import org.apache.lenya.cms.repository.Node;
import org.apache.lenya.cms.site.SiteManager;
import org.apache.lenya.cms.site.usecases.SiteUsecase;
@@ -87,11 +86,13 @@
if (test.equals(request)) {
docs.add(documents[i]);
- RCMLEntry entry = documents[i].getRepositoryNode().getRcml().getLatestEntry();
- if ((entry != null) && (entry.getType() == RCML.co))
- checkedOut.add(entry);
- else
+ Node node = documents[i].getRepositoryNode();
+ if (node.isCheckedOut()) {
+ checkedOut.add(node.getCheckoutUserId());
+ }
+ else {
checkedOut.add(null);
+ }
}
}