You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lenya.apache.org by ne...@apache.org on 2007/07/30 01:13:51 UTC

svn commit: r560832 - in /lenya/trunk/src/modules-core/sitemanagement: java/src/org/apache/lenya/cms/site/usecases/Revisions.java resources/i18n/cmsui.xml resources/i18n/cmsui_de.xml usecases/tab/revisions.jx

Author: nettings
Date: Sun Jul 29 16:13:44 2007
New Revision: 560832

URL: http://svn.apache.org/viewvc?view=rev&rev=560832
Log:
disable rollback buttons when the workflow event cannot be invoked
this fixes http://issues.apache.org/bugzilla/show_bug.cgi?id=42973.

can somebody with insight into our workflowables please review
the java part?

one issue: in order to produce meaningful error messages, the view now
has knowledge about the "review" state... which is a little sad since otherwise
workflow transitions are fully configurable per publication.
solutions welcome.


Modified:
    lenya/trunk/src/modules-core/sitemanagement/java/src/org/apache/lenya/cms/site/usecases/Revisions.java
    lenya/trunk/src/modules-core/sitemanagement/resources/i18n/cmsui.xml
    lenya/trunk/src/modules-core/sitemanagement/resources/i18n/cmsui_de.xml
    lenya/trunk/src/modules-core/sitemanagement/usecases/tab/revisions.jx

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=560832&r1=560831&r2=560832
==============================================================================
--- 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 Sun Jul 29 16:13:44 2007
@@ -19,7 +19,10 @@
 
 import java.util.Vector;
 
+import org.apache.lenya.cms.publication.Document;
 import org.apache.lenya.cms.rc.RCML;
+import org.apache.lenya.cms.workflow.WorkflowUtil;
+import org.apache.lenya.workflow.WorkflowException;
 
 /**
  * Usecase to display revisions of a resource.
@@ -30,16 +33,18 @@
 
     private RCML rcml = null;
 
+    public static final String WORKFLOW_EVENT_EDIT = "edit";
+
     /**
      * @see org.apache.lenya.cms.usecase.AbstractUsecase#initParameters() TODO
      *      filter out checkin entries
      */
     protected void initParameters() {
         super.initParameters();
-        
-        if (getSourceDocument() != null) {
+        Document sourceDoc = getSourceDocument();
+        if (sourceDoc != null) {
             try {
-                this.rcml = getSourceDocument().getRepositoryNode().getRcml();
+                this.rcml = sourceDoc.getRepositoryNode().getRcml();
             } catch (final Exception e) {
                 throw new RuntimeException(e);
             }
@@ -51,7 +56,68 @@
                 throw new RuntimeException(e);
             }
             setParameter("entries", entries);
+           
+            Boolean canRollback;
+            try { 
+                canRollback = new Boolean(WorkflowUtil.canInvoke(
+                    this.manager, 
+                    getDocumentFactory().getSession(),
+                    getLogger(),
+                    sourceDoc,
+                    WORKFLOW_EVENT_EDIT));
+            } catch (final Exception e) {
+                throw new RuntimeException(e);
+            }
+            setParameter("canRollback", canRollback);
+
+            String workflowState;
+            try {
+                // looks like this throws a null pointer exception
+                // when a document has never been edited :(
+                // guess this should be fixed elsewhere. for now
+                // let's abuse the exception handler.
+                workflowState = WorkflowUtil.getWorkflowable(
+                    this.manager, 
+                    getDocumentFactory().getSession(),
+                    getLogger(),
+                    sourceDoc
+                ).getLatestVersion().getState();
+                setParameter("workflowState", workflowState);
+            } catch (final Exception e) {
+                setParameter("workflowState", ""); //FIXME: should return Workflow.getInitialState(). But then again, there should not be an NPÈ anyways...
+                //throw new RuntimeException(e);
+            }
+            
+/*
+            // since we need both state and canInvoke, we could deal with the avalon
+            // component ourselves rather than using WorkflowUtil - saves one
+            // service manager lookup.
+            // problem is that DocumentWorkflowable is not public and Workflowable is abstract :(
+
+            WorkflowManager wfManager = null;
+            String workflowState;
+            Boolean canRollback;
+            try {
+                wfManager = (WorkflowManager) this.manager.lookup(WorkflowManager.ROLE);
+                Workflowable workflowable = new DocumentWorkflowable(
+                    this.manager, 
+                    getDocumentFactory().getSession(),
+                    sourceDoc,
+                    getLogger()
+                );
+                workflowState = workflowable.getLatestVersion().getState();
+                canRollback = new Boolean(wfManager.canInvoke(workflowable, WORKFLOW_EVENT_EDIT));
+            } catch (ServiceException e) {
+                throw new RuntimeException(e);
+            } finally {
+                if (wfManager != null) {
+                    manager.release(wfManager);
+                }
+            }
+            setParameter("workflowState", workflowState);
+            setParameter("canRollback", canRollback);
+*/
+
         }
     }
-
-}
\ No newline at end of file
+}

Modified: lenya/trunk/src/modules-core/sitemanagement/resources/i18n/cmsui.xml
URL: http://svn.apache.org/viewvc/lenya/trunk/src/modules-core/sitemanagement/resources/i18n/cmsui.xml?view=diff&rev=560832&r1=560831&r2=560832
==============================================================================
--- lenya/trunk/src/modules-core/sitemanagement/resources/i18n/cmsui.xml (original)
+++ lenya/trunk/src/modules-core/sitemanagement/resources/i18n/cmsui.xml Sun Jul 29 16:13:44 2007
@@ -59,5 +59,15 @@
   <message key="Resource Type">Resource Type</message>
   <message key="Mime Type">Mime Type</message>
   <message key="Document Size">Document Size</message>
-  
+  <message key="no-rollback">Rollback is disabled.</message>
+  <message key="workflow-state">Workflow state is "{0}".</message>
+  <message key="view-revision-in-new-window">view revision in new window</message>  
+  <message key="view-revision">View revision</message>
+  <message key="is-current-version">(is current)</message>
+  <message key="rollback">Roll back</message>
+  <message key="rollback-ok">roll back to this version</message>
+  <message key="no-rollback-in-review">Rollback disabled. Document is in
+  review state.</message>
+  <message key="no-rollback-no-privileges">Rollback disabled. You do not
+  have sufficient privileges.</message>
 </catalogue>

Modified: lenya/trunk/src/modules-core/sitemanagement/resources/i18n/cmsui_de.xml
URL: http://svn.apache.org/viewvc/lenya/trunk/src/modules-core/sitemanagement/resources/i18n/cmsui_de.xml?view=diff&rev=560832&r1=560831&r2=560832
==============================================================================
--- lenya/trunk/src/modules-core/sitemanagement/resources/i18n/cmsui_de.xml (original)
+++ lenya/trunk/src/modules-core/sitemanagement/resources/i18n/cmsui_de.xml Sun Jul 29 16:13:44 2007
@@ -59,6 +59,16 @@
   <message key="Resource Type">Ressourcen-Typ</message>
   <message key="Mime Type">Mime-Type</message>
   <message key="Document Size">Größe des Dokuments</message>
-  
+  <message key="no-rollback">Rollback ist deaktiviert.</message>
+  <message key="workflow-state">Das Dokument ist im Arbeitsschritt "{0}".</message>
+  <message key="view-revision-in-new-window">Version in neuem Fenster ansehen</message>
+  <message key="view-revision">Version ansehen</message>
+  <message key="is-current-version">(aktuell)</message>
+  <message key="rollback">Wiederherstellen</message>
+  <message key="rollback-ok">diese Version wiederherstellen</message>
+  <message key="no-rollback-in-review">Im Arbeitsschritt "Freigabe" ist
+  keine Wiederherstellung möglich.</message>
+  <message key="no-rollback-no-privileges">Keine ausreichenden Rechte zum Wiederherstellen.</message>
+                   
 </catalogue>
 

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=560832&r1=560831&r2=560832
==============================================================================
--- lenya/trunk/src/modules-core/sitemanagement/usecases/tab/revisions.jx (original)
+++ lenya/trunk/src/modules-core/sitemanagement/usecases/tab/revisions.jx Sun Jul 29 16:13:44 2007
@@ -24,11 +24,29 @@
            xmlns:i18n="http://apache.org/cocoon/i18n/2.1" >
 
   <jx:import uri="fallback://lenya/modules/sitemanagement/usecases/tab/head.jx"/>
+
+  <jx:choose>
+    <jx:when test="${usecase.getParameter('canRollback') == 'true'}">
+      <jx:set var="rollbackMessage" value="rollback-ok"/>
+    </jx:when>
+    <jx:otherwise>
+      <jx:choose>
+        <jx:when test="${usecase.getParameter('workflowState') == 'review'}">
+          <jx:set var="rollbackMessage" value="no-rollback-in-review"/>
+        </jx:when>
+        <jx:otherwise>
+          <jx:set var="rollbackMessage" value="no-rollback-no-privileges"/>
+        </jx:otherwise>
+      </jx:choose>
+    </jx:otherwise>
+  </jx:choose>
+
   <page:body>
     <jx:import uri="fallback://lenya/modules/sitemanagement/usecases/tab/sitetree.jx"/>
     <jx:import uri="fallback://lenya/modules/usecase/templates/tabs.jx"/>
     <div id="contentblock1" class="lenya-tab-sitetree">
       <h1><i18n:text>Revisions</i18n:text></h1>
+    <form name="revisions">
     <table class="lenya-table-list-noborder">
       <tr>
         <th><i18n:text>No.</i18n:text></th>
@@ -37,29 +55,76 @@
         <th><i18n:text>Actions</i18n:text></th>
       </tr>
       <jx:set var="count" value="${usecase.getParameter('entries').size()}"/>
+<!--
       <jx:forEach var="item" items="${usecase.getParameter('entries')}" end="0">
         <tr>
-          <td><jx:out value="${item.version}"/></td>
+          <td><input type="button" disabled="disabled" value="${item.version}"/></td>
           <td align="right"><jx:formatDate value="${item.time}" pattern="yyyy-MM-dd HH:mm:ss"/></td>
           <td><jx:out value="${item.identity}"/></td>
           <td><i18n:text>Current Version</i18n:text></td>
         </tr>
       </jx:forEach>
-      <jx:forEach var="item" items="${usecase.getParameter('entries')}" begin="1">
+-->
+      <jx:set var="isFirstItem" value="true"/>
+      <jx:forEach var="item" items="${usecase.getParameter('entries')}" begin="0">
         <tr>
           <td align="right">
-            <a href="?lenya.revision=${item.version}" target="_blank"><jx:out value="${item.version}"/></a>
+            <input 
+               type="button" 
+               i18n:attr="title" 
+               onclick="window.open('?lenya.revision=${item.version}','Lenya_ViewRevision','menubar=no,addressbar=no,toolbar=no,statusbar=no');" 
+               title="view-revision-in-new-window"
+               value="${item.version}"
+            />
           </td>
           <td align="right"><jx:formatDate value="${item.time}" pattern="yyyy-MM-dd HH:mm:ss"/></td>
           <td><jx:out value="${item.identity}"/></td>
           <td>
-            <a href="?lenya.usecase=sitemanagement.rollback&amp;rollbackTime=${item.time}">
-              <i18n:text>Rollback to this version</i18n:text>
-            </a>
+            <input 
+               type="button" 
+               i18n:attr="value title" 
+               onclick="window.open('?lenya.revision=${item.version}','Lenya_ViewRevision','menubar=no,addressbar=no,toolbar=no,statusbar=no');" 
+               title="view-revision-in-new-window"
+               value="view-revision"
+            />
+            <jx:choose>
+              <jx:when test="${isFirstItem == 'true'}">
+                <jx:set var="isFirstItem" value="false"/>
+                <i18n:text key="is-current-version"/>
+              </jx:when>
+              <jx:when test="${usecase.getParameter('canRollback') == 'true'}">
+                &#160;
+                <input 
+                  type="button" 
+                  i18n:attr="value title"
+                  title="${rollbackMessage}" 
+                  onclick="?lenya.usecase=sitemanagement.rollback&amp;rollbackTime=${item.time}" 
+                  value="rollback"
+                />
+              </jx:when>
+              <jx:otherwise>
+                <input 
+                  type="button" 
+                  i18n:attr="value title"
+                  title="${rollbackMessage}"
+                  disabled="disabled"
+                  value="rollback"
+                />
+              </jx:otherwise>
+            </jx:choose>
           </td>
         </tr>
       </jx:forEach>
+      <jx:if test="${usecase.getParameter('canRollback') != 'true'}">
+        <tr>
+          <td/>
+          <td colspan="3">
+            <strong><i18n:text key="${rollbackMessage}"/></strong>
+          </td>
+        </tr>
+      </jx:if>
     </table>
+    </form>
     </div>
   </page:body>
 </page:page>



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