1
2
3
4
5 package org.astrogrid.dataservice.service.cone;
6 import java.io.IOException;
7 import java.net.URL;
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.metadata.queryable.ConeConfigQueryableResource;
13 import org.astrogrid.dataservice.metadata.queryable.SearchGroup;
14 import org.astrogrid.dataservice.service.DataServer;
15 import org.astrogrid.dataservice.service.ServletHelper;
16 import org.astrogrid.query.Query;
17 import org.astrogrid.query.condition.CircleCondition;
18 import org.astrogrid.query.returns.ReturnSpec;
19 import org.astrogrid.slinger.mime.MimeTypes;
20 import org.astrogrid.slinger.targets.TargetMaker;
21 import org.astrogrid.webapp.DefaultServlet;
22
23 /***
24 * A servlet for processing Cone Queries.
25 * Takes three parameters (RA, DEC and SR) that define the query, and
26 * the standard returns definition parameters (see ???)
27 *
28 * @author mch
29 */
30 public class SubmitCone extends DefaultServlet {
31
32 DataServer server = new DataServer();
33
34 public void doGet(HttpServletRequest request,
35 HttpServletResponse response) throws ServletException, IOException {
36
37 CircleCondition coneCondition = ServletHelper.makeCircleCondition(request);
38 ReturnSpec tableDef = ServletHelper.makeReturnSpec(request);
39 SearchGroup[] coneScope = new ConeConfigQueryableResource().getSpatialGroups();
40 String[] scope = new String[coneScope.length];
41 for (int i = 0; i < scope.length; i++)
42 {
43 scope[i] = coneScope[i].getName();
44 }
45
46 Query coneQuery = new Query(scope, coneCondition, tableDef);
47
48 try {
49
50 if (tableDef.getTarget() == null) {
51
52
53 tableDef.setTarget(TargetMaker.makeTarget(response.getWriter(), false));
54
55 if (ServletHelper.isCountReq(request)) {
56 long count = server.askCount(ServletHelper.getUser(request), coneQuery, request.getRemoteHost()+" ("+request.getRemoteAddr()+") via SubmitCone servlet");
57 response.setContentType(MimeTypes.PLAINTEXT);
58 response.getWriter().write(""+count);
59 }
60 else {
61 server.askQuery(ServletHelper.getUser(request), coneQuery, request.getRemoteHost()+" ("+request.getRemoteAddr()+") via SubmitCone servlet");
62 }
63 }
64 else {
65
66 response.setContentType(MimeTypes.HTML);
67 response.getWriter().println(
68 "<html>"+
69 "<head><title>Submitting Query</title></head>"+
70 "<body>"+
71 "<p>Submitting, please wait...</p>");
72 response.getWriter().flush();
73
74 String id = server.submitQuery(ServletHelper.getUser(request), coneQuery, request.getRemoteHost()+" ("+request.getRemoteAddr()+") via SubmitCone servlet");
75
76 URL statusUrl = new URL ("http",request.getServerName(),request.getServerPort(), request.getContextPath()+"/queryStatus.jsp");
77
78 response.getWriter().println("Cone Query has been submitted, and assigned ID "+id+"."+
79 "<a href='"+statusUrl+"?ID="+id+"'>Query Status Page</a>\n");
80 response.getWriter().flush();
81
82
83 response.getWriter().write("<META HTTP-EQUIV='Refresh' CONTENT='0;URL="+statusUrl+"?ID="+id+"'>"+
84 "</body></html>");
85 response.getWriter().flush();
86 }
87 }
88 catch (Throwable th) {
89 LogFactory.getLog(request.getContextPath()).error(th+" searching ("+coneCondition+")",th);
90 doError(response, "Searching Cone ("+coneCondition+") -> "+tableDef,th);
91 }
92 }
93
94
95 }