View Javadoc

1   /*
2    * $Id: ResourceDetailsServlet.java 1537 2011-07-27 15:34:04Z hoheisel $
3    *
4    * Copyright (c) 2007
5    * Fraunhofer Institute for Computer Architecture and Software Technology
6    * See http://www.first.fraunhofer.de for more details.
7    */
8   
9   package net.kwfgrid.gwes.servlet;
10  
11  import net.kwfgrid.gwes.client.RemoteGWES;
12  import net.kwfgrid.gwes.exception.GWESException;
13  import org.antlr.stringtemplate.StringTemplate;
14  import org.apache.log4j.Logger;
15  import org.jdom.transform.XSLTransformer;
16  import org.jdom.Document;
17  import org.jdom.output.XMLOutputter;
18  import org.jdom.output.Format;
19  import org.jdom.input.SAXBuilder;
20  
21  import javax.servlet.ServletException;
22  import javax.servlet.http.HttpServlet;
23  import javax.servlet.http.HttpServletRequest;
24  import javax.servlet.http.HttpServletResponse;
25  import java.io.*;
26  
27  /**
28   * Servlet that shows details of a specific workflow.
29   * Security should be implemented by means of the Servlet container (e.g. using tomcat-users.xml)
30   *
31   * @author Andreas Hoheisel
32   *         (<a href="http://www.andreas-hoheisel.de">www.andreas-hoheisel.de</a>)
33   * @version $Id: ResourceDetailsServlet.java 1537 2011-07-27 15:34:04Z hoheisel $
34   */
35  public class ResourceDetailsServlet extends HttpServlet {
36  
37      private static GWESProperties pr;
38      final static Logger logger = Logger.getLogger(ResourceDetailsServlet.class);
39  
40      protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
41          ServletLogger.log(request);
42  
43          response.setContentType("text/html");
44          PrintWriter out = response.getWriter();
45          String error = null;
46          String success = null;
47          String info = null;
48  
49          Object obj = request.getAttribute("error");
50          if (obj instanceof String) error = (String) obj;
51  
52          obj = request.getAttribute("success");
53          if (obj instanceof String) success = (String) obj;
54  
55          obj = request.getAttribute("info");
56          if (obj instanceof String) info = (String) obj;
57  
58          //read gwes.properties
59          if (pr == null) pr = GWESProperties.getInstance("/gwes.properties");
60  
61          // get user
62          String userID = request.getRemoteUser();
63          if (userID == null) userID = "nn";
64  
65          // get resource Uri
66          String resourceUri = request.getParameter("resourceuri");
67          if (resourceUri == null) {
68              obj = request.getSession().getAttribute("resourceuri");
69              if (obj instanceof String) resourceUri = (String) obj;
70          } else {
71              logger.debug("session resourceuri = " + resourceUri);
72              request.getSession().setAttribute("resourceuri", resourceUri);
73          }
74  
75          String resourceHtml = null;
76          try {
77              resourceHtml = getDGRDLHTML(resourceUri, request.getUserPrincipal().getName());
78          } catch (Throwable e) {
79              logger.error("exception: " + e, e);
80              error = ((error == null) ? "" : error) + "Could not get resource information: " + e.getMessage();
81              info = "<p>Please select an available resource in the <a href=\"" + pr.gwesBaseUrlExternal + "/servlet/ResourceListServlet\">Resource List</a> or in the <a href=\"" + pr.gwesBaseUrlExternal + "/servlet/WorkflowActivityListServlet\">Activity List</a> first!</p>";
82              resourceUri = null;
83          }
84  
85          if (error == null && (resourceUri == null || resourceUri.length() == 0)) {
86              info = "<p>Please select an available resource in the <a href=\"" + pr.gwesBaseUrlExternal + "/servlet/ResourceListServlet\">Resource List</a> or in the <a href=\"" + pr.gwesBaseUrlExternal + "/servlet/WorkflowActivityListServlet\">Activity List</a> first!</p>";
87          }
88  
89          try {
90              StringTemplate t = Template.getStringTemplateGroup("html_gwes-servlets").getInstanceOf("resourceDetails");
91              if (resourceHtml != null) t.setAttribute("resourcehtml", resourceHtml);
92              if (success != null) t.setAttribute("success", success);
93              if (error != null) t.setAttribute("error", error);
94              if (info != null) t.setAttribute("info", info);
95              t.setAttribute("menu", new Menu(pr.gwesBaseUrlExternal, "Resource Details"));
96              out.print(t.toString());
97          } catch (Exception e) {
98              out.println("<hr><b>ERROR connecting to GWES: " + e + "</b>");
99              out.println("<pre>");
100             e.printStackTrace(out);
101             out.println("</pre>");
102             out.println("<hr>");
103         }
104     }
105 
106     protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
107         doGet(request, response);
108     }
109 
110     private String getDGRDLHTML(String resourceUri, String userID) throws Exception, GWESException {
111         if (resourceUri == null) return null;
112 
113         // get resource description from GWES
114         String xmlStr = RemoteGWES.getInstance().getResourceDescription(resourceUri, userID);
115 
116         // convert to JDOM
117         SAXBuilder builder = new SAXBuilder(false);
118         Document xmlJdom = builder.build(new StringReader(xmlStr));
119 
120         // transform using XSLT
121         System.setProperty( "javax.xml.transform.TransformerFactory", "org.apache.xalan.processor.TransformerFactoryImpl");
122         XSLTransformer transformer = new XSLTransformer(getClass().getResourceAsStream("/templates/dgrdl.xsl"));
123         Document htmlJdom = transformer.transform(xmlJdom);
124 
125         // convert to String
126         Writer writer = new StringWriter();
127         XMLOutputter outp = new XMLOutputter(Format.getCompactFormat());
128         outp.output(htmlJdom, writer);
129         return writer.toString();
130     }
131 
132 }