View Javadoc

1   /*$Id: HTMLDriver.java,v 1.4 2004/07/01 21:15:00 nw Exp $
2    * Created on 05-Apr-2004
3    *
4    * Copyright (C) AstroGrid. All rights reserved.
5    *
6    * This software is published under the terms of the AstroGrid 
7    * Software License version 1.2, a copy of which has been included 
8    * with this distribution in the LICENSE.txt file.  
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         //ComponentManager man = ComponentManagerFactory.getInstance();
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         //ComponentManager man = ComponentManagerFactory.getInstance();
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 $Log: HTMLDriver.java,v $
201 Revision 1.4  2004/07/01 21:15:00  nw
202 added results-listener interface to jes
203 
204 Revision 1.3  2004/04/08 14:43:26  nw
205 added delete and abort job functionality
206 
207 Revision 1.2  2004/04/07 23:06:05  nw
208 got html-front-end working
209 
210 Revision 1.1  2004/04/06 08:29:21  nw
211 start of a html interface
212  
213 */