/* * 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 javax.swing.JOptionPane; import eu.omp.irap.vespa.epntapclient.EpnTapController; import eu.omp.irap.vespa.epntapclient.service.Queries; import eu.omp.irap.vespa.votable.controller.CantGetVOTableException; /** * @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; private int nbMaxResult = 10; public GUIController() { super(); mainView = new EpnTapMainView(this); } @Override public void readServices() { try { servicesCtrl.readTable(); } catch (CantGetVOTableException e) { displayError("Can not get services.", e); } mainView.getServicesPanel().fillTable(servicesCtrl.getVOTableData()); } public EpnTapMainView getView() { return mainView; } /** Update the row selected by the user on the Services Panel. */ @Override public void onServiceSelected(int selectedServiceRow) { String url = mainView.getServicesPanel().getServiceURL(selectedServiceRow); String tableName = mainView.getServicesPanel().getTableName(selectedServiceRow); updateService(url, tableName); } /** 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 (CantGetVOTableException e) { displayError("Can not send the query.", e); GUIController.logger.log(Level.WARNING, "Can not send query.", e); } mainView.getResultsPanel().fillTable(resultsCtrl.getVOTableData()); } @Override public void displayError(String message, Exception e) { logger.log(Level.SEVERE, message, e); JOptionPane.showMessageDialog(mainView, e.getMessage(), message, JOptionPane.ERROR_MESSAGE); } /** 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, paramValue); 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, getNbMaxResult()); mainView.getRequestPanel().updateQueryArea(query); } /** * @return the nb max of result */ public int getNbMaxResult() { return nbMaxResult; } /** * set the nb max of result for a query */ public void setNbMaxResult(int nb) { nbMaxResult = nb; } public void updateService(String serviceURL, String tableName) { if (!tableName.equals(selectedTableName)) { selectedTableServiceURL = serviceURL; selectedTableName = tableName; updateQueryArea(); GUIController.logger.info("Selected table: " + selectedTableName + " - service: " + selectedTableServiceURL); } } }