View Javadoc

1   /*
2    * $Id: SubmitCone.java,v 1.4 2005/03/31 15:06:16 mch Exp $
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              //if a target is not given, we do an asynchronous (ask) Query to the response
52              //stream.
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              //otherwise we direct the response to the target and put status info to the browser
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              //indicate status
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              //redirect to status
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  }