| <%@ page import="java.util.Collection" %> |
| <%@ page import="java.util.Iterator" %> |
| <%@ page import="org.apache.log4j.*" %> |
| <%@ page import="com.ecyrd.jspwiki.WikiContext" %> |
| <%@ page import="com.ecyrd.jspwiki.WikiSession" %> |
| <%@ page import="com.ecyrd.jspwiki.WikiEngine" %> |
| <%@ page import="com.ecyrd.jspwiki.workflow.Decision" %> |
| <%@ page import="com.ecyrd.jspwiki.workflow.DecisionQueue" %> |
| <%@ page import="com.ecyrd.jspwiki.workflow.NoSuchOutcomeException" %> |
| <%@ page import="com.ecyrd.jspwiki.workflow.Outcome" %> |
| <%@ page import="com.ecyrd.jspwiki.workflow.Workflow" %> |
| <%@ page errorPage="/Error.jsp" %> |
| <%@ taglib uri="/WEB-INF/jspwiki.tld" prefix="wiki" %> |
| |
| <%! |
| Logger log = Logger.getLogger("JSPWiki"); |
| %> |
| |
| <% |
| WikiEngine wiki = WikiEngine.getInstance( getServletConfig() ); |
| // Create wiki context and check for authorization |
| WikiContext wikiContext = wiki.createContext( request, WikiContext.WORKFLOW ); |
| if(!wikiContext.hasAccess( response )) return; |
| |
| // Extract the wiki session |
| WikiSession wikiSession = wikiContext.getWikiSession(); |
| |
| // Get the current decisions |
| DecisionQueue dq = wiki.getWorkflowManager().getDecisionQueue(); |
| |
| if( "decide".equals(request.getParameter("action")) ) |
| { |
| try |
| { |
| // Extract parameters for decision ID & decision outcome |
| int id = Integer.parseInt( request.getParameter( "id" ) ); |
| String outcomeKey = request.getParameter("outcome"); |
| Outcome outcome = Outcome.forName( outcomeKey ); |
| // Iterate through our actor decisions and see if we can find an ID match |
| Collection decisions = dq.getActorDecisions(wikiSession); |
| for (Iterator it = decisions.iterator(); it.hasNext();) |
| { |
| Decision d = (Decision)it.next(); |
| if (d.getId() == id) |
| { |
| // Cool, we found it. Now make the decision. |
| dq.decide(d, outcome); |
| } |
| } |
| } |
| catch ( NumberFormatException e ) |
| { |
| log.warn("Could not parse integer from parameter 'decision'. Somebody is being naughty."); |
| } |
| catch ( NoSuchOutcomeException e ) |
| { |
| log.warn("Could not look up Outcome from parameter 'outcome'. Somebody is being naughty."); |
| } |
| } |
| if( "abort".equals(request.getParameter("action")) ) |
| { |
| try |
| { |
| // Extract parameters for decision ID & decision outcome |
| int id = Integer.parseInt( request.getParameter( "id" ) ); |
| // Iterate through our owner decisions and see if we can find an ID match |
| Collection workflows = wiki.getWorkflowManager().getOwnerWorkflows(wikiSession); |
| for (Iterator it = workflows.iterator(); it.hasNext();) |
| { |
| Workflow w = (Workflow)it.next(); |
| if (w.getId() == id) |
| { |
| // Cool, we found it. Now kill the workflow. |
| w.abort(); |
| } |
| } |
| } |
| catch ( NumberFormatException e ) |
| { |
| log.warn("Could not parse integer from parameter 'decision'. Somebody is being naughty."); |
| } |
| } |
| |
| // Stash the current decisions/workflows |
| request.setAttribute("decisions", dq.getActorDecisions(wikiSession)); |
| request.setAttribute("workflows", wiki.getWorkflowManager().getOwnerWorkflows(wikiSession)); |
| request.setAttribute("wikiSession", wikiSession); |
| |
| response.setContentType("text/html; charset="+wiki.getContentEncoding() ); |
| String contentPage = wiki.getTemplateManager().findJSP( pageContext, |
| wikiContext.getTemplate(), |
| "ViewTemplate.jsp" ); |
| %><wiki:Include page="<%=contentPage%>" /> |
| |