Blame view

src/main/java/eu/omp/irap/vespa/epntapclient/EpnTapFacade.java 7.17 KB
fa934e09   Nathanael Jourdane   Add the epntap fa...
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
/*
 * 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/>.
 */

5e72363b   Nathanael Jourdane   Change project ar...
17
package eu.omp.irap.vespa.epntapclient;
fa934e09   Nathanael Jourdane   Add the epntap fa...
18

cfbb6d07   Nathanael Jourdane   Implement most of...
19
import java.text.ParseException;
4b3a296c   Nathanael Jourdane   Implement getServ...
20
import java.util.ArrayList;
fa934e09   Nathanael Jourdane   Add the epntap fa...
21
import java.util.List;
7191e325   Nathanael Jourdane   Implement VOResou...
22
import java.util.Map;
fa934e09   Nathanael Jourdane   Add the epntap fa...
23
24
import java.util.logging.Logger;

cfbb6d07   Nathanael Jourdane   Implement most of...
25
26
27
import eu.omp.irap.vespa.epntapclient.granule.Granule;
import eu.omp.irap.vespa.epntapclient.granule.GranuleCtrl;
import eu.omp.irap.vespa.epntapclient.service.Queries;
4bcbd19f   Nathanael Jourdane   Fix imports
28
import eu.omp.irap.vespa.epntapclient.service.Service;
cfbb6d07   Nathanael Jourdane   Implement most of...
29
30
31
32
import eu.omp.irap.vespa.epntapclient.service.ServiceCore;
import eu.omp.irap.vespa.epntapclient.service.ServiceCtrl;
import eu.omp.irap.vespa.epntapclient.voresource.VOResourceCtrl;
import eu.omp.irap.vespa.epntapclient.voresource.VOResourceException;
fa934e09   Nathanael Jourdane   Add the epntap fa...
33
import eu.omp.irap.vespa.epntapclient.voresource.model.Resource;
cfbb6d07   Nathanael Jourdane   Implement most of...
34
35
36
37
import eu.omp.irap.vespa.epntapclient.votable.model.VOTABLE;
import eu.omp.irap.vespa.votable.Consts;
import eu.omp.irap.vespa.votable.controller.CantGetVOTableException;
import eu.omp.irap.vespa.votable.controller.VOTableController;
9144ee77   Nathanael Jourdane   Implement Service...
38
import eu.omp.irap.vespa.votable.utils.StringJoiner;
cfbb6d07   Nathanael Jourdane   Implement most of...
39
import eu.omp.irap.vespa.votable.votabledata.VOTableData;
fa934e09   Nathanael Jourdane   Add the epntap fa...
40
41
42
43
44
45
46
47
48
49

/**
 * @author N. Jourdane
 */
public class EpnTapFacade implements EpnTapInterface {

	/** The logger for the class EpnTapFacade. */
	private static final Logger logger = Logger.getLogger(EpnTapFacade.class.getName());


cfbb6d07   Nathanael Jourdane   Implement most of...
50
51
	// *** Resource ***

fa934e09   Nathanael Jourdane   Add the epntap fa...
52
	@Override
cfbb6d07   Nathanael Jourdane   Implement most of...
53
54
	public Resource getEPNVOresource(String ivoid) throws VOResourceException {
		return VOResourceCtrl.getVOresource(ivoid);
fa934e09   Nathanael Jourdane   Add the epntap fa...
55
56
	}

cfbb6d07   Nathanael Jourdane   Implement most of...
57
58
	// *** Resources ***

fa934e09   Nathanael Jourdane   Add the epntap fa...
59
	@Override
cfbb6d07   Nathanael Jourdane   Implement most of...
60
61
	public List<Resource> getEPNVOResources() throws VOResourceException {
		return VOResourceCtrl.getVOResources(ServiceCore.EPNCORE);
fa934e09   Nathanael Jourdane   Add the epntap fa...
62
63
	}

fa934e09   Nathanael Jourdane   Add the epntap fa...
64
	@Override
cfbb6d07   Nathanael Jourdane   Implement most of...
65
66
67
	public List<Resource> getEPNVOResources(Map<String, String> keywords)
			throws VOResourceException {
		return VOResourceCtrl.getVOResources(ServiceCore.EPNCORE, keywords);
fa934e09   Nathanael Jourdane   Add the epntap fa...
68
69
	}

cfbb6d07   Nathanael Jourdane   Implement most of...
70
	// *** Service ***
fa934e09   Nathanael Jourdane   Add the epntap fa...
71

cfbb6d07   Nathanael Jourdane   Implement most of...
72
73
	public Service _getEPNService(String ivoid) throws CantGetVOTableException {
		return ServiceCtrl.getServiceFromIvoid(ivoid);
fa934e09   Nathanael Jourdane   Add the epntap fa...
74
75
	}

fa934e09   Nathanael Jourdane   Add the epntap fa...
76
	@Override
cfbb6d07   Nathanael Jourdane   Implement most of...
77
78
79
80
81
	public VOTABLE getEPNService(String ivoid) throws CantGetVOTableException {
		String query = String.format(Queries.GET_TAP_SERVICES_WHERE_IVOID, ivoid);
		VOTableController ctrl = new VOTableController(Consts.DEFAULT_REGISTRY_URL, query);
		ctrl.readTable();
		return ctrl.getVOTable();
fa934e09   Nathanael Jourdane   Add the epntap fa...
82
83
	}

fa934e09   Nathanael Jourdane   Add the epntap fa...
84
	@Override
cfbb6d07   Nathanael Jourdane   Implement most of...
85
86
	public VOTABLE getEPNService(String ivoid, List<String> attributes)
			throws CantGetVOTableException {
4b3a296c   Nathanael Jourdane   Implement getServ...
87
		// TODO: optimiser le nombre de requêtes
9144ee77   Nathanael Jourdane   Implement Service...
88
89
90
91
92
		String tableName = getEPNCoreTableName(ivoid);
		String query = String.format(Queries.SELECT_FROM, StringJoiner.join(attributes), tableName);
		VOTableController ctrl = new VOTableController(getTAPURL(ivoid), query);
		ctrl.readTable();
		return ctrl.getVOTable();
fa934e09   Nathanael Jourdane   Add the epntap fa...
93
94
	}

cfbb6d07   Nathanael Jourdane   Implement most of...
95
	// *** Services ***
fa934e09   Nathanael Jourdane   Add the epntap fa...
96

cfbb6d07   Nathanael Jourdane   Implement most of...
97
	@Override
4b3a296c   Nathanael Jourdane   Implement getServ...
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
	public List<VOTABLE> getEPNServices() throws VOResourceException {
		List<VOTABLE> voTables = new ArrayList<>();
		List<String> ivoids = VOResourceCtrl.getIvoidResources(ServiceCore.EPNCORE);
		// TODO: optimiser le nombre de requêtes
		for (String ivoid : ivoids) {
			try {
				String query = String.format(Queries.SELECT_ALL, getEPNCoreTableName(ivoid));
				VOTableController ctrl = new VOTableController(getTAPURL(ivoid), query);
				ctrl.readTable();
				voTables.add(ctrl.getVOTable());
			} catch (CantGetVOTableException e) {
				logger.info("Can not get the service " + ivoid + ", skipping...");
			}
		}
		return voTables;
fa934e09   Nathanael Jourdane   Add the epntap fa...
113
114
	}

fa934e09   Nathanael Jourdane   Add the epntap fa...
115
	@Override
4b3a296c   Nathanael Jourdane   Implement getServ...
116
117
	public List<VOTABLE> getEPNServices(List<String> attributes)
			throws CantGetVOTableException, VOResourceException {
8ae5b6c8   Nathanael Jourdane   Implement getServ...
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
		List<VOTABLE> voTables = new ArrayList<>();
		List<String> ivoids = VOResourceCtrl.getIvoidResources(ServiceCore.EPNCORE);
		// TODO: optimiser le nombre de requêtes
		for (String ivoid : ivoids) {
			try {
				String tableName = getEPNCoreTableName(ivoid);
				String query = String.format(Queries.SELECT_FROM, StringJoiner.join(attributes),
						tableName);
				VOTableController ctrl = new VOTableController(getTAPURL(ivoid), query);
				ctrl.readTable();
				voTables.add(ctrl.getVOTable());
			} catch (CantGetVOTableException e) {
				logger.info("Can not get the service " + ivoid + ", skipping...");
			}
		}
		return voTables;
fa934e09   Nathanael Jourdane   Add the epntap fa...
134
135
	}

fa934e09   Nathanael Jourdane   Add the epntap fa...
136
	@Override
4b3a296c   Nathanael Jourdane   Implement getServ...
137
138
	public List<VOTABLE> getEPNServices(Map<String, String> keywords, List<String> attributes)
			throws CantGetVOTableException, VOResourceException {
8ae5b6c8   Nathanael Jourdane   Implement getServ...
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
		List<VOTABLE> voTables = new ArrayList<>();
		List<String> ivoids = VOResourceCtrl.getIvoidResources(ServiceCore.EPNCORE, keywords);
		// TODO: optimiser le nombre de requêtes
		for (String ivoid : ivoids) {
			try {
				String tableName = getEPNCoreTableName(ivoid);
				String query = String.format(Queries.SELECT_FROM, StringJoiner.join(attributes),
						tableName);
				VOTableController ctrl = new VOTableController(getTAPURL(ivoid), query);
				ctrl.readTable();
				voTables.add(ctrl.getVOTable());
			} catch (CantGetVOTableException e) {
				logger.info("Can not get the service " + ivoid + ", skipping...");
			}
		}
		return voTables;
fa934e09   Nathanael Jourdane   Add the epntap fa...
155
156
	}

cfbb6d07   Nathanael Jourdane   Implement most of...
157
	// *** Getters ***
fa934e09   Nathanael Jourdane   Add the epntap fa...
158

cfbb6d07   Nathanael Jourdane   Implement most of...
159
160
161
162
163
164
165
166
	@Override
	public String getEPNCoreTableName(String ivoid)
			throws CantGetVOTableException {
		String query = String.format(Queries.GET_TAP_SERVICES_SELECT_WHERE_IVOID, "table_name",
				ivoid);
		VOTableController ctrl = new VOTableController(Consts.DEFAULT_REGISTRY_URL, query);
		ctrl.readTable();
		return (String) ctrl.getVOTableData().getCell(0, 0);
fa934e09   Nathanael Jourdane   Add the epntap fa...
167
168
	}

fa934e09   Nathanael Jourdane   Add the epntap fa...
169
	@Override
cfbb6d07   Nathanael Jourdane   Implement most of...
170
171
172
173
174
175
176
	public String getTAPURL(String ivoid)
			throws CantGetVOTableException {
		String query = String.format(Queries.GET_TAP_SERVICES_SELECT_WHERE_IVOID, "access_url",
				ivoid);
		VOTableController ctrl = new VOTableController(Consts.DEFAULT_REGISTRY_URL, query);
		ctrl.readTable();
		return (String) ctrl.getVOTableData().getCell(0, 0);
fa934e09   Nathanael Jourdane   Add the epntap fa...
177
178
	}

cfbb6d07   Nathanael Jourdane   Implement most of...
179
180
	// *** Queries ***

fa934e09   Nathanael Jourdane   Add the epntap fa...
181
	@Override
cfbb6d07   Nathanael Jourdane   Implement most of...
182
183
184
185
186
187
188
189
190
191
192
193
194
195
	public List<Granule> sendADQLQuery(String tapURL, String adqlQuery)
			throws CantGetVOTableException {
		EpnTapController epnTapCtrl = new EpnTapController();
		epnTapCtrl.sendQuery(adqlQuery, tapURL);
		VOTableData data = epnTapCtrl.getResultsController().getVOTableData();
		List<Granule> granules;
		try {
			GranuleCtrl gc = new GranuleCtrl(data);
			granules = gc.getGranulesFromVOTable();
		} catch (ParseException e) {
			throw new CantGetVOTableException("Parsing error on a granule.", e);
		}
		return granules;
	}
fa934e09   Nathanael Jourdane   Add the epntap fa...
196

cfbb6d07   Nathanael Jourdane   Implement most of...
197
198
199
200
	@Override
	public List<Granule> sendQuery(String tapURL, String schemaName, String query) {
		// TODO TBC
		return null;
fa934e09   Nathanael Jourdane   Add the epntap fa...
201
202
203
	}

}