Author: roy.russo(a)jboss.com
Date: 2007-01-22 15:08:21 -0500 (Mon, 22 Jan 2007)
New Revision: 6068
Added:
trunk/core-cms/src/resources/portal-cms-war/WEB-INF/jsp/cms/admin/pending_items.jsp
Modified:
trunk/core-cms/src/main/org/jboss/portal/core/cms/ui/admin/CMSAdminPortlet.java
trunk/core-cms/src/resources/portal-cms-war/WEB-INF/classes/Resource.properties
trunk/core-cms/src/resources/portal-cms-war/WEB-INF/jsp/cms/admin/main.jsp
trunk/workflow/src/main/org/jboss/portal/workflow/cms/ApprovePublish.java
trunk/workflow/src/main/org/jboss/portal/workflow/cms/ApprovePublishImpl.java
Log:
JBPORTAL-1153 - ui for workflows added. modified jbpm accessor methods to retrieve list of
all pending items.
Modified: trunk/core-cms/src/main/org/jboss/portal/core/cms/ui/admin/CMSAdminPortlet.java
===================================================================
---
trunk/core-cms/src/main/org/jboss/portal/core/cms/ui/admin/CMSAdminPortlet.java 2007-01-22
19:39:41 UTC (rev 6067)
+++
trunk/core-cms/src/main/org/jboss/portal/core/cms/ui/admin/CMSAdminPortlet.java 2007-01-22
20:08:21 UTC (rev 6068)
@@ -511,6 +511,29 @@
javax.portlet.PortletRequestDispatcher prd =
getPortletContext().getRequestDispatcher(CMSAdminConstants.CMS_JSP_PATH +
"/securenode.jsp");
prd.include(rReq, rRes);
}
+ else if (CMSAdminConstants.OP_VIEWPENDING.equals(op))
+ {
+ String sPath = rReq.getParameter("path");
+
+ if (this.getApprovePublish() != null)
+ {
+ try
+ {
+ Collection pendingQueue =
this.getApprovePublish().getAllPendingInQueue();
+ rReq.setAttribute("pendingQueue", pendingQueue);
+ }
+ catch (WorkflowException we)
+ {
+ rReq.setAttribute("pendingQueue", null);
+ }
+ }
+
+ rRes.setContentType("text/html");
+ rReq.setAttribute("currpath", sPath);
+
+ javax.portlet.PortletRequestDispatcher prd =
getPortletContext().getRequestDispatcher(CMSAdminConstants.CMS_JSP_PATH +
"/pending_items.jsp");
+ prd.include(rReq, rRes);
+ }
}
public void processAction(final JBossActionRequest aReq, final JBossActionResponse
aRes) throws PortletException
Modified: trunk/core-cms/src/resources/portal-cms-war/WEB-INF/classes/Resource.properties
===================================================================
---
trunk/core-cms/src/resources/portal-cms-war/WEB-INF/classes/Resource.properties 2007-01-22
19:39:41 UTC (rev 6067)
+++
trunk/core-cms/src/resources/portal-cms-war/WEB-INF/classes/Resource.properties 2007-01-22
20:08:21 UTC (rev 6068)
@@ -87,4 +87,5 @@
CMS_APPROVE=Approve
CMS_DENY=Deny
CMS_APPROVAL=Pending Items
+CMS_PATH=Location
\ No newline at end of file
Modified: trunk/core-cms/src/resources/portal-cms-war/WEB-INF/jsp/cms/admin/main.jsp
===================================================================
--- trunk/core-cms/src/resources/portal-cms-war/WEB-INF/jsp/cms/admin/main.jsp 2007-01-22
19:39:41 UTC (rev 6067)
+++ trunk/core-cms/src/resources/portal-cms-war/WEB-INF/jsp/cms/admin/main.jsp 2007-01-22
20:08:21 UTC (rev 6068)
@@ -94,6 +94,10 @@
<portlet:param name="path" value="<%= sCurrPath %>"/>
<portlet:param name="returnOp" value="<%=
CMSAdminConstants.OP_MAIN %>"/>
</portlet:renderURL>">${n:i18n("CMS_SECURE")}</a></li>
+ <li><a href="<portlet:renderURL>
+ <portlet:param name="op" value="<%=
CMSAdminConstants.OP_VIEWPENDING %>"/>
+ <portlet:param name="path" value="<%= sCurrPath %>"/>
+
</portlet:renderURL>">${n:i18n("CMS_APPROVAL")}</a></li>
<%
if (!"/".equals(sCurrPath))
{
@@ -150,7 +154,7 @@
<portlet:param name="op" value="<%=
CMSAdminConstants.OP_MAIN %>"/>
<portlet:param name="path" value="<%= folder.getBasePath()
%>"/>
</portlet:renderURL>"><%=
- folder.getBasePath().substring(folder.getBasePath().lastIndexOf("/") + 1,
folder.getBasePath().length()) %>
+ folder.getBasePath().substring(folder.getBasePath().lastIndexOf("/") + 1,
folder.getBasePath().length()) %>
</a>
</td>
<td>
@@ -211,7 +215,7 @@
<portlet:param name="path"
value="<%= file.getBasePath() %>"/>
</portlet:renderURL>"><%=
- file.getBasePath().substring(file.getBasePath().lastIndexOf("/") + 1,
file.getBasePath().length()) %>
+ file.getBasePath().substring(file.getBasePath().lastIndexOf("/") + 1,
file.getBasePath().length()) %>
</a>
</td>
<td>
Added:
trunk/core-cms/src/resources/portal-cms-war/WEB-INF/jsp/cms/admin/pending_items.jsp
===================================================================
--- trunk/core-cms/src/resources/portal-cms-war/WEB-INF/jsp/cms/admin/pending_items.jsp
(rev 0)
+++
trunk/core-cms/src/resources/portal-cms-war/WEB-INF/jsp/cms/admin/pending_items.jsp 2007-01-22
20:08:21 UTC (rev 6068)
@@ -0,0 +1,129 @@
+<%@ page language="java"
extends="org.jboss.portal.core.servlet.jsp.PortalJsp" %>
+<%@ taglib
uri="http://java.sun.com/portlet" prefix="portlet"
%>
+<%@ taglib uri="/WEB-INF/portal-lib.tld" prefix="n" %>
+<%@ page isELIgnored="false" %>
+
+<%@ page import="org.jboss.portal.core.cms.ui.admin.CMSAdminConstants,
+ java.util.Collection" %>
+<%@ page import="java.util.Iterator" %>
+<%@ page import="java.util.StringTokenizer" %>
+
+<portlet:defineObjects/>
+
+<%
+ String sCurrPath = (String)request.getAttribute("currpath");
+ Collection pendingQueue = (Collection)request.getAttribute("pendingQueue");
+
+ String rowClass = "portlet-section-body";
+%>
+
+<br>
+
+${n:i18n("CMS_MAIN_USE")}
+
+<hr/>
+
+<!-- Currently browsing -->
+Browsing: <a href="<portlet:renderURL>
+<portlet:param name="op" value="<%= CMSAdminConstants.OP_MAIN
%>"/>
+<portlet:param name="path" value="/"/>
+ </portlet:renderURL>">Home</a>
+<%
+ StringTokenizer parser = new StringTokenizer(sCurrPath, "/");
+ String sPathBuilder = "";
+ while (parser.hasMoreTokens())
+ {
+ String sPathChunk = parser.nextToken();
+ sPathBuilder += "/" + sPathChunk;
+ if (parser.hasMoreTokens())
+ {
+%>
+> <a href="
+<portlet:renderURL>
+ <portlet:param name="op" value="<%= CMSAdminConstants.OP_MAIN
%>"/>
+ <portlet:param name="path" value="<%= sPathBuilder
%>"/>
+</portlet:renderURL>
+"><%= sPathChunk %>
+</a>
+<%
+}
+else
+{
+%>
+> <%= sPathChunk %>
+<%
+ }
+ }
+%>
+
+<br/><br/>
+
+<div align="center"><font
class="portlet-font-dim"><b>Pending Approval
Queue</b></font></div>
+<br/>
+<table width="100%" border="0" cellspacing="0"
cellpadding="0">
+ <tr>
+ <td
class="portlet-table-text"><b>${n:i18n("CMS_PATH")}</b></td>
+ <td
class="portlet-table-text"><b>${n:i18n("CMS_TYPE")}</b></td>
+ <td
class="portlet-table-text"><b>${n:i18n("CMS_CREATED")}</b></td>
+ <td
class="portlet-table-text"><b>${n:i18n("CMS_CREATED_BY")}</b></td>
+ <td
class="portlet-table-text"><b>${n:i18n("CMS_ACTION")}</b></td>
+ </tr>
+ <%int i = 0;%>
+ <%
+ for (Iterator itr = pendingQueue.iterator(); itr.hasNext();)
+ {
+ %>
+ <%
+ // TODO: need accessor for approvalpid in Content, for param in links below.
+ // TODO: need security access to get current manager as param for links below.
+ org.jboss.portal.workflow.cms.Content cour =
(org.jboss.portal.workflow.cms.Content)itr.next();
+
+ String linkPath = cour.getPath().substring(0,
cour.getPath().lastIndexOf("/"));
+
+ if (i % 2 == 0)
+ {
+ rowClass = "portlet-section-body";
+ }
+ else
+ {
+ rowClass = "portlet-section-alternate";
+ }
+ i++;
+ %>
+ <tr class="<%= rowClass %>">
+ <!-- Path -->
+ <td><a href="<portlet:renderURL>
+ <portlet:param name="op" value="<%=
CMSAdminConstants.OP_VIEWFILE %>"/>
+ <portlet:param name="path"
+ value="<%= linkPath %>"/>
+ </portlet:renderURL>"><%= linkPath %>
+ </a>
+ </td>
+ <!-- Mime Type -->
+ <td><%= cour.getMimeType() %>
+ </td>
+ <!-- Creation Date -->
+ <td>
+ <%= cour.getCreationDateStr() %>
+ </td>
+ <!-- User who requested approval -->
+ <td><%= cour.getUserName() %>
+ </td>
+ <td>
+ <a href="<portlet:actionURL>
+ <portlet:param name="op" value="<%=
CMSAdminConstants.OP_APPROVE %>"/>
+ <portlet:param name="pid" value="TODO"/>
+ <portlet:param name="manager" value="TODO"/>
+ <portlet:param name="path" value="<%= cour.getPath()
%>"/>
+
</portlet:actionURL>">${n:i18n("CMS_APPROVE")}</a>
+
+ <a href="<portlet:actionURL>
+ <portlet:param name="op" value="<%=
CMSAdminConstants.OP_DENY %>"/>
+ <portlet:param name="pid" value="TODO"/>
+ <portlet:param name="manager" value="TODO"/>
+ <portlet:param name="path" value="<%= cour.getPath()
%>"/>
+ </portlet:actionURL>">${n:i18n("CMS_DENY")}</a>
+ </td>
+ </tr>
+ <%}%>
+</table>
\ No newline at end of file
Modified: trunk/workflow/src/main/org/jboss/portal/workflow/cms/ApprovePublish.java
===================================================================
--- trunk/workflow/src/main/org/jboss/portal/workflow/cms/ApprovePublish.java 2007-01-22
19:39:41 UTC (rev 6067)
+++ trunk/workflow/src/main/org/jboss/portal/workflow/cms/ApprovePublish.java 2007-01-22
20:08:21 UTC (rev 6068)
@@ -22,10 +22,10 @@
******************************************************************************/
package org.jboss.portal.workflow.cms;
+import org.jboss.portal.workflow.WorkflowException;
+
import java.util.Collection;
-import org.jboss.portal.workflow.WorkflowException;
-
/**
* Created on : Dec 19, 2006
*
@@ -60,4 +60,12 @@
* @throws WorkflowException
*/
public Collection getPendingQueue(String filePath) throws WorkflowException;
+
+ /**
+ * Retrieves a queue of unapproved content for everything in the CMS.
+ *
+ * @return
+ * @throws WorkflowException
+ */
+ public Collection getAllPendingInQueue() throws WorkflowException;
}
Modified: trunk/workflow/src/main/org/jboss/portal/workflow/cms/ApprovePublishImpl.java
===================================================================
---
trunk/workflow/src/main/org/jboss/portal/workflow/cms/ApprovePublishImpl.java 2007-01-22
19:39:41 UTC (rev 6067)
+++
trunk/workflow/src/main/org/jboss/portal/workflow/cms/ApprovePublishImpl.java 2007-01-22
20:08:21 UTC (rev 6068)
@@ -22,35 +22,30 @@
******************************************************************************/
package org.jboss.portal.workflow.cms;
-import java.io.ByteArrayInputStream;
-import java.io.InputStream;
-import java.util.Collection;
-import java.util.Iterator;
-import java.util.ArrayList;
-import java.util.StringTokenizer;
-import java.util.List;
-
-import javax.xml.parsers.DocumentBuilderFactory;
-
import org.apache.log4j.Logger;
-
-import org.jboss.portal.workflow.service.WorkflowService;
-import org.jboss.portal.workflow.WorkflowException;
-
-import org.jboss.portal.jems.as.system.AbstractJBossService;
import org.jboss.portal.common.util.JNDI;
import org.jboss.portal.common.util.Tools;
-
+import org.jboss.portal.jems.as.system.AbstractJBossService;
+import org.jboss.portal.workflow.WorkflowException;
+import org.jboss.portal.workflow.service.WorkflowService;
import org.jbpm.JbpmContext;
+import org.jbpm.db.GraphSession;
import org.jbpm.graph.def.ProcessDefinition;
import org.jbpm.graph.exe.ProcessInstance;
import org.jbpm.graph.exe.Token;
import org.jbpm.taskmgmt.exe.TaskInstance;
-import org.jbpm.db.GraphSession;
-
import org.w3c.dom.Document;
import org.w3c.dom.Element;
+import javax.xml.parsers.DocumentBuilderFactory;
+import java.io.ByteArrayInputStream;
+import java.io.InputStream;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Iterator;
+import java.util.List;
+import java.util.StringTokenizer;
+
/**
* Created on : Dec 19, 2006
*
@@ -168,132 +163,100 @@
}
}
- /**
- * @return
- */
+ /** @return */
public WorkflowService getWorkflowService()
{
return this.workflowService;
}
- /**
- * @param workflowService
- */
+ /** @param workflowService */
public void setWorkflowService(WorkflowService workflowService)
{
this.workflowService = workflowService;
}
- /**
- * @return
- */
+ /** @return */
public String getProcess()
{
return this.process;
}
- /**
- * @param process
- */
+ /** @param process */
public void setProcess(String process)
{
this.process = process;
}
- /**
- * @return the managerRoles
- */
+ /** @return the managerRoles */
public String getManagerEmails()
{
return managerEmails;
}
- /**
- * @param managerEmails the manager emails to set
- */
+ /** @param managerEmails the manager emails to set */
public void setManagerEmails(String managerEmails)
{
this.managerEmails = managerEmails;
}
- /**
- * @return the overwrite
- */
+ /** @return the overwrite */
public boolean isOverwrite()
{
return overwrite;
}
- /**
- * @param overwrite the overwrite to set
- */
+ /** @param overwrite the overwrite to set */
public void setOverwrite(boolean overwrite)
{
this.overwrite = overwrite;
}
- /**
- * @return
- */
+ /** @return */
public String getJNDIName()
{
return this.jndiName;
}
- /**
- * @param jndiName
- */
+ /** @param jndiName */
public void setJNDIName(String jndiName)
{
this.jndiName = jndiName;
}
- /**
- * @return the body
- */
+ /** @return the body */
public String getBody()
{
return body;
}
- /**
- * @param body the body to set
- */
+ /** @param body the body to set */
public void setBody(String body)
{
this.body = body;
}
- /**
- * @return the from
- */
+ /** @return the from */
public String getFrom()
{
return from;
}
- /**
- * @param from the from to set
- */
+ /** @param from the from to set */
public void setFrom(String from)
{
this.from = from;
}
- /**
- * @return the subject
- */
+ /** @return the subject */
public String getSubject()
{
return subject;
}
- /**
- * @param subject the subject to set
- */
+ /** @param subject the subject to set */
public void setSubject(String subject)
{
this.subject = subject;
@@ -481,4 +444,49 @@
}
return pendingQueue;
}
+
+ /**
+ * Retrieves a queue of unapproved content for everything in the CMS.
+ *
+ * @return
+ * @throws WorkflowException
+ */
+ public Collection getAllPendingInQueue() throws WorkflowException
+ {
+ Collection pendingQueue = new ArrayList();
+ JbpmContext jbpmContext = null;
+ try
+ {
+ jbpmContext = this.workflowService.getJbpmConfiguration().createJbpmContext();
+
+ GraphSession graphSession = jbpmContext.getGraphSession();
+ ProcessDefinition processDef =
graphSession.findLatestProcessDefinition(this.processName);
+ List processInstances = graphSession.findProcessInstances(processDef.getId());
+
+ if (processInstances != null)
+ {
+ for (int i = 0; i < processInstances.size(); i++)
+ {
+ ProcessInstance cour = (ProcessInstance)processInstances.get(i);
+ //iterate through a list of currently pending approval tasks
+ if (!cour.hasEnded())
+ {
+ Content content =
(Content)cour.getContextInstance().getVariable("content");
+
+ //apply proper criteria to extract pending content only for the
specified file
+ if (content != null)
+ {
+ pendingQueue.add(content);
+ }
+ }
+ }
+ }
+ }
+ finally
+ {
+ Tools.safeClose(jbpmContext);
+ }
+ return pendingQueue;
+ }
+
}