View Javadoc

1   /*
2    * $Id: AskQuery.java,v 1.1.1.1 2005/02/17 18:37:35 mch Exp $
3    */
4   
5   package org.astrogrid.dataservice.service.servlet;
6   import java.io.IOException;
7   import java.security.Principal;
8   import javax.servlet.ServletException;
9   import javax.servlet.http.HttpServletRequest;
10  import javax.servlet.http.HttpServletResponse;
11  import org.apache.commons.logging.LogFactory;
12  import org.astrogrid.dataservice.service.DataServer;
13  import org.astrogrid.dataservice.service.ServletHelper;
14  import org.astrogrid.query.Query;
15  import org.astrogrid.slinger.targets.TargetMaker;
16  import org.astrogrid.webapp.DefaultServlet;
17  
18  /***
19   * A servlet for asking a query ynchronously.
20   * The parameters are:
21   * AdqlUrl, AdqlSql or AdqlXml that specify the query to be run.
22   * Target: where the results are to be sent (empty=return to response)
23   * Format: what format the results should be sent in (eg VOTABLE, CSV - defaults to VOTABLE)
24   *
25   * @author mch
26   */
27  public class AskQuery extends DefaultServlet {
28     
29     DataServer server = new DataServer();
30     
31     public void doGet(HttpServletRequest request,
32                       HttpServletResponse response) throws ServletException, IOException {
33  
34        Query query = null;
35        
36        try {
37           query = SubmitQuery.makeQuery(request);
38           Principal user = ServletHelper.getUser(request);
39           
40           if (query.getTarget() == null) {
41              //no target, return results to browser with the first mime type requested (will assume it can be done...)
42              response.setContentType(query.getResultsDef().getFormat());
43              query.getResultsDef().setTarget(TargetMaker.makeTarget(response.getWriter(), false));
44              server.askQuery(user, query, request.getRemoteHost()+" ("+request.getRemoteAddr()+") via AskQuery servlet");
45           }
46           else {
47              //target given, so return just the id
48              response.setContentType("text/html");
49              server.askQuery(user, query, request.getRemoteHost()+" ("+request.getRemoteAddr()+") via AskQuery servlet");
50              response.getWriter().println(
51                 "<html>"+
52                 "<head><title>Query Asked</title></head>"+
53                 "<body>Query Asked</body>");
54           }
55        }
56        catch (Throwable th) {
57           LogFactory.getLog(request.getContextPath()).error(th+" submitting query",th);
58           doError(response, "Submitting "+query+" -> "+ServletHelper.makeReturnSpec(request),th);
59        }
60     }
61     
62  }