1<%@ page import="java.util.Collection" %>
2<%@ page import="java.util.Iterator" %>
3<%@ page import="org.apache.log4j.*" %>
4<%@ page import="com.ecyrd.jspwiki.WikiContext" %>
5<%@ page import="com.ecyrd.jspwiki.WikiSession" %>
6<%@ page import="com.ecyrd.jspwiki.WikiEngine" %>
7<%@ page import="com.ecyrd.jspwiki.workflow.Decision" %>
8<%@ page import="com.ecyrd.jspwiki.workflow.DecisionQueue" %>
9<%@ page import="com.ecyrd.jspwiki.workflow.NoSuchOutcomeException" %>
10<%@ page import="com.ecyrd.jspwiki.workflow.Outcome" %>
11<%@ page import="com.ecyrd.jspwiki.workflow.Workflow" %>
12<%@ page errorPage="/Error.jsp" %>
13<%@ taglib uri="/WEB-INF/jspwiki.tld" prefix="wiki" %>
14
15<%!
16    Logger log = Logger.getLogger("JSPWiki");
17%>
18
19<%
20    WikiEngine wiki = WikiEngine.getInstance( getServletConfig() );
21    // Create wiki context and check for authorization
22    WikiContext wikiContext = wiki.createContext( request, WikiContext.WORKFLOW );
23    if(!wikiContext.hasAccess( response )) return;
24
25    // Extract the wiki session
26    WikiSession wikiSession = wikiContext.getWikiSession();
27
28    // Get the current decisions
29    DecisionQueue dq = wiki.getWorkflowManager().getDecisionQueue();
30
31    if( "decide".equals(request.getParameter("action")) )
32    {
33        try
34        {
35          // Extract parameters for decision ID & decision outcome
36          int id = Integer.parseInt( request.getParameter( "id" ) );
37          String outcomeKey = request.getParameter("outcome");
38          Outcome outcome = Outcome.forName( outcomeKey );
39          // Iterate through our actor decisions and see if we can find an ID match
40          Collection decisions = dq.getActorDecisions(wikiSession);
41          for (Iterator it = decisions.iterator(); it.hasNext();)
42          {
43            Decision d = (Decision)it.next();
44            if (d.getId() == id)
45            {
46              // Cool, we found it. Now make the decision.
47              dq.decide(d, outcome);
48            }
49          }
50        }
51        catch ( NumberFormatException e )
52        {
53           log.warn("Could not parse integer from parameter 'decision'. Somebody is being naughty.");
54        }
55        catch ( NoSuchOutcomeException e )
56        {
57           log.warn("Could not look up Outcome from parameter 'outcome'. Somebody is being naughty.");
58        }
59    }
60    if( "abort".equals(request.getParameter("action")) )
61    {
62        try
63        {
64          // Extract parameters for decision ID & decision outcome
65          int id = Integer.parseInt( request.getParameter( "id" ) );
66          // Iterate through our owner decisions and see if we can find an ID match
67          Collection workflows = wiki.getWorkflowManager().getOwnerWorkflows(wikiSession);
68          for (Iterator it = workflows.iterator(); it.hasNext();)
69          {
70            Workflow w = (Workflow)it.next();
71            if (w.getId() == id)
72            {
73              // Cool, we found it. Now kill the workflow.
74              w.abort();
75            }
76          }
77        }
78        catch ( NumberFormatException e )
79        {
80           log.warn("Could not parse integer from parameter 'decision'. Somebody is being naughty.");
81        }
82    }
83
84    // Stash the current decisions/workflows
85    request.setAttribute("decisions",   dq.getActorDecisions(wikiSession));
86    request.setAttribute("workflows",   wiki.getWorkflowManager().getOwnerWorkflows(wikiSession));
87    request.setAttribute("wikiSession", wikiSession);
88
89    response.setContentType("text/html; charset="+wiki.getContentEncoding() );
90    String contentPage = wiki.getTemplateManager().findJSP( pageContext,
91                                                            wikiContext.getTemplate(),
92                                                            "ViewTemplate.jsp" );
93%><wiki:Include page="<%=contentPage%>" />
94
95