EpnTapController.java
4.86 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
/*
* This file is a part of EpnTAPClient.
* This program aims to provide EPN-TAP support for software clients, like CASSIS spectrum analyzer.
* See draft specifications: https://voparis-confluence.obspm.fr/pages/viewpage.action?pageId=559861
* Copyright (C) 2016 Institut de Recherche en Astrophysique et Planétologie.
*
* This program is free software: you can
* redistribute it and/or modify it under the terms of the GNU General Public License as published
* by the Free Software Foundation, either version 3 of the License, or (at your option) any later
* version. This program is distributed in the hope that it will be useful, but WITHOUT ANY
* WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
* PURPOSE. See the GNU General Public License for more details. You should have received a copy of
* the GNU General Public License along with this program. If not, see
* <http://www.gnu.org/licenses/>.
*/
package eu.omp.irap.vespa.epntapclient;
import java.util.List;
import java.util.logging.Logger;
import eu.omp.irap.vespa.epntapclient.service.Queries;
import eu.omp.irap.vespa.epntapclient.service.ServiceCore;
import eu.omp.irap.vespa.votable.Consts;
import eu.omp.irap.vespa.votable.controller.VOTableController;
import eu.omp.irap.vespa.votable.controller.VOTableException;
import eu.omp.irap.vespa.votable.utils.StringJoiner;
/**
* The main controller which manage views and controllers.
*
* @author N. Jourdane
*/
public abstract class EpnTapController {
/** The logger for the class EpnTapController. */
private static final Logger LOGGER = Logger.getLogger(EpnTapController.class.getName());
/** The request controller, to manage requests. */
private RequestCtrl requestCtrl;
/** The controller of the VOTable displaying the result. */
private VOTableController resultsCtrl;
/** The controller of the VOTable displaying the list of services. */
private VOTableController servicesCtrl;
/**
* The path of the VOTable to parse. Will be affected to a temporary folder if not assigned
* through the controller.
*/
private String voTablePath;
/**
* Method constructor, which initialize servicesController, resultsController and mainView.
*/
public EpnTapController() {
// TODO: Should not init controllers, because the default ctrl is called by subclasses.
String query = String.format(Queries.SELECT_ALL_TAP_SERVICES_WHERE_CORE,
ServiceCore.EPNCORE);
servicesCtrl = new VOTableController(Consts.DEFAULT_REGISTRY_URL, query);
}
/**
* @return The request controller.
*/
public RequestCtrl getRequestCtrl() {
return requestCtrl;
}
/**
* @return The controller of the VOTable which displays the result of the query.
*/
public VOTableController getResultsCtrl() {
return resultsCtrl;
}
/**
* @return The controller of the VOTable which displays the list of services.
*/
public VOTableController getServicesCtrl() {
return servicesCtrl;
}
/**
* @return the path of the XML VOTable file.
*/
public String getVOTablePath() {
return voTablePath;
}
/**
* Get the services from the XML path or the targetURL / query.
*
* @throws VOTableException Can not read the services.
*/
public void readServices() throws VOTableException {
// Here getServicesCtrl() is used instead of class field servicesCtrl to get the
// subclass field, since subclasses overrides getServicesCtrl().
getServicesCtrl().readTable();
}
/**
* ...
*
* @param tableNames
* @param servicesUrls
* @throws VOTableException Can not update the VOTable.
* @throws EpnTapException The lists are empty.
*/
public void sendQuery(List<String> tableNames, List<String> servicesUrls)
throws VOTableException, EpnTapException {
// Here getRequestCtrl() and getResultsCtrl() are used instead of class fields requestCtrl
// and resultCtrl to get the subclass field, since subclasses overrides getRequestCtrl() and
// getResultsCtrl().
LOGGER.info("Sending query(ies) on " + StringJoiner.join(servicesUrls));
if (tableNames.isEmpty()) {
throw new EpnTapException("There is no service to query.");
} else if (tableNames.size() != servicesUrls.size()) {
throw new EpnTapException(
"list of tableNames and list of servicesUrls are not the same size.");
}
for (int i = 0; i < tableNames.size(); i++) {
String query = getRequestCtrl().getQuery(tableNames.get(i));
getResultsCtrl().updateVOTable(servicesUrls.get(i), query);
}
}
/**
* Send the query to the specified service, download the result and update the voTable path.
*
* @param query An ADQL query to send.
* @param tableServiceURL the URL of the service.
* @throws VOTableException Can not get the VOTable.
*/
public void sendQuery(String query, String tableServiceURL) throws VOTableException {
resultsCtrl = new VOTableController(tableServiceURL, query);
resultsCtrl.readTable();
voTablePath = resultsCtrl.getVOTablePath();
}
}