/* * 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; import java.io.File; import java.io.IOException; import java.nio.file.Files; import java.nio.file.Paths; import java.util.logging.Level; import java.util.logging.Logger; import eu.omp.irap.vespa.epntapclient.EpnTapController; import eu.omp.irap.vespa.epntapclient.service.Queries; import eu.omp.irap.vespa.epntapclient.votable.VOTableException.CantDisplayVOTableException; import eu.omp.irap.vespa.epntapclient.votable.VOTableException.CantSendQueryException; /** * @author N. Jourdane */ public class GUIController extends EpnTapController implements ViewListener { /** The logger for the class GUIController. */ private static final Logger logger = Logger.getLogger(GUIController.class.getName()); private EpnTapMainView mainView; private String voTablePath; /** The name of the table selected by the user on the table list panel. */ private String selectedTableName; /** The URL of the service corresponding to the selected table. */ private String selectedTableServiceURL; public GUIController() { super(); mainView = new EpnTapMainView(this); mainView.getServicesPanel().fillTable(servicesCtrl.getColumns(), servicesCtrl.getData()); } public EpnTapMainView getView() { return mainView; } /** Update the row selected by the user on the Services Panel. */ @Override public void onServiceSelected(int selectedServiceRow) { mainView.getServicesPanel().getServiceURL(selectedServiceRow); mainView.getServicesPanel().getTableName(selectedServiceRow); } /** Send the specified query on selectedTableServiceURL */ @Override public void onSendButtonClicked(String query) { GUIController.logger.info("Sending query: " + query + " on " + selectedTableServiceURL); try { voTablePath = sendQuery(query, selectedTableServiceURL); } catch (CantDisplayVOTableException | CantSendQueryException e) { // TODO create exception mainView.displayError("Can not send query.", e.getMessage()); GUIController.logger.log(Level.WARNING, "Can not send query.", e); } } /** Copy the VOTable to a specified location. */ @Override public void onDownloadButtonClicked(File outputFile) { try { Files.copy(Paths.get(voTablePath), Paths.get(outputFile.getAbsolutePath())); } catch (IOException e) { // TODO create exception mainView.displayError("Can not save the file.", "Check that you can write on the specified directory."); GUIController.logger.log(Level.WARNING, "Can not save the file.", e); } } /** Update a query parameter in the parameter list. */ @Override public void onParameterChanged(String paramName, Object paramValue) { updateParameter(paramName, paramName); updateQueryArea(); GUIController.logger.info("uploaded " + paramName + ": " + paramValue); } /** Remove a query parameter from the parameters list. */ @Override public void onParameterRemoved(String paramName) { removeParameter(paramName); updateQueryArea(); GUIController.logger.info("removed " + paramName); } /** * Update the query area with a working ADQL query, based on the parameters list. */ private void updateQueryArea() { String query = Queries.getQuery(selectedTableName, paramValues, 10); mainView.getRequestPanel().updateQueryArea(query); } public void updateService(String serviceURL, String tableName) { if (!tableName.equals(selectedTableName)) { selectedTableServiceURL = serviceURL; selectedTableName = tableName; updateQueryArea(); GUIController.logger.info("Selected table: " + selectedTableName + " - service: " + selectedTableServiceURL); } } }