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&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'}">
+  
+ <input
+ type="button"
+ i18n:attr="value title"
+ title="${rollbackMessage}"
+ onclick="?lenya.usecase=sitemanagement.rollback&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