Commit 6dd0d3328afeeed02d50542f57865de3c68530e1

Authored by Nathanael Jourdane
1 parent 26c7a6bf
Exists in master

The controller do not use the View in order to use the project as a no-GUI library.

src/main/java/eu/omp/irap/vespa/epntapclient/EpnTapMainApp.java
@@ -23,7 +23,8 @@ import javax.swing.SwingUtilities; @@ -23,7 +23,8 @@ import javax.swing.SwingUtilities;
23 23
24 import com.google.gson.Gson; 24 import com.google.gson.Gson;
25 25
26 -import eu.omp.irap.vespa.epntapclient.controller.EpnTapController; 26 +import eu.omp.irap.vespa.epntapclient.gui.EpnTapMainView;
  27 +import eu.omp.irap.vespa.epntapclient.gui.GUIController;
27 28
28 /** 29 /**
29 * Simple class to have a main function to launch the EPNTap client. 30 * Simple class to have a main function to launch the EPNTap client.
@@ -35,6 +36,8 @@ public class EpnTapMainApp { @@ -35,6 +36,8 @@ public class EpnTapMainApp {
35 /** The logger for the class EpnTapMainApp. */ 36 /** The logger for the class EpnTapMainApp. */
36 private static final Logger logger = Logger.getLogger(EpnTapMainApp.class.getName()); 37 private static final Logger logger = Logger.getLogger(EpnTapMainApp.class.getName());
37 38
  39 + private static final String WRONG_COMMAND = "Usage: EpnTapMainApp";
  40 +
38 41
39 /** Constructor to hide the implicit public one. */ 42 /** Constructor to hide the implicit public one. */
40 private EpnTapMainApp() { 43 private EpnTapMainApp() {
@@ -47,23 +50,28 @@ public class EpnTapMainApp { @@ -47,23 +50,28 @@ public class EpnTapMainApp {
47 */ 50 */
48 public static void main(final String[] args) { 51 public static void main(final String[] args) {
49 EpnTapMainApp.logger.info("Lauching EPNTAP app with arguments: " + new Gson().toJson(args)); 52 EpnTapMainApp.logger.info("Lauching EPNTAP app with arguments: " + new Gson().toJson(args));
50 - SwingUtilities.invokeLater(new Runnable() { 53 + if (args.length != 0) {
  54 + System.console().writer().println(EpnTapMainApp.WRONG_COMMAND);
  55 + return;
  56 + }
  57 +
  58 + GUIController ctrl = new GUIController();
  59 + SwingUtilities.invokeLater(EpnTapMainApp.run(ctrl.getView(), "EPN-TAP client"));
  60 + }
  61 +
  62 + private static Runnable run(final EpnTapMainView voTableView, final String title) {
  63 + return new Runnable() {
51 64
52 @Override 65 @Override
53 public void run() { 66 public void run() {
54 - EpnTapController epnTapControl = new EpnTapController();  
55 - if (args.length != 0) {  
56 - System.console().writer().println("Usage: EpnTapMainApp");  
57 - return;  
58 - }  
59 -  
60 - JFrame frame = new JFrame("EPN-TAP client"); 67 + JFrame frame = new JFrame(title);
61 frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 68 frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
62 - frame.setContentPane(epnTapControl.getView()); 69 + frame.setContentPane(voTableView);
63 frame.setVisible(true); 70 frame.setVisible(true);
64 - frame.pack(); 71 + frame.setSize(800, 600);
65 frame.setLocationRelativeTo(null); 72 frame.setLocationRelativeTo(null);
66 } 73 }
67 - }); 74 + };
68 } 75 }
  76 +
69 } 77 }
src/main/java/eu/omp/irap/vespa/epntapclient/epnTapLib/EpnTapController.java
@@ -14,18 +14,12 @@ @@ -14,18 +14,12 @@
14 * <http://www.gnu.org/licenses/>. 14 * <http://www.gnu.org/licenses/>.
15 */ 15 */
16 16
17 -package eu.omp.irap.vespa.epntapclient.controller; 17 +package eu.omp.irap.vespa.epntapclient.epnTapLib;
18 18
19 -import java.io.File;  
20 -import java.io.IOException;  
21 -import java.nio.file.Files;  
22 -import java.nio.file.Paths;  
23 import java.util.HashMap; 19 import java.util.HashMap;
24 import java.util.Map; 20 import java.util.Map;
25 import java.util.logging.Logger; 21 import java.util.logging.Logger;
26 22
27 -import eu.omp.irap.vespa.epntapclient.utils.Queries;  
28 -import eu.omp.irap.vespa.epntapclient.view.EpnTapMainView;  
29 import eu.omp.irap.vespa.epntapclient.votable.controller.VOTableController; 23 import eu.omp.irap.vespa.epntapclient.votable.controller.VOTableController;
30 import eu.omp.irap.vespa.epntapclient.votable.controller.VOTableException.CantDisplayVOTableException; 24 import eu.omp.irap.vespa.epntapclient.votable.controller.VOTableException.CantDisplayVOTableException;
31 import eu.omp.irap.vespa.epntapclient.votable.controller.VOTableException.CantSendQueryException; 25 import eu.omp.irap.vespa.epntapclient.votable.controller.VOTableException.CantSendQueryException;
@@ -36,129 +30,70 @@ import eu.omp.irap.vespa.epntapclient.votable.utils.Const; @@ -36,129 +30,70 @@ import eu.omp.irap.vespa.epntapclient.votable.utils.Const;
36 * 30 *
37 * @author N. Jourdane 31 * @author N. Jourdane
38 */ 32 */
39 -public class EpnTapController implements ViewListener { 33 +public class EpnTapController {
40 34
41 /** The logger for the class EpnTapController. */ 35 /** The logger for the class EpnTapController. */
42 - private Logger logger = Logger.getLogger(EpnTapController.class.getName());  
43 -  
44 - /** The view of EPN-TAP application. */  
45 - private EpnTapMainView mainView; 36 + private static final Logger logger = Logger.getLogger(EpnTapController.class.getName());
46 37
47 /** The controller of the VOTable displaying the list of services. */ 38 /** The controller of the VOTable displaying the list of services. */
48 - private VOTableController servicesController;  
49 -  
50 - /** The controller of the VOTable displaying the query results. */  
51 - private VOTableController resultsController;  
52 -  
53 - /** The name of the table selected by the user on the table list panel. */  
54 - private String selectedTableName; 39 + protected VOTableController servicesCtrl;
55 40
56 - /** The URL of the service corresponding to the selected table. */  
57 - private String selectedTableServiceURL;  
58 -  
59 - private String voTablePath; 41 + /** The controller of the VOTable displaying the list of services. */
  42 + protected VOTableController resultsCtrl;
60 43
61 /** 44 /**
62 * The parameters fields for the request. 45 * The parameters fields for the request.
63 */ 46 */
64 - private Map<String, Object> paramValues = new HashMap<>(); 47 + protected Map<String, Object> paramValues = new HashMap<>();
65 48
66 49
67 /** 50 /**
68 * Method constructor, which initialize servicesController, resultsController and mainView. 51 * Method constructor, which initialize servicesController, resultsController and mainView.
69 */ 52 */
70 public EpnTapController() { 53 public EpnTapController() {
71 - servicesController = new VOTableController(Const.DEFAULT_REGISTRY_URL, "ADQL", 54 + servicesCtrl = new VOTableController(Const.DEFAULT_REGISTRY_URL, "ADQL",
72 Queries.GET_EPN_TAP_SERVICES); 55 Queries.GET_EPN_TAP_SERVICES);
73 - resultsController = new VOTableController();  
74 -  
75 - mainView = new EpnTapMainView(this, servicesController.getView(),  
76 - resultsController.getView());  
77 - // updateSelected(0); 56 + try {
  57 + servicesCtrl.readTable();
  58 + } catch (CantDisplayVOTableException e) {
  59 + // TODO Auto-generated catch block
  60 + e.printStackTrace();
  61 + } catch (CantSendQueryException e) {
  62 + // TODO Auto-generated catch block
  63 + e.printStackTrace();
  64 + }
78 } 65 }
79 66
80 - /**  
81 - * @return the EPN-TAP main view.  
82 - */  
83 - public EpnTapMainView getView() {  
84 - return mainView; 67 + public String sendQuery(String query, String tableServiceURL)
  68 + throws CantDisplayVOTableException, CantSendQueryException {
  69 + resultsCtrl = new VOTableController(tableServiceURL, "ADQL", query);
  70 + resultsCtrl.readTable();
  71 + return resultsCtrl.getVOTablePath();
85 } 72 }
86 73
87 /** 74 /**
88 * @return The controller of the VOTable which displays the result of the query. 75 * @return The controller of the VOTable which displays the result of the query.
89 */ 76 */
90 public VOTableController getResultsController() { 77 public VOTableController getResultsController() {
91 - return resultsController; 78 + return resultsCtrl;
92 } 79 }
93 80
94 /** 81 /**
95 * @return The controller of the VOTable which displays the list of services. 82 * @return The controller of the VOTable which displays the list of services.
96 */ 83 */
97 public VOTableController getServicesController() { 84 public VOTableController getServicesController() {
98 - return servicesController;  
99 - }  
100 -  
101 - /**  
102 - * Update the query area with a working ADQL query, based on the parameters list.  
103 - */  
104 - private void updateQueryArea() {  
105 - String query = Queries.getQuery(selectedTableName, paramValues, 10);  
106 - mainView.getRequestPanel().updateQueryArea(query); 85 + return servicesCtrl;
107 } 86 }
108 87
109 - /** Update the row selected by the user on the Services Panel. */  
110 - @Override  
111 - public void onServiceSelected(int selectedServiceRow) {  
112 - String serviceURL = mainView.getServicesPanel().getServiceURL(selectedServiceRow);  
113 - String tableName = mainView.getServicesPanel().getTableName(selectedServiceRow);  
114 - if (!tableName.equals(selectedTableName)) {  
115 - selectedTableServiceURL = serviceURL;  
116 - selectedTableName = tableName;  
117 - updateQueryArea();  
118 - logger.info("Selected table: " + selectedTableName + " - service: "  
119 - + selectedTableServiceURL);  
120 - }  
121 - }  
122 -  
123 - /** Send the specified query on selectedTableServiceURL */  
124 - @Override  
125 - public void onSendButtonClicked(String query) {  
126 - logger.info("Sending query: " + query + " on " + selectedTableServiceURL);  
127 - try {  
128 - voTablePath = resultsController.fillTable(selectedTableServiceURL, "ADQL", query);  
129 - } catch (CantDisplayVOTableException e) {  
130 - // TODO Create exception  
131 - e.printStackTrace();  
132 - } catch (CantSendQueryException e) {  
133 - // TODO Create exception  
134 - e.printStackTrace();  
135 - }  
136 - }  
137 -  
138 - /** Copy the VOTable to a specified location. */  
139 - @Override  
140 - public void onDownloadButtonClicked(File outputFile) {  
141 - try {  
142 - Files.copy(Paths.get(voTablePath), Paths.get(outputFile.getAbsolutePath()));  
143 - } catch (IOException e) {  
144 - // TODO Create exception  
145 - e.printStackTrace();  
146 - }  
147 - }  
148 -  
149 - /** Update a query parameter in the parameter list. */  
150 - @Override  
151 - public void onParameterChanged(String paramName, Object paramValue) { 88 + public void updateParameter(String paramName, Object paramValue) {
152 paramValues.put(paramName, paramValue); 89 paramValues.put(paramName, paramValue);
153 - updateQueryArea();  
154 - logger.info("uploaded " + paramName + ": " + paramValue);  
155 } 90 }
156 91
157 - /** Remove a query parameter from the parameters list. */  
158 - @Override  
159 - public void onParameterRemoved(String paramName) { 92 + public void removeParameter(String paramName) {
160 paramValues.remove(paramName); 93 paramValues.remove(paramName);
161 - updateQueryArea();  
162 - logger.info("removed " + paramName); 94 + }
  95 +
  96 + public Map<String, Object> getParamValues() {
  97 + return paramValues;
163 } 98 }
164 } 99 }
src/main/java/eu/omp/irap/vespa/epntapclient/epnTapLib/Queries.java
@@ -14,7 +14,7 @@ @@ -14,7 +14,7 @@
14 * <http://www.gnu.org/licenses/>. 14 * <http://www.gnu.org/licenses/>.
15 */ 15 */
16 16
17 -package eu.omp.irap.vespa.epntapclient.utils; 17 +package eu.omp.irap.vespa.epntapclient.epnTapLib;
18 18
19 import java.util.ArrayList; 19 import java.util.ArrayList;
20 import java.util.List; 20 import java.util.List;
src/main/java/eu/omp/irap/vespa/epntapclient/gui/EpnTapMainView.java
@@ -14,20 +14,19 @@ @@ -14,20 +14,19 @@
14 * <http://www.gnu.org/licenses/>. 14 * <http://www.gnu.org/licenses/>.
15 */ 15 */
16 16
17 -package eu.omp.irap.vespa.epntapclient.view; 17 +package eu.omp.irap.vespa.epntapclient.gui;
18 18
19 import java.awt.BorderLayout; 19 import java.awt.BorderLayout;
  20 +import java.awt.Dimension;
20 21
21 import javax.swing.JOptionPane; 22 import javax.swing.JOptionPane;
22 import javax.swing.JPanel; 23 import javax.swing.JPanel;
23 import javax.swing.JSplitPane; 24 import javax.swing.JSplitPane;
24 25
25 -import eu.omp.irap.vespa.epntapclient.controller.ViewListener;  
26 -import eu.omp.irap.vespa.epntapclient.view.panels.BottomBarPanel;  
27 -import eu.omp.irap.vespa.epntapclient.view.panels.RequestPanel;  
28 -import eu.omp.irap.vespa.epntapclient.view.panels.ResultsPanel;  
29 -import eu.omp.irap.vespa.epntapclient.view.panels.ServicesPanel;  
30 -import eu.omp.irap.vespa.epntapclient.votable.view.VOTableView; 26 +import eu.omp.irap.vespa.epntapclient.gui.panels.BottomBarPanel;
  27 +import eu.omp.irap.vespa.epntapclient.gui.panels.RequestPanel;
  28 +import eu.omp.irap.vespa.epntapclient.gui.panels.ResultsPanel;
  29 +import eu.omp.irap.vespa.epntapclient.gui.panels.ServicesPanel;
31 30
32 /** 31 /**
33 * The main view of the application, which manage all the other views. 32 * The main view of the application, which manage all the other views.
@@ -59,16 +58,53 @@ public class EpnTapMainView extends JPanel { @@ -59,16 +58,53 @@ public class EpnTapMainView extends JPanel {
59 * @param voTableResultsView The view to put in the results panel, built by ResultsController. 58 * @param voTableResultsView The view to put in the results panel, built by ResultsController.
60 */ 59 */
61 60
62 - public EpnTapMainView(ViewListener viewListener, VOTableView voTableServicesView,  
63 - VOTableView voTableResultsView) {  
64 - servicesPanel = new ServicesPanel(viewListener, voTableServicesView);  
65 - resultsPanel = new ResultsPanel(viewListener, voTableResultsView); 61 + public EpnTapMainView(ViewListener viewListener) {
  62 + servicesPanel = new ServicesPanel(viewListener);
  63 + resultsPanel = new ResultsPanel(viewListener);
66 requestPanel = new RequestPanel(viewListener); 64 requestPanel = new RequestPanel(viewListener);
67 bottomBarPanel = new BottomBarPanel(viewListener); 65 bottomBarPanel = new BottomBarPanel(viewListener);
68 buildMainView(); 66 buildMainView();
69 } 67 }
70 68
71 /** 69 /**
  70 + * Build and fill the GUI.
  71 + */
  72 + private void buildMainView() {
  73 + setLayout(new BorderLayout());
  74 +
  75 + JSplitPane northPanel = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, servicesPanel,
  76 + requestPanel);
  77 + JSplitPane mainPanel = new JSplitPane(JSplitPane.VERTICAL_SPLIT, northPanel, resultsPanel);
  78 +
  79 + add(mainPanel, BorderLayout.CENTER);
  80 + add(bottomBarPanel, BorderLayout.SOUTH);
  81 +
  82 + setSizes();
  83 + }
  84 +
  85 + private void setSizes() {
  86 +
  87 + servicesPanel
  88 + .setPreferredSize(new Dimension(GUIDim.LEFT_PANEL_WIDTH, GUIDim.TOP_PANEL_HEIGHT));
  89 + servicesPanel.setMinimumSize(
  90 + new Dimension(GUIDim.LEFT_PANEL_MIN_WIDTH, GUIDim.TOP_PANEL_MIN_HEIGHT));
  91 + resultsPanel
  92 + .setPreferredSize(new Dimension(GUIDim.LEFT_PANEL_WIDTH + GUIDim.RIGHT_PANEL_WIDTH,
  93 + GUIDim.BOTTOM_PANEL_HEIGHT));
  94 + resultsPanel.setMinimumSize(
  95 + new Dimension(GUIDim.LEFT_PANEL_MIN_WIDTH + GUIDim.RIGHT_PANEL_MIN_WIDTH,
  96 + GUIDim.BOTTOM_PANEL_MIN_HEIGHT));
  97 +
  98 + requestPanel
  99 + .setPreferredSize(new Dimension(GUIDim.RIGHT_PANEL_WIDTH, GUIDim.TOP_PANEL_HEIGHT));
  100 + requestPanel.setMinimumSize(
  101 + new Dimension(GUIDim.RIGHT_PANEL_MIN_WIDTH, GUIDim.TOP_PANEL_MIN_HEIGHT));
  102 +
  103 + // bottomBarPanel.setPreferredSize
  104 + // bottomBarPanel.setMinimumSize
  105 + }
  106 +
  107 + /**
72 * @return The JPanel where the VOTable result is displayed. 108 * @return The JPanel where the VOTable result is displayed.
73 */ 109 */
74 public ResultsPanel getResultsPanel() { 110 public ResultsPanel getResultsPanel() {
@@ -97,20 +133,6 @@ public class EpnTapMainView extends JPanel { @@ -97,20 +133,6 @@ public class EpnTapMainView extends JPanel {
97 } 133 }
98 134
99 /** 135 /**
100 - * Build and fill the GUI.  
101 - */  
102 - private void buildMainView() {  
103 - setLayout(new BorderLayout());  
104 -  
105 - JSplitPane northPanel = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, servicesPanel,  
106 - requestPanel);  
107 - JSplitPane mainPanel = new JSplitPane(JSplitPane.VERTICAL_SPLIT, northPanel, resultsPanel);  
108 -  
109 - add(mainPanel, BorderLayout.CENTER);  
110 - add(bottomBarPanel, BorderLayout.SOUTH);  
111 - }  
112 -  
113 - /**  
114 * Display an error message. Usually used each time an error happens. 136 * Display an error message. Usually used each time an error happens.
115 * 137 *
116 * @param title The title of the error. 138 * @param title The title of the error.
src/main/java/eu/omp/irap/vespa/epntapclient/gui/GUIController.java 0 โ†’ 100644
@@ -0,0 +1,127 @@ @@ -0,0 +1,127 @@
  1 +/*
  2 + * This file is a part of EpnTAPClient.
  3 + * This program aims to provide EPN-TAP support for software clients, like CASSIS spectrum analyzer.
  4 + * See draft specifications: https://voparis-confluence.obspm.fr/pages/viewpage.action?pageId=559861
  5 + * Copyright (C) 2016 Institut de Recherche en Astrophysique et Planรฉtologie.
  6 + *
  7 + * This program is free software: you can
  8 + * redistribute it and/or modify it under the terms of the GNU General Public License as published
  9 + * by the Free Software Foundation, either version 3 of the License, or (at your option) any later
  10 + * version. This program is distributed in the hope that it will be useful, but WITHOUT ANY
  11 + * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
  12 + * PURPOSE. See the GNU General Public License for more details. You should have received a copy of
  13 + * the GNU General Public License along with this program. If not, see
  14 + * <http://www.gnu.org/licenses/>.
  15 + */
  16 +
  17 +package eu.omp.irap.vespa.epntapclient.gui;
  18 +
  19 +import java.io.File;
  20 +import java.io.IOException;
  21 +import java.nio.file.Files;
  22 +import java.nio.file.Paths;
  23 +import java.util.logging.Level;
  24 +import java.util.logging.Logger;
  25 +
  26 +import eu.omp.irap.vespa.epntapclient.epnTapLib.EpnTapController;
  27 +import eu.omp.irap.vespa.epntapclient.epnTapLib.Queries;
  28 +import eu.omp.irap.vespa.epntapclient.votable.controller.VOTableException.CantDisplayVOTableException;
  29 +import eu.omp.irap.vespa.epntapclient.votable.controller.VOTableException.CantSendQueryException;
  30 +
  31 +/**
  32 + * @author N. Jourdane
  33 + */
  34 +public class GUIController extends EpnTapController implements ViewListener {
  35 +
  36 + /** The logger for the class GUIController. */
  37 + private static final Logger logger = Logger.getLogger(GUIController.class.getName());
  38 +
  39 + private EpnTapMainView mainView;
  40 +
  41 + private String voTablePath;
  42 +
  43 + /** The name of the table selected by the user on the table list panel. */
  44 + private String selectedTableName;
  45 +
  46 + /** The URL of the service corresponding to the selected table. */
  47 + private String selectedTableServiceURL;
  48 +
  49 +
  50 + public GUIController() {
  51 + super();
  52 + mainView = new EpnTapMainView(this);
  53 + mainView.getServicesPanel().fillTable(servicesCtrl.getColumns(), servicesCtrl.getData());
  54 + }
  55 +
  56 + public EpnTapMainView getView() {
  57 + return mainView;
  58 + }
  59 +
  60 + /** Update the row selected by the user on the Services Panel. */
  61 + @Override
  62 + public void onServiceSelected(int selectedServiceRow) {
  63 + mainView.getServicesPanel().getServiceURL(selectedServiceRow);
  64 + mainView.getServicesPanel().getTableName(selectedServiceRow);
  65 + }
  66 +
  67 + /** Send the specified query on selectedTableServiceURL */
  68 + @Override
  69 + public void onSendButtonClicked(String query) {
  70 + GUIController.logger.info("Sending query: " + query + " on " + selectedTableServiceURL);
  71 + try {
  72 + voTablePath = sendQuery(query, selectedTableServiceURL);
  73 + } catch (CantDisplayVOTableException | CantSendQueryException e) {
  74 + // TODO create exception
  75 + mainView.displayError("Can not send query.", e.getMessage());
  76 + GUIController.logger.log(Level.WARNING, "Can not send query.", e);
  77 + }
  78 + }
  79 +
  80 + /** Copy the VOTable to a specified location. */
  81 + @Override
  82 + public void onDownloadButtonClicked(File outputFile) {
  83 + try {
  84 + Files.copy(Paths.get(voTablePath), Paths.get(outputFile.getAbsolutePath()));
  85 + } catch (IOException e) {
  86 + // TODO create exception
  87 + mainView.displayError("Can not save the file.",
  88 + "Check that you can write on the specified directory.");
  89 + GUIController.logger.log(Level.WARNING, "Can not save the file.", e);
  90 + }
  91 + }
  92 +
  93 + /** Update a query parameter in the parameter list. */
  94 + @Override
  95 + public void onParameterChanged(String paramName, Object paramValue) {
  96 + updateParameter(paramName, paramName);
  97 + updateQueryArea();
  98 + GUIController.logger.info("uploaded " + paramName + ": " + paramValue);
  99 + }
  100 +
  101 + /** Remove a query parameter from the parameters list. */
  102 + @Override
  103 + public void onParameterRemoved(String paramName) {
  104 + removeParameter(paramName);
  105 + updateQueryArea();
  106 + GUIController.logger.info("removed " + paramName);
  107 + }
  108 +
  109 + /**
  110 + * Update the query area with a working ADQL query, based on the parameters list.
  111 + */
  112 + private void updateQueryArea() {
  113 + String query = Queries.getQuery(selectedTableName, paramValues, 10);
  114 + mainView.getRequestPanel().updateQueryArea(query);
  115 + }
  116 +
  117 + public void updateService(String serviceURL, String tableName) {
  118 + if (!tableName.equals(selectedTableName)) {
  119 + selectedTableServiceURL = serviceURL;
  120 + selectedTableName = tableName;
  121 + updateQueryArea();
  122 + GUIController.logger.info("Selected table: " + selectedTableName + " - service: "
  123 + + selectedTableServiceURL);
  124 + }
  125 + }
  126 +
  127 +}
src/main/java/eu/omp/irap/vespa/epntapclient/gui/GUIDim.java
@@ -14,7 +14,7 @@ @@ -14,7 +14,7 @@
14 * <http://www.gnu.org/licenses/>. 14 * <http://www.gnu.org/licenses/>.
15 */ 15 */
16 16
17 -package eu.omp.irap.vespa.epntapclient.view; 17 +package eu.omp.irap.vespa.epntapclient.gui;
18 18
19 /** 19 /**
20 * A simple class containing GUI panel and elements dimensions. 20 * A simple class containing GUI panel and elements dimensions.
src/main/java/eu/omp/irap/vespa/epntapclient/gui/ParamField.java
@@ -14,7 +14,7 @@ @@ -14,7 +14,7 @@
14 * <http://www.gnu.org/licenses/>. 14 * <http://www.gnu.org/licenses/>.
15 */ 15 */
16 16
17 -package eu.omp.irap.vespa.epntapclient.view; 17 +package eu.omp.irap.vespa.epntapclient.gui;
18 18
19 import java.awt.Color; 19 import java.awt.Color;
20 import java.awt.Dimension; 20 import java.awt.Dimension;
@@ -42,7 +42,6 @@ import com.google.gson.JsonArray; @@ -42,7 +42,6 @@ import com.google.gson.JsonArray;
42 import com.google.gson.JsonObject; 42 import com.google.gson.JsonObject;
43 import com.google.gson.JsonParser; 43 import com.google.gson.JsonParser;
44 44
45 -import eu.omp.irap.vespa.epntapclient.controller.ViewListener;  
46 import eu.omp.irap.vespa.epntapclient.votable.controller.VOTableConnection; 45 import eu.omp.irap.vespa.epntapclient.votable.controller.VOTableConnection;
47 import eu.omp.irap.vespa.epntapclient.votable.controller.VOTableException.CantSendQueryException; 46 import eu.omp.irap.vespa.epntapclient.votable.controller.VOTableException.CantSendQueryException;
48 47
src/main/java/eu/omp/irap/vespa/epntapclient/gui/ViewListener.java
@@ -14,7 +14,7 @@ @@ -14,7 +14,7 @@
14 * <http://www.gnu.org/licenses/>. 14 * <http://www.gnu.org/licenses/>.
15 */ 15 */
16 16
17 -package eu.omp.irap.vespa.epntapclient.controller; 17 +package eu.omp.irap.vespa.epntapclient.gui;
18 18
19 import java.io.File; 19 import java.io.File;
20 20
src/main/java/eu/omp/irap/vespa/epntapclient/gui/panels/BottomBarPanel.java
@@ -14,7 +14,7 @@ @@ -14,7 +14,7 @@
14 * <http://www.gnu.org/licenses/>. 14 * <http://www.gnu.org/licenses/>.
15 */ 15 */
16 16
17 -package eu.omp.irap.vespa.epntapclient.view.panels; 17 +package eu.omp.irap.vespa.epntapclient.gui.panels;
18 18
19 import java.awt.BorderLayout; 19 import java.awt.BorderLayout;
20 import java.awt.event.ActionEvent; 20 import java.awt.event.ActionEvent;
@@ -25,7 +25,7 @@ import javax.swing.JFileChooser; @@ -25,7 +25,7 @@ import javax.swing.JFileChooser;
25 import javax.swing.JLabel; 25 import javax.swing.JLabel;
26 import javax.swing.JPanel; 26 import javax.swing.JPanel;
27 27
28 -import eu.omp.irap.vespa.epntapclient.controller.ViewListener; 28 +import eu.omp.irap.vespa.epntapclient.gui.ViewListener;
29 29
30 /** 30 /**
31 * @author N. Jourdane 31 * @author N. Jourdane
src/main/java/eu/omp/irap/vespa/epntapclient/gui/panels/RequestPanel.java
@@ -14,7 +14,7 @@ @@ -14,7 +14,7 @@
14 * <http://www.gnu.org/licenses/>. 14 * <http://www.gnu.org/licenses/>.
15 */ 15 */
16 16
17 -package eu.omp.irap.vespa.epntapclient.view.panels; 17 +package eu.omp.irap.vespa.epntapclient.gui.panels;
18 18
19 import java.awt.BorderLayout; 19 import java.awt.BorderLayout;
20 import java.awt.Dimension; 20 import java.awt.Dimension;
@@ -29,13 +29,12 @@ import javax.swing.JButton; @@ -29,13 +29,12 @@ import javax.swing.JButton;
29 import javax.swing.JPanel; 29 import javax.swing.JPanel;
30 import javax.swing.JTextArea; 30 import javax.swing.JTextArea;
31 31
32 -import eu.omp.irap.vespa.epntapclient.controller.ViewListener;  
33 -import eu.omp.irap.vespa.epntapclient.view.GUIDim;  
34 -import eu.omp.irap.vespa.epntapclient.view.ParamField;  
35 -import eu.omp.irap.vespa.epntapclient.view.ParamField.DataProductTypeField;  
36 -import eu.omp.irap.vespa.epntapclient.view.ParamField.DateRangeField;  
37 -import eu.omp.irap.vespa.epntapclient.view.ParamField.FloatRangeField;  
38 -import eu.omp.irap.vespa.epntapclient.view.ParamField.TargetNameField; 32 +import eu.omp.irap.vespa.epntapclient.gui.ParamField;
  33 +import eu.omp.irap.vespa.epntapclient.gui.ParamField.DataProductTypeField;
  34 +import eu.omp.irap.vespa.epntapclient.gui.ParamField.DateRangeField;
  35 +import eu.omp.irap.vespa.epntapclient.gui.ParamField.FloatRangeField;
  36 +import eu.omp.irap.vespa.epntapclient.gui.ParamField.TargetNameField;
  37 +import eu.omp.irap.vespa.epntapclient.gui.ViewListener;
39 38
40 /** 39 /**
41 * The view of the panel where the user builds the query. 40 * The view of the panel where the user builds the query.
@@ -75,9 +74,6 @@ public class RequestPanel extends JPanel { @@ -75,9 +74,6 @@ public class RequestPanel extends JPanel {
75 private void buildRequestPanel() { 74 private void buildRequestPanel() {
76 setLayout(new BoxLayout(this, BoxLayout.Y_AXIS)); 75 setLayout(new BoxLayout(this, BoxLayout.Y_AXIS));
77 76
78 - setPreferredSize(new Dimension(GUIDim.RIGHT_PANEL_WIDTH, GUIDim.TOP_PANEL_HEIGHT));  
79 - setMinimumSize(new Dimension(GUIDim.RIGHT_PANEL_MIN_WIDTH, GUIDim.TOP_PANEL_MIN_HEIGHT));  
80 -  
81 this.add(buildParamPanel(), this); 77 this.add(buildParamPanel(), this);
82 this.add(buildQueryPanel(), this); 78 this.add(buildQueryPanel(), this);
83 this.add(buildButtonPanel(), this); 79 this.add(buildButtonPanel(), this);
src/main/java/eu/omp/irap/vespa/epntapclient/gui/panels/ResultsPanel.java
@@ -14,21 +14,17 @@ @@ -14,21 +14,17 @@
14 * <http://www.gnu.org/licenses/>. 14 * <http://www.gnu.org/licenses/>.
15 */ 15 */
16 16
17 -package eu.omp.irap.vespa.epntapclient.view.panels; 17 +package eu.omp.irap.vespa.epntapclient.gui.panels;
18 18
19 import java.awt.BorderLayout; 19 import java.awt.BorderLayout;
20 -import java.awt.Dimension;  
21 20
22 -import javax.swing.JPanel;  
23 -  
24 -import eu.omp.irap.vespa.epntapclient.controller.ViewListener;  
25 -import eu.omp.irap.vespa.epntapclient.view.GUIDim; 21 +import eu.omp.irap.vespa.epntapclient.gui.ViewListener;
26 import eu.omp.irap.vespa.epntapclient.votable.view.VOTableView; 22 import eu.omp.irap.vespa.epntapclient.votable.view.VOTableView;
27 23
28 /** 24 /**
29 * @author N. Jourdane 25 * @author N. Jourdane
30 */ 26 */
31 -public class ResultsPanel extends JPanel { 27 +public class ResultsPanel extends VOTableView {
32 28
33 /** The serial version UID. */ 29 /** The serial version UID. */
34 private static final long serialVersionUID = 1L; 30 private static final long serialVersionUID = 1L;
@@ -43,21 +39,14 @@ public class ResultsPanel extends JPanel { @@ -43,21 +39,14 @@ public class ResultsPanel extends JPanel {
43 * @param mainView The main view of the application. 39 * @param mainView The main view of the application.
44 * @param voTableView The generic view of the VOTable panel. 40 * @param voTableView The generic view of the VOTable panel.
45 */ 41 */
46 - public ResultsPanel(ViewListener viewListener, VOTableView voTableView) { 42 + public ResultsPanel(ViewListener viewListener) {
47 super(); 43 super();
48 this.viewListener = viewListener; 44 this.viewListener = viewListener;
49 45
50 - buildResultPanel(voTableView); 46 + buildResultPanel();
51 } 47 }
52 48
53 - private void buildResultPanel(VOTableView voTableView) { 49 + private void buildResultPanel() {
54 setLayout(new BorderLayout()); 50 setLayout(new BorderLayout());
55 -  
56 - setPreferredSize(new Dimension(GUIDim.LEFT_PANEL_WIDTH + GUIDim.RIGHT_PANEL_WIDTH,  
57 - GUIDim.BOTTOM_PANEL_HEIGHT));  
58 - setMinimumSize(new Dimension(GUIDim.LEFT_PANEL_MIN_WIDTH + GUIDim.RIGHT_PANEL_MIN_WIDTH,  
59 - GUIDim.BOTTOM_PANEL_MIN_HEIGHT));  
60 -  
61 - this.add(voTableView);  
62 } 51 }
63 } 52 }
src/main/java/eu/omp/irap/vespa/epntapclient/gui/panels/ServicesPanel.java
@@ -14,10 +14,9 @@ @@ -14,10 +14,9 @@
14 * <http://www.gnu.org/licenses/>. 14 * <http://www.gnu.org/licenses/>.
15 */ 15 */
16 16
17 -package eu.omp.irap.vespa.epntapclient.view.panels; 17 +package eu.omp.irap.vespa.epntapclient.gui.panels;
18 18
19 import java.awt.BorderLayout; 19 import java.awt.BorderLayout;
20 -import java.awt.Dimension;  
21 import java.awt.event.ActionEvent; 20 import java.awt.event.ActionEvent;
22 import java.awt.event.ActionListener; 21 import java.awt.event.ActionListener;
23 22
@@ -28,21 +27,17 @@ import javax.swing.JTextField; @@ -28,21 +27,17 @@ import javax.swing.JTextField;
28 import javax.swing.event.ListSelectionEvent; 27 import javax.swing.event.ListSelectionEvent;
29 import javax.swing.event.ListSelectionListener; 28 import javax.swing.event.ListSelectionListener;
30 29
31 -import eu.omp.irap.vespa.epntapclient.controller.ViewListener;  
32 -import eu.omp.irap.vespa.epntapclient.view.GUIDim; 30 +import eu.omp.irap.vespa.epntapclient.gui.ViewListener;
33 import eu.omp.irap.vespa.epntapclient.votable.view.VOTableView; 31 import eu.omp.irap.vespa.epntapclient.votable.view.VOTableView;
34 32
35 /** 33 /**
36 * @author N. Jourdane 34 * @author N. Jourdane
37 */ 35 */
38 -public class ServicesPanel extends JPanel { 36 +public class ServicesPanel extends VOTableView {
39 37
40 /** The serial version UID. */ 38 /** The serial version UID. */
41 private static final long serialVersionUID = 1L; 39 private static final long serialVersionUID = 1L;
42 40
43 - /** The generic view of the VOTable panel. */  
44 - private VOTableView voTableView;  
45 -  
46 private ViewListener viewListener; 41 private ViewListener viewListener;
47 42
48 private JButton serviceButton; 43 private JButton serviceButton;
@@ -59,31 +54,22 @@ public class ServicesPanel extends JPanel { @@ -59,31 +54,22 @@ public class ServicesPanel extends JPanel {
59 * @param mainView The main view of the application. 54 * @param mainView The main view of the application.
60 * @param voTableView The generic view of the VOTable panel. 55 * @param voTableView The generic view of the VOTable panel.
61 */ 56 */
62 - public ServicesPanel(final ViewListener viewListener, final VOTableView voTableView) { 57 + public ServicesPanel(final ViewListener viewListener) {
63 super(); 58 super();
64 this.viewListener = viewListener; 59 this.viewListener = viewListener;
65 - this.voTableView = voTableView;  
66 -  
67 - buildServicesPanel(voTableView); 60 + buildServicesPanel();
68 } 61 }
69 62
70 - private void buildServicesPanel(final VOTableView voTableView) {  
71 - setLayout(new BorderLayout());  
72 -  
73 - setPreferredSize(new Dimension(GUIDim.LEFT_PANEL_WIDTH, GUIDim.TOP_PANEL_HEIGHT));  
74 - setMinimumSize(new Dimension(GUIDim.LEFT_PANEL_MIN_WIDTH, GUIDim.TOP_PANEL_MIN_HEIGHT));  
75 -  
76 - voTableView.getTable().getSelectionModel()  
77 - .addListSelectionListener(new ListSelectionListener() { 63 + private void buildServicesPanel() {
  64 + getTable().getSelectionModel().addListSelectionListener(new ListSelectionListener() {
78 65
79 - @Override  
80 - public void valueChanged(ListSelectionEvent evt) {  
81 - viewListener.onServiceSelected(voTableView.getTable().getSelectedRow());  
82 - }  
83 - }); 66 + @Override
  67 + public void valueChanged(ListSelectionEvent evt) {
  68 + viewListener.onServiceSelected(getTable().getSelectedRow());
  69 + }
  70 + });
84 71
85 - this.add(buildAddServicePanel(), BorderLayout.CENTER);  
86 - this.add(voTableView, BorderLayout.NORTH); 72 + this.add(buildAddServicePanel(), BorderLayout.SOUTH);
87 } 73 }
88 74
89 private JPanel buildAddServicePanel() { 75 private JPanel buildAddServicePanel() {
@@ -145,7 +131,7 @@ public class ServicesPanel extends JPanel { @@ -145,7 +131,7 @@ public class ServicesPanel extends JPanel {
145 if (row == -1) { 131 if (row == -1) {
146 return serviceUrlTextField.getText(); 132 return serviceUrlTextField.getText();
147 } 133 }
148 - return (String) voTableView.getValueAt(5, row); 134 + return (String) getValueAt(5, row);
149 } 135 }
150 136
151 /** 137 /**
@@ -156,6 +142,6 @@ public class ServicesPanel extends JPanel { @@ -156,6 +142,6 @@ public class ServicesPanel extends JPanel {
156 if (row == -1) { 142 if (row == -1) {
157 return tableNameTextField.getText(); 143 return tableNameTextField.getText();
158 } 144 }
159 - return (String) voTableView.getValueAt(2, row); 145 + return (String) getValueAt(2, row);
160 } 146 }
161 } 147 }
src/main/java/eu/omp/irap/vespa/epntapclient/votable/view/VOTableView.java
@@ -69,6 +69,7 @@ public class VOTableView extends JPanel implements TableModelListener { @@ -69,6 +69,7 @@ public class VOTableView extends JPanel implements TableModelListener {
69 69
70 private void buildVOTableView() { 70 private void buildVOTableView() {
71 JScrollPane scrollPane = new JScrollPane(table); 71 JScrollPane scrollPane = new JScrollPane(table);
  72 +
72 scrollPane.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_AS_NEEDED); 73 scrollPane.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_AS_NEEDED);
73 scrollPane.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED); 74 scrollPane.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED);
74 75
@@ -83,7 +84,9 @@ public class VOTableView extends JPanel implements TableModelListener { @@ -83,7 +84,9 @@ public class VOTableView extends JPanel implements TableModelListener {
83 * @param data The VoTable data displayed on the JTable 84 * @param data The VoTable data displayed on the JTable
84 */ 85 */
85 public void fillTable(String[] columns, List<Object[]> data) { 86 public void fillTable(String[] columns, List<Object[]> data) {
  87 + System.out.println(columns + "\n" + data);
86 Object[][] values = data.toArray(new Object[data.size()][]); 88 Object[][] values = data.toArray(new Object[data.size()][]);
  89 + Utils.printObject("tableColumns", columns);
87 Utils.printObject("tableData", values); 90 Utils.printObject("tableData", values);
88 tableData.setDataVector(values, columns); 91 tableData.setDataVector(values, columns);
89 if (values.length != 0) { 92 if (values.length != 0) {