1
2
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
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
56
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
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
73 returnSpec = new ReturnTable(
74 new WriterTarget(response.getWriter()), format);
75 }
76
77 try {
78
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 }