From 70b98e7e9c1cf9bb3a3bbb6568c9f4032c3615fd Mon Sep 17 00:00:00 2001 From: Nathanael Jourdane Date: Fri, 13 May 2016 15:30:29 +0200 Subject: [PATCH] Add listeners. --- src/main/java/eu/omp/irap/vespa/epntapclient/RequestCtrl.java | 116 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/main/java/eu/omp/irap/vespa/epntapclient/gui/requestpanel/RequestPanelListener.java | 46 ++++++++++++++++++++++++++++++++++++++++++++++ src/main/java/eu/omp/irap/vespa/epntapclient/gui/resultpanel/ResultPanelListener.java | 27 +++++++++++++++++++++++++++ src/main/java/eu/omp/irap/vespa/epntapclient/gui/servicespanel/ServicesPanelListener.java | 25 +++++++++++++++++++++++++ 4 files changed, 214 insertions(+), 0 deletions(-) create mode 100644 src/main/java/eu/omp/irap/vespa/epntapclient/RequestCtrl.java create mode 100644 src/main/java/eu/omp/irap/vespa/epntapclient/gui/requestpanel/RequestPanelListener.java create mode 100644 src/main/java/eu/omp/irap/vespa/epntapclient/gui/resultpanel/ResultPanelListener.java create mode 100644 src/main/java/eu/omp/irap/vespa/epntapclient/gui/servicespanel/ServicesPanelListener.java diff --git a/src/main/java/eu/omp/irap/vespa/epntapclient/RequestCtrl.java b/src/main/java/eu/omp/irap/vespa/epntapclient/RequestCtrl.java new file mode 100644 index 0000000..987392d --- /dev/null +++ b/src/main/java/eu/omp/irap/vespa/epntapclient/RequestCtrl.java @@ -0,0 +1,116 @@ +/* + * 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 + * . + */ + +package eu.omp.irap.vespa.epntapclient; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.logging.Logger; + +import com.google.gson.JsonArray; +import com.google.gson.JsonObject; + +import eu.omp.irap.vespa.votable.utils.CantSendQueryException; +import eu.omp.irap.vespa.votable.utils.Network; +import eu.omp.irap.vespa.votable.utils.StringJoiner; + +/** + * @author N. Jourdane + */ +public class RequestCtrl { + + /** The logger for the class RequestCtrl. */ + private static final Logger logger = Logger.getLogger(RequestCtrl.class.getName()); + + /** The URL of the resolver used for the `target name` field. */ + private static final String RESOLVER_URL = "http://voparis-registry.obspm.fr/ssodnet/1/autocomplete"; + + /** + * The parameters fields for the request. + */ + protected Map paramValues = new HashMap<>(); + + + public RequestCtrl() { + + } + + /** + * @param nbRow The maximum number of rows returned. + * @param tableName The name of the target table for the query. + * @param params A map of parameters, for the `WHERE` keywords. + * @return The literal string of the query. + */ + public static String getQuery(String tableName, Map params, int nbRow) { + StringJoiner addJoin = new StringJoiner(" AND "); + for (Map.Entry param : params.entrySet()) { + if (param.getValue() instanceof ArrayList) { + StringJoiner orJoin = new StringJoiner(" OR "); + @SuppressWarnings("unchecked") + List possibleValues = (List) param.getValue(); + for (String possibleValue : possibleValues) { + orJoin.add(param.getKey() + " LIKE '" + possibleValue + "'"); + } + addJoin.add("(" + orJoin + ")"); + } else if (param.getValue() instanceof String) { + addJoin.add(param.getKey() + " LIKE '" + param.getValue() + "'"); + } else { + addJoin.add(param.getKey() + " = " + param.getValue().toString()); + } + } + String where = addJoin.isEmpty() ? "" : " WHERE " + addJoin; + return "SELECT TOP " + nbRow + " target_name, target_class FROM " + tableName + where; + } + + /** + * The method used to get target names propositions by asking to the resolver. + * + * @param begining The beginning of the target_name. + * @return An array of Strings corresponding to the target names got. + * @throws CantSendQueryException + * @throws CantGetXMLException If the resolver do not work. + */ + public static String[] getTargetNames(String begining) throws CantSendQueryException { + Map params = new HashMap<>(); + params.put("q", "\"" + begining + "\""); + + String query = Network.buildQuery(RESOLVER_URL, params); + JsonObject root = Network.readJson(query); + int count = Integer.parseInt(root.get("count").toString()); + String[] targetNames = new String[count]; + JsonArray hits = root.getAsJsonArray("hits"); + for (int i = 0; i < count; i++) { + JsonObject elmt = hits.get(i).getAsJsonObject(); + targetNames[i] = elmt.get("name").toString().replace("\"", ""); + } + return targetNames; + } + + public void updateParameter(String paramName, Object paramValue) { + paramValues.put(paramName, paramValue); + } + + public void removeParameter(String paramName) { + paramValues.remove(paramName); + } + + public Map getParamValues() { + return paramValues; + } + +} diff --git a/src/main/java/eu/omp/irap/vespa/epntapclient/gui/requestpanel/RequestPanelListener.java b/src/main/java/eu/omp/irap/vespa/epntapclient/gui/requestpanel/RequestPanelListener.java new file mode 100644 index 0000000..890d2fc --- /dev/null +++ b/src/main/java/eu/omp/irap/vespa/epntapclient/gui/requestpanel/RequestPanelListener.java @@ -0,0 +1,46 @@ +/* + * 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 + * . + */ + +package eu.omp.irap.vespa.epntapclient.gui.requestpanel; + +/** + * @author N. Jourdane + */ +public interface RequestPanelListener { + + /** + * ... + * + * @param text + */ + void onSendButtonClicked(String text); + + /** + * ... + * + * @param paramName + */ + void onParameterRemoved(String paramName); + + /** + * ... + * + * @param paramName + * @param query + */ + void onParameterChanged(String paramName, Object paramValue); + +} diff --git a/src/main/java/eu/omp/irap/vespa/epntapclient/gui/resultpanel/ResultPanelListener.java b/src/main/java/eu/omp/irap/vespa/epntapclient/gui/resultpanel/ResultPanelListener.java new file mode 100644 index 0000000..82c92f0 --- /dev/null +++ b/src/main/java/eu/omp/irap/vespa/epntapclient/gui/resultpanel/ResultPanelListener.java @@ -0,0 +1,27 @@ +/* + * 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 + * . + */ + +package eu.omp.irap.vespa.epntapclient.gui.resultpanel; + +import java.io.File; + +/** + * @author N. Jourdane + */ +public interface ResultPanelListener { + + public void onDownloadButtonClicked(File file); +} diff --git a/src/main/java/eu/omp/irap/vespa/epntapclient/gui/servicespanel/ServicesPanelListener.java b/src/main/java/eu/omp/irap/vespa/epntapclient/gui/servicespanel/ServicesPanelListener.java new file mode 100644 index 0000000..acb1149 --- /dev/null +++ b/src/main/java/eu/omp/irap/vespa/epntapclient/gui/servicespanel/ServicesPanelListener.java @@ -0,0 +1,25 @@ +/* + * 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 + * . + */ + +package eu.omp.irap.vespa.epntapclient.gui.servicespanel; + +/** + * @author N. Jourdane + */ +public interface ServicesPanelListener { + + public void onServiceSelected(int selectedServiceRow); +} -- libgit2 0.21.2