View Javadoc

1   /*
2    * $Id: SolarImageQuery.java,v 1.3 2006/06/15 16:50:10 clq2 Exp $
3    */
4   
5   package org.astrogrid.dataservice.service.sol;
6   
7   import java.io.IOException;
8   import java.util.Date;
9   import java.util.StringTokenizer;
10  import javax.servlet.http.HttpServletRequest;
11  import javax.servlet.http.HttpServletResponse;
12  import org.astrogrid.dataservice.service.DataServer;
13  import org.astrogrid.dataservice.service.ServletHelper;
14  import org.astrogrid.io.account.LoginAccount;
15  import org.astrogrid.query.Query;
16  import org.astrogrid.query.returns.ReturnImage;
17  import org.astrogrid.query.returns.ReturnSpec;
18  import org.astrogrid.query.returns.ReturnTable;
19  import org.astrogrid.slinger.targets.WriterTarget;
20  import org.astrogrid.webapp.DefaultServlet;
21  
22  /***
23   * Simple solar image access. Consists of a query that returns either an image
24   * or a table that
25   * has URLs to the images themselves (depending on the plugin).  This class handles the initial
26   * query
27   *
28   * @author M Hill
29   * @author K Andrews
30   */
31  public class SolarImageQuery extends DefaultServlet {
32     
33     DataServer server = new DataServer();
34   
35     public void doGet(HttpServletRequest request, HttpServletResponse response)  throws IOException {
36  
37        try {
38           String dateParam = request.getParameter("datetime");
39           Date date = new Date(Date.parse(dateParam));
40           
41           double radius = ServletHelper.getRadius(request);
42           double ra = ServletHelper.getRa(request);
43           double dec = ServletHelper.getDec(request);
44           
45           String formatParam = request.getParameter("FORMAT");
46           if (formatParam == null) formatParam = request.getParameter("format");
47     
48           //split formats from CSV to an array
49           StringTokenizer tokenizer = new StringTokenizer(formatParam, ",");
50           String[] formats = new String[tokenizer.countTokens()];
51           for (int i = 0; i < formats.length; i++) {
52              formats[i] = tokenizer.nextToken();
53           }
54           
55           //now we ignore the list and only take the first one.  Rather than give
56           //failbacks, teh caller should check the metadata...
57           String format = formats[0];
58           
59           
60           ReturnSpec returnSpec = null;
61           boolean isTable = (ReturnTable.isTableFormat(formats));
62           boolean isImage = (ReturnImage.isImageFormat(formats));
63           
64           //check haven't specificed both
65           if ((isTable) && (isImage)) {
66              throw new IllegalArgumentException("Specify either image or table format, not both.  Given="+formatParam);
67           }
68           if (isImage) {
69              returnSpec = new ReturnImage(new WriterTarget(response.getWriter()), format);
70           }
71           else {
72              //default as well as if format given
73              returnSpec = new ReturnTable(
74                  new WriterTarget(response.getWriter()), format);
75           }
76           
77           try {
78              //server.askQuery(LoginAccount.ANONYMOUS, new Query(circleCon, returnSpec), this);
79              server.askQuery(LoginAccount.ANONYMOUS, new Query(ra, dec, radius, returnSpec), this);
80           } catch (Throwable e) {
81              doError(response, "SIAP error (RA="+ra+", DEC="+dec+", SIZE="+radius+", FORMAT="+formatParam+")", e);
82           }
83           
84        } catch (NumberFormatException e) {
85           doError(response, "Input parameters not correct",e);
86        }
87     }
88  }