svn commit: r562400 - in /lenya/trunk/src/modules-core/sitemanagement: config/cocoon-xconf/tab/usecase-tab-revisions.xconf java/src/org/apache/lenya/cms/site/usecases/Revisions.java

[email protected]
Newsgroups gmane.comp.cms.lenya.cvs,gmane.spam.detected
Message-ID <[email protected]>
Author: andreas
Date: Fri Aug  3 03:02:14 2007
New Revision: 562400

URL: http://svn.apache.org/viewvc?view=rev&rev=562400
Log:
Revisions usecase: Removed NPE workaround, use parameter for workflow event

Modified:
    lenya/trunk/src/modules-core/sitemanagement/config/cocoon-xconf/tab/usecase-tab-revisions.xconf
    lenya/trunk/src/modules-core/sitemanagement/java/src/org/apache/lenya/cms/site/usecases/Revisions.java

Modified: lenya/trunk/src/modules-core/sitemanagement/config/cocoon-xconf/tab/usecase-tab-revisions.xconf
URL: http://svn.apache.org/viewvc/lenya/trunk/src/modules-core/sitemanagement/config/cocoon-xconf/tab/usecase-tab-revisions.xconf?view=diff&rev=562400&r1=562399&r2=562400
==============================================================================
--- lenya/trunk/src/modules-core/sitemanagement/config/cocoon-xconf/tab/usecase-tab-revisions.xconf (original)
+++ lenya/trunk/src/modules-core/sitemanagement/config/cocoon-xconf/tab/usecase-tab-revisions.xconf Fri Aug  3 03:02:14 2007
@@ -25,7 +25,8 @@
     <component-instance name="tab.revisions" logger="lenya.site" class="org.apache.lenya.cms.site.usecases.Revisions">
       <view template="modules/sitemanagement/usecases/tab/revisions.jx" menu="true">
         <tab group="site" name="revisions"/>
-      </view>
+      </view>
+      <parameter name="workflowEvent" value="edit"/>
       <exit usecase="tab.revisions"/>
     </component-instance>
   </xconf>

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=562400&r1=562399&r2=562400
==============================================================================
--- 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  3 03:02:14 2007
@@ -22,6 +22,9 @@
 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.Version;
+import org.apache.lenya.workflow.Workflow;
+import org.apache.lenya.workflow.Workflowable;
 
 /**
  * Usecase to display revisions of a resource.
@@ -32,8 +35,6 @@
 
     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
@@ -47,7 +48,7 @@
             } catch (final Exception e) {
                 throw new RuntimeException(e);
             }
-    
+
             Vector entries;
             try {
                 entries = this.rcml.getBackupEntries();
@@ -55,68 +56,58 @@
                 throw new RuntimeException(e);
             }
             setParameter("entries", entries);
-           
+
             Boolean canRollback;
-            try { 
-                canRollback = new Boolean(WorkflowUtil.canInvoke(
-                    this.manager, 
-                    getDocumentFactory().getSession(),
-                    getLogger(),
-                    sourceDoc,
-                    WORKFLOW_EVENT_EDIT));
+            try {
+                canRollback = new Boolean(WorkflowUtil.canInvoke(this.manager, getDocumentFactory()
+                        .getSession(), getLogger(), sourceDoc, getEvent()));
             } 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);
+                if (WorkflowUtil.hasWorkflow(this.manager, getSession(), getLogger(), sourceDoc)) {
+                    Workflowable workflowable = WorkflowUtil.getWorkflowable(this.manager,
+                            getSession(), getLogger(), sourceDoc);
+                    Version latestVersion = workflowable.getLatestVersion();
+                    String state;
+                    if (latestVersion != null) {
+                        state = latestVersion.getState();
+                    } else {
+                        Workflow workflow = WorkflowUtil.getWorkflowSchema(this.manager,
+                                getSession(), getLogger(), sourceDoc);
+                        state = workflow.getInitialState();
+                    }
+                    setParameter("workflowState", state);
+                }
             } catch (final Exception e) {
-                setParameter("workflowState", ""); //FIXME: should return Workflow.getInitialState(). But then again, there should not be an NPE 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);
-*/
+
+            /*
+             * // 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);
+             */
 
         }
+    }
+
+    protected String getEvent() {
+        return getParameterAsString("workflowEvent");
     }
 }
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.