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="        "/>
- <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="        "/>
+ <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)}">✓</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