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.io.mime.MimeTypes;
15 import org.astrogrid.query.Query;
16 import org.astrogrid.slinger.targets.WriterTarget;
17 import org.astrogrid.webapp.DefaultServlet;
18
19 /***
20 * A servlet for asking a query synchronously. Just like AskQuery except that
21 * it forwards the browser to the status page if a target is given.
22 * The parameters are:
23 * AdqlUrl, AdqlSql or AdqlXml that specify the query to be run.
24 * Target: where the results are to be sent (empty=return to response)
25 * Format: what format the results should be sent in (eg VOTABLE, CSV - defaults to VOTABLE)
26 *
27 * @author mch
28 */
29 public class BrowserAskQuery extends DefaultServlet {
30
31 DataServer server = new DataServer();
32
33 public void doGet(HttpServletRequest request,
34 HttpServletResponse response) throws ServletException, IOException {
35
36 Query query = null;
37
38 try {
39 query = SubmitQuery.makeQuery(request);
40 Principal user = ServletHelper.getUser(request);
41
42 if (ServletHelper.isCountReq(request)) {
43 long count = server.askCount(user, query, request.getRemoteHost()+" ("+request.getRemoteAddr()+") via BrowserAskQuery servlet");
44 response.setContentType(MimeTypes.PLAINTEXT);
45 response.getWriter().write(""+count);
46 }
47 else {
48 if (query.getTarget() == null) {
49
50
51 query.getResultsDef().setTarget(new WriterTarget(response.getWriter(), false));
52 server.askQuery(user, query, request.getRemoteHost()+" ("+request.getRemoteAddr()+") via BrowserAskQuery servlet");
53 }
54 else {
55
56 String id = server.submitQuery(user, query, request.getRemoteAddr()+" via BrowserAskQuery servlet");
57 response.sendRedirect("queryStatus.jsp?ID="+id);
58 }
59 }
60 }
61 catch (Throwable th) {
62 LogFactory.getLog(request.getContextPath()).error(th+" submitting query",th);
63 doError(response, "Submitting "+query+" -> "+ServletHelper.makeReturnSpec(request),th);
64 }
65 }
66
67 }