You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lenya.apache.org by an...@apache.org on 2008/04/16 00:11:57 UTC

svn commit: r648431 - in /lenya/trunk/src/modules-core/workflow: config/cocoon-xconf/ java/src/org/apache/lenya/cms/workflow/usecases/ resources/i18n/ usecases/

Author: andreas
Date: Tue Apr 15 15:11:53 2008
New Revision: 648431

URL: http://svn.apache.org/viewvc?rev=648431&view=rev
Log:
Enhanced workflow overview: show variable states, keep usecase order.

Modified:
    lenya/trunk/src/modules-core/workflow/config/cocoon-xconf/usecase-workflow-multiWorkflow.xconf
    lenya/trunk/src/modules-core/workflow/java/src/org/apache/lenya/cms/workflow/usecases/Deactivate.java
    lenya/trunk/src/modules-core/workflow/java/src/org/apache/lenya/cms/workflow/usecases/MultiWorkflow.java
    lenya/trunk/src/modules-core/workflow/java/src/org/apache/lenya/cms/workflow/usecases/WorkflowableWrapper.java
    lenya/trunk/src/modules-core/workflow/resources/i18n/cmsui.xml
    lenya/trunk/src/modules-core/workflow/resources/i18n/cmsui_de.xml
    lenya/trunk/src/modules-core/workflow/usecases/multiWorkflow.jx

Modified: lenya/trunk/src/modules-core/workflow/config/cocoon-xconf/usecase-workflow-multiWorkflow.xconf
URL: http://svn.apache.org/viewvc/lenya/trunk/src/modules-core/workflow/config/cocoon-xconf/usecase-workflow-multiWorkflow.xconf?rev=648431&r1=648430&r2=648431&view=diff
==============================================================================
--- lenya/trunk/src/modules-core/workflow/config/cocoon-xconf/usecase-workflow-multiWorkflow.xconf (original)
+++ lenya/trunk/src/modules-core/workflow/config/cocoon-xconf/usecase-workflow-multiWorkflow.xconf Tue Apr 15 15:11:53 2008
@@ -25,13 +25,14 @@
     <component-instance name="workflow.multiWorkflow" logger="lenya.workflow" class="org.apache.lenya.cms.workflow.usecases.MultiWorkflow">
       <view uri="modules/workflow/usecases/multiWorkflow.jx" menu="true" createContinuation="false"/>
       <exit usecase="workflow.multiWorkflow"/>
+      <variable name="is_live"/>
       <usecase name="workflow.submit" event="submit"/>
-      <usecase name="workflow.publish" event="publish"/>
       <usecase name="workflow.reject" event="reject"/>
+      <usecase name="workflow.publish" event="publish"/>
       <usecase name="workflow.deactivate" event="deactivate"/>
       <usecase name="sitemanagement.delete" event="delete"/>
       <usecase name="sitemanagement.archive" event="archive"/>
-      <usecase name="sitemanagement.restore" event="restore"/>
+      <usecase name="sitemanagement.restore" event="restore"/>
       <parameter name="style" value="text"/>
     </component-instance>
   </xconf>

Modified: lenya/trunk/src/modules-core/workflow/java/src/org/apache/lenya/cms/workflow/usecases/Deactivate.java
URL: http://svn.apache.org/viewvc/lenya/trunk/src/modules-core/workflow/java/src/org/apache/lenya/cms/workflow/usecases/Deactivate.java?rev=648431&r1=648430&r2=648431&view=diff
==============================================================================
--- lenya/trunk/src/modules-core/workflow/java/src/org/apache/lenya/cms/workflow/usecases/Deactivate.java (original)
+++ lenya/trunk/src/modules-core/workflow/java/src/org/apache/lenya/cms/workflow/usecases/Deactivate.java Tue Apr 15 15:11:53 2008
@@ -141,7 +141,7 @@
     }
     
     /**
-     * A list of links pointing to a document. Allows lazy loading rom the usecase view.
+     * A list of links pointing to a document. Allows lazy loading from the usecase view.
      */
     public static class LinkList {
         

Modified: lenya/trunk/src/modules-core/workflow/java/src/org/apache/lenya/cms/workflow/usecases/MultiWorkflow.java
URL: http://svn.apache.org/viewvc/lenya/trunk/src/modules-core/workflow/java/src/org/apache/lenya/cms/workflow/usecases/MultiWorkflow.java?rev=648431&r1=648430&r2=648431&view=diff
==============================================================================
--- lenya/trunk/src/modules-core/workflow/java/src/org/apache/lenya/cms/workflow/usecases/MultiWorkflow.java (original)
+++ lenya/trunk/src/modules-core/workflow/java/src/org/apache/lenya/cms/workflow/usecases/MultiWorkflow.java Tue Apr 15 15:11:53 2008
@@ -46,9 +46,7 @@
  */
 public class MultiWorkflow extends AbstractUsecase {
 
-    protected void initParameters() {
-        super.initParameters();
-
+    protected void prepareView() {
         try {
             List preOrder = getNodes();
             List wrappers = new ArrayList();
@@ -62,6 +60,8 @@
             }
             setParameter("documents", wrappers);
             setParameter("states", states);
+            setParameter("usecases", this.usecases);
+            setParameter("variables", this.variables);
 
         } catch (Exception e) {
             throw new RuntimeException(e);
@@ -105,7 +105,9 @@
         return preOrder;
     }
 
+    private List usecases = new ArrayList();
     private Map usecase2event = new HashMap();
+    private List variables = new ArrayList();
 
     public void configure(Configuration config) throws ConfigurationException {
         super.configure(config);
@@ -114,8 +116,13 @@
         for (int i = 0; i < usecaseConfigs.length; i++) {
             String usecase = usecaseConfigs[i].getAttribute("name");
             String event = usecaseConfigs[i].getAttribute("event");
+            this.usecases.add(usecase);
             this.usecase2event.put(usecase, event);
         }
+        Configuration[] varConfigs = config.getChildren("variable");
+        for (int i = 0; i < varConfigs.length; i++) {
+            this.variables.add(varConfigs[i].getAttribute("name"));
+        }
     }
 
     /**
@@ -131,6 +138,10 @@
             }
         }
         return (String[]) usecases.toArray(new String[usecases.size()]);
+    }
+
+    public String getEvent(String usecase) {
+        return (String) this.usecase2event.get(usecase);
     }
 
 }

Modified: lenya/trunk/src/modules-core/workflow/java/src/org/apache/lenya/cms/workflow/usecases/WorkflowableWrapper.java
URL: http://svn.apache.org/viewvc/lenya/trunk/src/modules-core/workflow/java/src/org/apache/lenya/cms/workflow/usecases/WorkflowableWrapper.java?rev=648431&r1=648430&r2=648431&view=diff
==============================================================================
--- lenya/trunk/src/modules-core/workflow/java/src/org/apache/lenya/cms/workflow/usecases/WorkflowableWrapper.java (original)
+++ lenya/trunk/src/modules-core/workflow/java/src/org/apache/lenya/cms/workflow/usecases/WorkflowableWrapper.java Tue Apr 15 15:11:53 2008
@@ -18,8 +18,6 @@
 package org.apache.lenya.cms.workflow.usecases;
 
 import java.util.Arrays;
-import java.util.SortedSet;
-import java.util.TreeSet;
 
 import org.apache.avalon.framework.container.ContainerUtil;
 import org.apache.avalon.framework.logger.AbstractLogEnabled;
@@ -122,21 +120,31 @@
     }
 
     /**
-     * @return All executable events in alphabetical order.
+     * @param usecaseName The usecase name.
+     * @return if the usecase can be invoked.
      * @throws WorkflowException if an error occurs.
      */
-    public String[] getUsecases() throws WorkflowException {
-        SortedSet usecases = new TreeSet();
-        String[] events = getWorkflowSchema().getEvents();
-        for (int i = 0; i < events.length; i++) {
-            if (WorkflowUtil.canInvoke(this.manager, this.session, getLogger(), this.document,
-                    events[i])) {
-                String[] eventUsecases = this.usecase.getUsecases(events[i]);
-                usecases.addAll(Arrays.asList(eventUsecases));
-            }
+    public boolean canInvoke(String usecaseName) throws WorkflowException {
+        String event = this.usecase.getEvent(usecaseName);
+        return WorkflowUtil.canInvoke(this.manager, this.session, getLogger(), this.document,
+                event);
+    }
+    
+    /**
+     * Returns the current value of a workflow variable.
+     * @param variable The name of the variable.
+     * @return The value.
+     * @throws WorkflowException if an error occurs. 
+     */
+    public boolean getValue(String variable) throws WorkflowException {
+        Workflowable workflowable = WorkflowUtil.getWorkflowable(this.manager, this.session, getLogger(), this.document);
+        if (workflowable.getVersions().length == 0) {
+            Workflow workflow = WorkflowUtil.getWorkflowSchema(this.manager, this.session, getLogger(), this.document);
+            return workflow.getInitialValue(variable);
+        }
+        else {
+            return workflowable.getLatestVersion().getValue(variable);
         }
-
-        return (String[]) usecases.toArray(new String[usecases.size()]);
     }
     
     /**

Modified: lenya/trunk/src/modules-core/workflow/resources/i18n/cmsui.xml
URL: http://svn.apache.org/viewvc/lenya/trunk/src/modules-core/workflow/resources/i18n/cmsui.xml?rev=648431&r1=648430&r2=648431&view=diff
==============================================================================
--- lenya/trunk/src/modules-core/workflow/resources/i18n/cmsui.xml (original)
+++ lenya/trunk/src/modules-core/workflow/resources/i18n/cmsui.xml Tue Apr 15 15:11:53 2008
@@ -23,15 +23,9 @@
 
   <message key="http://apache.org/lenya/metadata/workflow/1.0">Workflow</message>
   <message key="workflowVersion">Workflow versions</message>
-  <message key="workflow.multiWorkflow">Workflow Overview</message>
-  <message key="back-to-document">Back to document</message>
   <message key="workflow.reject">Reject</message>
   <message key="workflow.publish">Publish</message>
   <message key="workflow.deactivate">Deactivate</message>
-  <message key="Path">Path</message>
-  <message key="Actions">Actions</message>
-  <message key="state-as-text">State as text</message>
-  <message key="state-as-columns">State as columns</message>
   <message key="publish-missing-documents">
     The document can't be published unless the following documents are published:
   </message>
@@ -69,5 +63,14 @@
   
   <message key="last-published">This page was last published at {0} by {1}.</message>
   <message key="never-published">This page has not been published yet.</message>
+  
+  <!-- workflow overview -->
+  <message key="back-to-document">Back to document</message>
+  <message key="Path">Path</message>
+  <message key="Actions">Actions</message>
+  <message key="state-as-text">State as text</message>
+  <message key="state-as-columns">State as columns</message>
+  <message key="workflow.multiWorkflow">Workflow Overview</message>
+  <message key="is_live">Live</message>
   
 </catalogue>

Modified: lenya/trunk/src/modules-core/workflow/resources/i18n/cmsui_de.xml
URL: http://svn.apache.org/viewvc/lenya/trunk/src/modules-core/workflow/resources/i18n/cmsui_de.xml?rev=648431&r1=648430&r2=648431&view=diff
==============================================================================
--- lenya/trunk/src/modules-core/workflow/resources/i18n/cmsui_de.xml (original)
+++ lenya/trunk/src/modules-core/workflow/resources/i18n/cmsui_de.xml Tue Apr 15 15:11:53 2008
@@ -23,13 +23,7 @@
 
   <message key="http://apache.org/lenya/metadata/workflow/1.0">Workflow</message>
   <message key="workflowVersion">Workflow-Versionen</message>
-  <message key="workflow.multiWorkflow">Workflow-Übersicht</message>
-  <message key="back-to-document">Zurück zum Dokument</message>
-  <message key="workflow.publish">Publizieren</message>
-  <message key="Path">Pfad</message>
-  <message key="Actions">Aktionen</message>
-  <message key="state-as-text">Zustand als Text</message>
-  <message key="state-as-columns">Zustand als Spalten</message>
+  <message key="workflow.publish">Publizieren</message>
   <message key="publish-missing-documents">
     Das Dokument kann nicht publiziert werden, solange die folgenden Dokumente nicht publiziert sind:
   </message>
@@ -70,6 +64,14 @@
   <message key="last-published">Diese Seite wurde zuletzt publiziert am {0} von {1}.</message>
   <message key="never-published">Diese Seite wurde noch nicht publiziert.</message>
   
+  <!-- workflow overview -->
+  <message key="workflow.multiWorkflow">Workflow-Übersicht</message>
+  <message key="back-to-document">Zurück zum Dokument</message>
+  <message key="Path">Pfad</message>
+  <message key="Actions">Aktionen</message>
+  <message key="state-as-text">Zustand als Text</message>
+  <message key="state-as-columns">Zustand als Spalten</message>
+  <message key="is_live">Live</message>
   
 </catalogue>
 

Modified: lenya/trunk/src/modules-core/workflow/usecases/multiWorkflow.jx
URL: http://svn.apache.org/viewvc/lenya/trunk/src/modules-core/workflow/usecases/multiWorkflow.jx?rev=648431&r1=648430&r2=648431&view=diff
==============================================================================
--- lenya/trunk/src/modules-core/workflow/usecases/multiWorkflow.jx (original)
+++ lenya/trunk/src/modules-core/workflow/usecases/multiWorkflow.jx Tue Apr 15 15:11:53 2008
@@ -24,100 +24,127 @@
   xmlns:i18n="http://apache.org/cocoon/i18n/2.1"    
   >
   
-  <page:title><i18n:text><jx:out value="${usecase.getName()}"/></i18n:text></page:title>
   <page:body>
     <jx:set var="style" value="${usecase.getParameter('style')}"/>
-    
-    <form style="display: inline;">
-      <input type="submit" value="back-to-document" i18n:attr="value"/>
-    </form>
-    
-    <form style="display: inline;">
-      <input type="hidden" name="lenya.usecase" value="${usecase.getName()}"/>
-      <jx:choose>
-        <jx:when test="${style.equals('text')}">
-          <input type="hidden" name="style" value="columns"/>
-          <input type="submit" name="submit" value="state-as-columns" i18n:attr="value"/>
-        </jx:when>
-        <jx:otherwise>
-          <input type="hidden" name="style" value="text"/>
-          <input type="submit" name="submit" value="state-as-text" i18n:attr="value"/>
-        </jx:otherwise>
-      </jx:choose>
-    </form>
-    
-    <br/><br/>
-    
-    <jx:import uri="fallback://lenya/modules/usecase/templates/messages.jx"/>
-    
-    <table class="lenya-table-list">
+    <jx:set var="variables" value="${usecase.getParameter('variables')}"/>
+    <div style="float: left;">
+      <h2>
+        <div style="float: right;">
+          <form style="display: inline;">
+            <input type="submit" value="back-to-document" i18n:attr="value"/>
+          </form>
+          
+          <form style="display: inline;">
+            <input type="hidden" name="lenya.usecase" value="${usecase.getName()}"/>
+            <jx:choose>
+              <jx:when test="${style.equals('text')}">
+                <input type="hidden" name="style" value="columns"/>
+                <input type="submit" name="submit" value="state-as-columns" i18n:attr="value"/>
+              </jx:when>
+              <jx:otherwise>
+                <input type="hidden" name="style" value="text"/>
+                <input type="submit" name="submit" value="state-as-text" i18n:attr="value"/>
+              </jx:otherwise>
+            </jx:choose>
+          </form>
+        </div>
+        <i18n:text><jx:out value="${usecase.getName()}"/></i18n:text>
+      </h2>
       
-      <tr>
-        <th><i18n:text>Path</i18n:text></th>
-        <th><i18n:text>Language</i18n:text></th>
-        <jx:choose>
-          <jx:when test="${style.equals('text')}">
-            <th><i18n:text>State</i18n:text></th>
-          </jx:when>
-          <jx:otherwise>
-            <jx:forEach var="state" items="${usecase.getParameter('states')}">
-              <th><i18n:text><jx:out value="${state}"/></i18n:text></th>
-            </jx:forEach>
-          </jx:otherwise>
-        </jx:choose>
-        <th><i18n:text>Actions</i18n:text></th>
-      </tr>
+      <jx:import uri="fallback://lenya/modules/usecase/templates/messages.jx"/>
       
-      <jx:forEach var="doc" items="${usecase.getParameter('documents')}">
+      <table class="lenya-table-list">
+        
         <tr>
-          <jx:set var="path" value="${doc.getPath()}"/>
-          <jx:set var="depth" value="${path.split('/').size() - 2}"/>
-          <jx:set var="whitespace" value="&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;"/>
-          <jx:set var="indent" value="${whitespace.substring(0, depth.intValue())}"/>
-          <jx:set var="lastSlashIndex" value="${java.lang.Integer.valueOf(path.lastIndexOf('/'))}"/>
-          <jx:set var="nodeName" value="${path.substring(lastSlashIndex.intValue())}"/>
-          <jx:set var="languages" value="${doc.getLanguages()}"/>
-          <jx:if test="${doc.getLanguage().equals(java.util.Arrays.asList(languages).get(0))}">
-            <td rowspan="${doc.getLanguages().size()}" style="vertical-align: top">
-              <jx:out value="${indent}"/><jx:out value="${indent}"/><jx:out value="${indent}"/><jx:out value="${indent}"/><jx:out value="${nodeName}"/>
-            </td>
-          </jx:if>
-          <td>
-            <a href="${doc.getUrl()}"><jx:out value="${doc.getLanguage()}"/></a>
-          </td>
+          <th><i18n:text>Path</i18n:text></th>
+          <th><i18n:text>Language</i18n:text></th>
           <jx:choose>
             <jx:when test="${style.equals('text')}">
-              <td>
-                <i18n:text><jx:out value="${doc.getState()}"/></i18n:text>
-              </td>
+              <th><i18n:text>State</i18n:text></th>
             </jx:when>
             <jx:otherwise>
               <jx:forEach var="state" items="${usecase.getParameter('states')}">
-                <jx:choose>
-                  <jx:when test="${state.equals(doc.getState())}">
-                    <td style="text-align: center">x</td>
-                  </jx:when>
-                  <jx:otherwise>
-                    <td/>
-                  </jx:otherwise>
-                </jx:choose>
+                <th><i18n:text><jx:out value="${state}"/></i18n:text></th>
               </jx:forEach>
             </jx:otherwise>
           </jx:choose>
-          <td>
-            <jx:forEach var="usecaseName" items="${doc.getUsecases()}">
+          <jx:forEach var="variable" items="${variables}">
+            <th><i18n:text>${variable}</i18n:text></th>
+          </jx:forEach>
+          <th colspan="${usecase.getParameter('usecases').size()}"><i18n:text>Actions</i18n:text></th>
+        </tr>
+        
+        <jx:forEach var="doc" items="${usecase.getParameter('documents')}">
+          <tr>
+            <jx:set var="path" value="${doc.getPath()}"/>
+            <jx:set var="depth" value="${path.split('/').size() - 2}"/>
+            <jx:set var="whitespace" value="&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;"/>
+            <jx:set var="indent" value="${whitespace.substring(0, depth.intValue())}"/>
+            <jx:set var="lastSlashIndex" value="${java.lang.Integer.valueOf(path.lastIndexOf('/'))}"/>
+            <jx:set var="nodeName" value="${path.substring(lastSlashIndex.intValue())}"/>
+            <jx:set var="languages" value="${doc.getLanguages()}"/>
+            <jx:if test="${doc.getLanguage().equals(java.util.Arrays.asList(languages).get(0))}">
+              <td rowspan="${doc.getLanguages().size()}" style="vertical-align: top">
+                <jx:out value="${indent}"/><jx:out value="${indent}"/><jx:out value="${indent}"/><jx:out value="${indent}"/><jx:out value="${nodeName}"/>
+              </td>
+            </jx:if>
+            <td>
+              <a href="${doc.getUrl()}"><jx:out value="${doc.getLanguage()}"/></a>
+            </td>
+            <jx:choose>
+              <jx:when test="${style.equals('text')}">
+                <td>
+                  <i18n:text><jx:out value="${doc.getState()}"/></i18n:text>
+                </td>
+              </jx:when>
+              <jx:otherwise>
+                <jx:forEach var="state" items="${usecase.getParameter('states')}">
+                  <jx:choose>
+                    <jx:when test="${state.equals(doc.getState())}">
+                      <td style="text-align: center">x</td>
+                    </jx:when>
+                    <jx:otherwise>
+                      <td/>
+                    </jx:otherwise>
+                  </jx:choose>
+                </jx:forEach>
+              </jx:otherwise>
+            </jx:choose>
+            <jx:forEach var="variable" items="${variables}">
+              <td style="text-align: center">
+                <jx:choose>
+                  <jx:when test="${doc.getValue(variable)}">&#x2713;</jx:when>
+                  <jx:otherwise><span style="color: #999999">-</span></jx:otherwise>
+                </jx:choose>
+              </td>
+            </jx:forEach>
+            <!--
+              <jx:forEach var="usecaseName" items="${doc.getUsecases()}">
               <form action="${usecase.getSourceURL()}" method="POST" id="form-overview" style="display: inline;">
-                <input type="hidden" name="lenya.usecase" value="workflow.multiWorkflowInvoke"/>
-                <input type="hidden" name="usecaseName" value="${usecaseName}"/>
-                <input type="hidden" name="url" value="${doc.getUrl()}"/>
-                <input type="submit" name="submit" value="${usecaseName}" i18n:attr="value"/>
+              <input type="hidden" name="lenya.usecase" value="workflow.multiWorkflowInvoke"/>
+              <input type="hidden" name="usecaseName" value="${usecaseName}"/>
+              <input type="hidden" name="url" value="${doc.getUrl()}"/>
+              <input type="submit" name="submit" value="${usecaseName}" i18n:attr="value"/>
               </form>
+              </jx:forEach>
+            -->
+            <jx:set var="usecases" value="${usecase.getParameter('usecases')}"/>
+            <jx:forEach var="usecaseName" items="${usecases}">
+              <td style="padding-right: 0px; padding-left: 0px;">
+                <jx:if test="${doc.canInvoke(usecaseName)}">
+                  <form action="${usecase.getSourceURL()}" method="POST" id="form-overview" style="display: inline; padding-right: 4px;">
+                    <input type="hidden" name="lenya.usecase" value="workflow.multiWorkflowInvoke"/>
+                    <input type="hidden" name="usecaseName" value="${usecaseName}"/>
+                    <input type="hidden" name="url" value="${doc.getUrl()}"/>
+                    <input type="submit" name="submit" value="${usecaseName}" i18n:attr="value"/>
+                  </form>
+                </jx:if>
+              </td>
             </jx:forEach>
-          </td>
-        </tr>
-      </jx:forEach>
-      
-    </table>
-    
+          </tr>
+        </jx:forEach>
+        
+      </table>
+    </div>
   </page:body>
 </page:page>



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