View Javadoc

1   /*
2    * $Id: SolarImageQuery.java,v 1.1 2005/03/21 18:34:46 mch 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.account.LoginAccount;
13  import org.astrogrid.dataservice.service.DataServer;
14  import org.astrogrid.dataservice.service.ServletHelper;
15  import org.astrogrid.query.Query;
16  import org.astrogrid.query.condition.CircleCondition;
17  import org.astrogrid.query.returns.ReturnImage;
18  import org.astrogrid.query.returns.ReturnSpec;
19  import org.astrogrid.query.returns.ReturnTable;
20  import org.astrogrid.slinger.targets.TargetMaker;
21  import org.astrogrid.webapp.DefaultServlet;
22  
23  /***
24   * Simple solar image access. Consists of a query that returns either an image
25   * or a table that
26   * has URLs to the images themselves (depending on the plugin).  This class handles the initial
27   * query
28   *
29   * @author mch
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           
42           CircleCondition circleCon = ServletHelper.makeCircleCondition(request);
43           String formatParam = request.getParameter("FORMAT");
44           if (formatParam == null) formatParam = request.getParameter("format");
45     
46           //split formats from CSV to an array
47           StringTokenizer tokenizer = new StringTokenizer(formatParam, ",");
48           String[] formats = new String[tokenizer.countTokens()];
49           for (int i = 0; i < formats.length; i++) {
50              formats[i] = tokenizer.nextToken();
51           }
52           
53           //now we ignore the list and only take the first one.  Rather than give
54           //failbacks, teh caller should check the metadata...
55           String format = formats[0];
56           
57           
58           ReturnSpec returnSpec = null;
59           boolean isTable = (ReturnTable.isTableFormat(formats));
60           boolean isImage = (ReturnImage.isImageFormat(formats));
61           
62           //check haven't specificed both
63           if ((isTable) && (isImage)) {
64              throw new IllegalArgumentException("Specify either image or table format, not both.  Given="+formatParam);
65           }
66           if (isImage) {
67              returnSpec = new ReturnImage(TargetMaker.makeTarget(response.getWriter()), format);
68           }
69           else {
70              //default as well as if format given
71              returnSpec = new ReturnTable(TargetMaker.makeTarget(response.getWriter()), format);
72           }
73           
74           try {
75              server.askQuery(LoginAccount.ANONYMOUS, new Query(circleCon, returnSpec), this);
76           } catch (Throwable e) {
77              doError(response, "SIAP error (RA="+circleCon.getRa()+", DEC="+circleCon.getDec()+", SIZE="+circleCon.getRadius()+", FORMAT="+formatParam+")", e);
78           }
79           
80        } catch (NumberFormatException e) {
81           doError(response, "Input parameters not correct",e);
82        }
83     }
84  }
85  
86