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.io.mime.MimeTypes;
17 import org.astrogrid.query.Query;
18 import org.astrogrid.query.returns.ReturnSpec;
19 import org.astrogrid.slinger.targets.WriterTarget;
20 import org.astrogrid.webapp.DefaultServlet;
21 import org.astrogrid.tableserver.test.SampleStarsPlugin;
22 import org.astrogrid.cfg.ConfigFactory;
23 import org.astrogrid.dataservice.queriers.DatabaseAccessException;
24
25
26 /***
27 * A servlet for processing Cone Queries.
28 * Takes three parameters (RA, DEC and SR) that define the query, and
29 * the standard returns definition parameters (see ???)
30 *
31 * @author M Hill
32 * @author K Andrews
33 */
34 public class SubmitCone extends DefaultServlet {
35
36 DataServer server = new DataServer();
37
38 public void doGet(HttpServletRequest request,
39 HttpServletResponse response) throws ServletException, IOException {
40
41
42
43 String plugin = ConfigFactory.getCommonConfig().getString(
44 "datacenter.querier.plugin");
45 if (plugin.equals("org.astrogrid.tableserver.test.SampleStarsPlugin")) {
46
47 SampleStarsPlugin.initialise();
48 }
49
50
51 double radius = ServletHelper.getRadius(request);
52 double ra = ServletHelper.getRa(request);
53 double dec = ServletHelper.getDec(request);
54 ReturnSpec returnSpec = ServletHelper.makeReturnSpec(request);
55
56 try {
57
58 Query coneQuery = new Query(ra, dec, radius, returnSpec);
59
60 if (returnSpec.getTarget() == null) {
61
62
63 returnSpec.setTarget(new WriterTarget(response.getWriter(), false));
64
65 if (ServletHelper.isCountReq(request)) {
66 long count = server.askCount(ServletHelper.getUser(request), coneQuery, request.getRemoteHost()+" ("+request.getRemoteAddr()+") via SubmitCone servlet");
67 response.setContentType(MimeTypes.PLAINTEXT);
68 response.getWriter().write(""+count);
69 }
70 else {
71 server.askQuery(ServletHelper.getUser(request), coneQuery, request.getRemoteHost()+" ("+request.getRemoteAddr()+") via SubmitCone servlet");
72 }
73 }
74 else {
75
76
77 response.setContentType(MimeTypes.HTML);
78 response.getWriter().println(
79 "<html>"+
80 "<head><title>Submitting Query</title></head>"+
81 "<body>"+
82 "<p>Submitting, please wait...</p>");
83 response.getWriter().flush();
84
85 String id = server.submitQuery(ServletHelper.getUser(request), coneQuery, request.getRemoteHost()+" ("+request.getRemoteAddr()+") via SubmitCone servlet");
86
87 URL statusUrl = new URL ("http",request.getServerName(),request.getServerPort(), request.getContextPath()+"/queryStatus.jsp");
88
89 response.getWriter().println("Cone Query has been submitted, and assigned ID "+id+"."+
90 "<a href='"+statusUrl+"?ID="+id+"'>Query Status Page</a>\n");
91 response.getWriter().flush();
92
93
94 response.getWriter().write("<META HTTP-EQUIV='Refresh' CONTENT='0;URL="+statusUrl+"?ID="+id+"'>"+
95 "</body></html>");
96 response.getWriter().flush();
97 }
98 }
99 catch (java.lang.IllegalArgumentException ex) {
100
101 doPotentialConfigError(request, response, ra, dec, radius, ex);
102 }
103 catch (java.lang.NullPointerException ex) {
104
105 doPotentialConfigError(request, response, ra, dec, radius, ex);
106 }
107 catch (Throwable th) {
108 LogFactory.getLog(request.getContextPath()).error(th+
109 "Searching Cone with RA= " + Double.toString(ra) +
110 ", Dec = " + Double.toString(dec) +
111 ", radius = " + Double.toString(radius),
112 th);
113
114 doError(response,
115 "Searching Cone with RA= " + Double.toString(ra) +
116 ", Dec = " + Double.toString(dec) +
117 ", radius = " + Double.toString(radius),
118 th);
119 }
120 }
121
122 private void doPotentialConfigError(
123 HttpServletRequest request, HttpServletResponse response,
124 double ra, double dec, double radius,
125 Exception ex) throws IOException {
126
127 String errorResponseString =
128 "Searching Cone with RA= " + Double.toString(ra) +
129 ", Dec = " + Double.toString(dec) + ", radius = " + Double.toString(radius) +"</p>" +
130 "<p>An error has occurred (see below); this may be because this datacenter installation is misconfigured.\n" +
131 "<p>Please check that the properties 'conesearch.table', 'conesearch.ra.column', 'conesearch.dec.column' and 'conesearch.columns.units' are correctly configured in your properties file.\n";
132
133 LogFactory.getLog(request.getContextPath()).error( ex+errorResponseString,ex);
134
135 doError(response, errorResponseString, ex);
136 }
137
138 }