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