1
2
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.WriterTarget;
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
42 response.setContentType(query.getResultsDef().getFormat());
43 query.getResultsDef().setTarget(new WriterTarget(response.getWriter(), false));
44 server.askQuery(user, query, request.getRemoteHost()+" ("+request.getRemoteAddr()+") via AskQuery servlet");
45 }
46 else {
47
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 }