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]
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 &amp; 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'}">
                     &#160;
-                    <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);
+                    }
                 }
             }
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.