1
2
3
4
5
6
7
8
9
10
11 package org.astrogrid.jes.servlet;
12
13 import org.astrogrid.community.beans.v1.Account;
14 import org.astrogrid.jes.delegate.JesDelegateFactory;
15 import org.astrogrid.jes.delegate.JobController;
16 import org.astrogrid.jes.delegate.JobSummary;
17 import org.astrogrid.workflow.beans.v1.Workflow;
18 import org.astrogrid.workflow.beans.v1.execution.JobURN;
19
20 import java.io.IOException;
21 import java.io.PrintWriter;
22 import java.io.StringReader;
23 import java.io.StringWriter;
24 import java.net.MalformedURLException;
25 import java.net.URL;
26 import java.net.URLEncoder;
27
28 import javax.servlet.ServletException;
29 import javax.servlet.http.HttpServlet;
30 import javax.servlet.http.HttpServletRequest;
31 import javax.servlet.http.HttpServletResponse;
32 import javax.xml.transform.OutputKeys;
33 import javax.xml.transform.Transformer;
34 import javax.xml.transform.TransformerFactory;
35 import javax.xml.transform.stream.StreamResult;
36 import javax.xml.transform.stream.StreamSource;
37
38 /*** Simple servlet that allows JES to be driven from a HTML interface.
39 * @author Noel Winstanley nw@jb.man.ac.uk 05-Apr-2004
40 *
41 */
42 public class HTMLDriver extends HttpServlet {
43 public final static String INSPECT = "inspect";
44 public final static String SUBMIT = "submit";
45 public final static String DELETE = "delete";
46 public final static String ABORT = "abort";
47 public final static String LIST = "list";
48 public final static String WORKFLOW = "workflow";
49
50 public final static String ACTION = "action";
51 public final static String URN = "urn";
52
53 public final static String USERNAME = "username";
54 public final static String COMMUNITY = "community";
55 /*** Construct a new HTMLDriver
56 *
57 */
58 public HTMLDriver() {
59 super();
60 }
61
62 /***
63 * @see javax.servlet.http.HttpServlet#doGet(javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse)
64 */
65 protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
66 String action = req.getParameter(ACTION);
67 try {
68 if (INSPECT.equalsIgnoreCase(action)) {
69 doInspect(req,resp);
70 } else if (DELETE.equalsIgnoreCase(action)) {
71 deleteJob(req,resp);
72 } else if (ABORT.equalsIgnoreCase(action)){
73 abortJob(req,resp);
74 } else {
75 doList(req,resp);
76 }
77 } catch (Exception e) {
78 throw new ServletException(e);
79 }
80 }
81 /***
82 * @param req
83 * @param resp
84 */
85 private void abortJob(HttpServletRequest req, HttpServletResponse resp) throws Exception {
86 JobController man = JesDelegateFactory.createJobController(computeEndpoint(req).toString());
87 JobURN urn = new JobURN();
88 urn.setContent(req.getParameter(URN).trim());
89 PrintWriter out = resp.getWriter();
90 out.println("<html><body>");
91 out.println("<h1>Aborting Job " + urn.getContent() + "</h1>");
92 man.cancelJob(urn);
93 out.println("<h1>Done</h1>");
94 out.println("</body></table>");
95 }
96
97 /***
98 * @param req
99 * @param resp
100 */
101 private void deleteJob(HttpServletRequest req, HttpServletResponse resp) throws Exception {
102 JobController man = JesDelegateFactory.createJobController(computeEndpoint(req).toString());
103 JobURN urn = new JobURN();
104 urn.setContent(req.getParameter(URN).trim());
105 PrintWriter out = resp.getWriter();
106 out.println("<html><body>");
107 out.println("<h1>Deleting Job" + urn.getContent() + "</h1>");
108 man.deleteJob(urn);
109 out.println("<h1>Done</h1>");
110 out.println("</body></table>");
111 }
112
113 /***
114 * @param req
115 * @param resp
116 */
117 private void doList(HttpServletRequest req, HttpServletResponse resp) throws Exception {
118 JobController man = JesDelegateFactory.createJobController(computeEndpoint(req).toString());
119 Account acc = new Account();
120 acc.setCommunity(req.getParameter(COMMUNITY));
121 acc.setName(req.getParameter(USERNAME));
122 PrintWriter out = resp.getWriter();
123 out.println("<html><body>");
124 out.println("<h1>Jobs for " + acc.getName() + "@" + acc.getCommunity());
125 JobSummary[] summary = man.readJobList(acc);
126 out.println("<table>");
127 for (int i = 0; i < summary.length; i++) {
128 out.println("<tr>");
129 out.println("<td>" + summary[i].getName() + "</td>");
130 String urn = summary[i].getJobURN().getContent();
131 out.println("<td><a href='html-driver?action=" + INSPECT + "&urn=" + URLEncoder.encode(urn) + "'>"
132 + urn + "</a></td>");
133 out.println("<td><a href='html-driver?action=" + DELETE + "&urn=" + URLEncoder.encode(urn)+ "'>delete</a></td>");
134 out.println("<td><a href='html-driver?action=" + ABORT + "&urn=" + URLEncoder.encode(urn) + "'>abort</a></td>");
135 out.println("</tr>");
136 }
137 out.println("</table>");
138 out.println("</body></html>");
139 }
140
141 private URL computeEndpoint(HttpServletRequest req) throws MalformedURLException {
142
143 URL endpoint = new URL("http", req.getServerName(),
144 req.getServerPort(), req.getContextPath() + "/services/JobControllerService");
145 return endpoint;
146 }
147 /***
148 * @param req
149 * @param resp
150 */
151 private void doInspect(HttpServletRequest req, HttpServletResponse resp) throws Exception {
152
153
154 JobController man = JesDelegateFactory.createJobController(computeEndpoint(req).toString());
155 JobURN urn = new JobURN();
156 urn.setContent(req.getParameter(URN).trim());
157 Workflow wf = man.readJob(urn);
158 TransformerFactory fac = TransformerFactory.newInstance();
159 Transformer trans = fac.newTransformer(
160 new StreamSource(this.getClass().getResourceAsStream("workflow.xsl"))
161 );
162
163 StringWriter sw = new StringWriter();
164 wf.marshal(sw);
165 sw.close();
166 trans.setOutputProperty(OutputKeys.METHOD,"html");
167 trans.transform(
168 new StreamSource(new StringReader(sw.toString()))
169 , new StreamResult(resp.getOutputStream())
170 );
171 }
172 /***
173 * @see javax.servlet.http.HttpServlet#doPost(javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse)
174 */
175 protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
176 try {
177
178
179 JobController man = JesDelegateFactory.createJobController(computeEndpoint(req).toString());
180 Workflow wf = Workflow.unmarshalWorkflow(new StringReader(req.getParameter(WORKFLOW)));
181
182 PrintWriter out = resp.getWriter();
183 out.println("<html><body>");
184 out.println("<h1>Submitting Job</h1>");
185
186 JobURN urn = man.submitWorkflow(wf);
187 out.println("<h1>Done: <a href='html-driver?action=" + INSPECT + "&urn=" + URLEncoder.encode(urn.getContent())+ "'>" + urn.getContent() + "</a></h1>");
188 out.println("</body></table>");
189 } catch (Exception e) {
190 throw new ServletException(e);
191 }
192 }
193
194
195
196 }
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213