Commit 5af53be70ea4e57d24f2f054740499e3ce2f69f8

Authored by Nathanael Jourdane
1 parent c57c07b1
Exists in master

Make the application more MVC.

src/main/java/eu/omp/irap/vespa/epntapclient/EpnTapMainApp.java
@@ -45,8 +45,8 @@ public class EpnTapMainApp { @@ -45,8 +45,8 @@ public class EpnTapMainApp {
45 SwingUtilities.invokeLater(new Runnable() { 45 SwingUtilities.invokeLater(new Runnable() {
46 @Override 46 @Override
47 public void run() { 47 public void run() {
48 - EpnTapController epnTapControl = new EpnTapController();  
49 logger.info("Lauching EPN-TAP application..."); 48 logger.info("Lauching EPN-TAP application...");
  49 + EpnTapController epnTapControl = new EpnTapController();
50 if (args.length != 0) { 50 if (args.length != 0) {
51 System.console().writer().println("Usage: EpnTapMainApp"); 51 System.console().writer().println("Usage: EpnTapMainApp");
52 return; 52 return;
src/main/java/eu/omp/irap/vespa/epntapclient/controller/EpnTapController.java
@@ -16,24 +16,28 @@ @@ -16,24 +16,28 @@
16 16
17 package eu.omp.irap.vespa.epntapclient.controller; 17 package eu.omp.irap.vespa.epntapclient.controller;
18 18
  19 +import java.util.HashMap;
  20 +import java.util.Map;
  21 +import java.util.logging.Level;
19 import java.util.logging.Logger; 22 import java.util.logging.Logger;
20 23
21 import eu.omp.irap.vespa.epntapclient.utils.Const; 24 import eu.omp.irap.vespa.epntapclient.utils.Const;
22 import eu.omp.irap.vespa.epntapclient.utils.Queries; 25 import eu.omp.irap.vespa.epntapclient.utils.Queries;
23 import eu.omp.irap.vespa.epntapclient.view.EpnTapMainView; 26 import eu.omp.irap.vespa.epntapclient.view.EpnTapMainView;
  27 +import eu.omp.irap.vespa.epntapclient.view.EpnTapMainView.MainViewListener;
  28 +import eu.omp.irap.vespa.epntapclient.view.Event;
24 import eu.omp.irap.vespa.epntapclient.votable.controller.VOTableController; 29 import eu.omp.irap.vespa.epntapclient.votable.controller.VOTableController;
25 import eu.omp.irap.vespa.epntapclient.votable.controller.VOTableException; 30 import eu.omp.irap.vespa.epntapclient.votable.controller.VOTableException;
26 -import eu.omp.irap.vespa.epntapclient.votable.view.VOTableView;  
27 31
28 /** 32 /**
29 * @author N. Jourdane 33 * @author N. Jourdane
30 */ 34 */
31 -public class EpnTapController { 35 +public class EpnTapController implements MainViewListener {
32 /** The logger for the class EpnTapController. */ 36 /** The logger for the class EpnTapController. */
33 Logger logger = Logger.getLogger(EpnTapController.class.getName()); 37 Logger logger = Logger.getLogger(EpnTapController.class.getName());
34 38
35 /** The view of EPN-TAP application. */ 39 /** The view of EPN-TAP application. */
36 - EpnTapMainView view; 40 + EpnTapMainView mainView;
37 41
38 /** The controller of the VOTable displaying the list of services. */ 42 /** The controller of the VOTable displaying the list of services. */
39 VOTableController servicesController; 43 VOTableController servicesController;
@@ -48,17 +52,21 @@ public class EpnTapController { @@ -48,17 +52,21 @@ public class EpnTapController {
48 String selectedTableServiceURL; 52 String selectedTableServiceURL;
49 53
50 /** 54 /**
  55 + * The parameters fields for the request.
  56 + */
  57 + private Map<String, Object> paramValues = new HashMap<>();
  58 +
  59 + /**
51 * Method constructor 60 * Method constructor
52 */ 61 */
53 public EpnTapController() { 62 public EpnTapController() {
54 servicesController = new VOTableController(Const.DEFAULT_REGISTRY_URL, "ADQL", 63 servicesController = new VOTableController(Const.DEFAULT_REGISTRY_URL, "ADQL",
55 Queries.GET_EPN_TAP_SERVICES); 64 Queries.GET_EPN_TAP_SERVICES);
56 -  
57 resultsController = new VOTableController(); 65 resultsController = new VOTableController();
58 66
59 - VOTableView serviceView = servicesController.getView();  
60 - VOTableView resultsView = resultsController.getView();  
61 - view = new EpnTapMainView(this, serviceView, resultsView); 67 + mainView = new EpnTapMainView(this, servicesController.getView(),
  68 + resultsController.getView());
  69 + mainView.addMainViewListener(this);
62 updateSelected(0); 70 updateSelected(0);
63 } 71 }
64 72
@@ -66,7 +74,7 @@ public class EpnTapController { @@ -66,7 +74,7 @@ public class EpnTapController {
66 * @return the EPN-TAP view. 74 * @return the EPN-TAP view.
67 */ 75 */
68 public EpnTapMainView getView() { 76 public EpnTapMainView getView() {
69 - return view; 77 + return mainView;
70 } 78 }
71 79
72 /** 80 /**
@@ -87,19 +95,32 @@ public class EpnTapController { @@ -87,19 +95,32 @@ public class EpnTapController {
87 * @param row The row selected by the user on the Jtable. 95 * @param row The row selected by the user on the Jtable.
88 */ 96 */
89 public void updateSelected(int row) { 97 public void updateSelected(int row) {
90 - String serviceURL = (String) view.getServicesView().getValueAt(5, row);  
91 - String tableName = (String) view.getServicesView().getValueAt(2, row); 98 + String serviceURL = mainView.getServicesPanel().getServiceURL(row);
  99 + String tableName = mainView.getServicesPanel().getTableName(row);
92 if (!tableName.equals(selectedTableName)) { 100 if (!tableName.equals(selectedTableName)) {
93 selectedTableServiceURL = serviceURL; 101 selectedTableServiceURL = serviceURL;
94 selectedTableName = tableName; 102 selectedTableName = tableName;
95 - view.getRequestView().updateQueryArea(); 103 + updateQueryArea();
96 logger.info("Selected table: " + selectedTableName + " - service: " 104 logger.info("Selected table: " + selectedTableName + " - service: "
97 + selectedTableServiceURL); 105 + selectedTableServiceURL);
98 } 106 }
99 } 107 }
100 108
101 - public String getSelectedTable() {  
102 - return selectedTableName; 109 + public void removeParameter(String paramName) {
  110 + paramValues.remove(paramName);
  111 + updateQueryArea();
  112 + logger.info("removed " + paramName);
  113 + }
  114 +
  115 + public void updateParameter(String paramName, Object value) {
  116 + paramValues.put(paramName, value);
  117 + updateQueryArea();
  118 + logger.info("uploaded " + paramName + ": " + value);
  119 + }
  120 +
  121 + private void updateQueryArea() {
  122 + String query = Queries.getQuery(selectedTableName, paramValues, 10);
  123 + mainView.getRequestPanel().updateQueryArea(query);
103 } 124 }
104 125
105 /** 126 /**
@@ -110,4 +131,35 @@ public class EpnTapController { @@ -110,4 +131,35 @@ public class EpnTapController {
110 logger.info("Sending query: " + query + " on " + selectedTableServiceURL); 131 logger.info("Sending query: " + query + " on " + selectedTableServiceURL);
111 resultsController.fillTable(selectedTableServiceURL, "ADQL", query); 132 resultsController.fillTable(selectedTableServiceURL, "ADQL", query);
112 } 133 }
  134 +
  135 + /**
  136 + * @param event
  137 + * @param args
  138 + */
  139 + public void event(Event event, Object[] args) {
  140 + logger.info("new event: " + event.toString());
  141 +
  142 + try {
  143 + switch (event) {
  144 + case serviceSelected:
  145 + updateSelected((int) args[0]);
  146 + break;
  147 + case btnSearchClicked:
  148 + sendQuery((String) args[0]);
  149 + break;
  150 + case paramChanged:
  151 + updateParameter((String) args[0], args[1]);
  152 + break;
  153 + case paramRemoved:
  154 + removeParameter((String) args[0]);
  155 + break;
  156 + default:
  157 + logger.warning("Event " + event.toString() + " detected but is not implemented.");
  158 + }
  159 + } catch (Exception e) {
  160 + mainView.displayError("Error", "An unexpected error occured: " + e.getMessage()
  161 + + ".\nPlease report it to the developper team.");
  162 + logger.log(Level.SEVERE, "Error occured when " + event.toString(), e);
  163 + }
  164 + }
113 } 165 }
src/main/java/eu/omp/irap/vespa/epntapclient/view/Dim.java 0 โ†’ 100644
@@ -0,0 +1,42 @@ @@ -0,0 +1,42 @@
  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.view;
  18 +
  19 +/**
  20 + * A simple class containing GUI panel and elements dimensions.
  21 + *
  22 + * @author N. Jourdane
  23 + */
  24 +public class Dim {
  25 + /** The width of the left panel (services view). */
  26 + public static final int LEFT_PANEL_WIDTH = 400;
  27 + /** The minimum width of the left panel (services view). */
  28 + public static final int LEFT_PANEL_MIN_WIDTH = 150;
  29 + /** The width of the right panel (request view). */
  30 + public static final int RIGHT_PANEL_WIDTH = 400;
  31 + /** The minimum width of the right panel (request view). */
  32 + public static final int RIGHT_PANEL_MIN_WIDTH = 220;
  33 +
  34 + /** The height of the top panel (request view and services view). */
  35 + public static final int TOP_PANEL_HEIGHT = 250;
  36 + /** The minimum height of the top panel (request view and services view). */
  37 + public static final int TOP_PANEL_MIN_HEIGHT = 190;
  38 + /** The height of the bottom panel (result view). */
  39 + public static final int BOTTOM_PANEL_HEIGHT = 150;
  40 + /** The minimum height of the bottom panel (result view). */
  41 + public static final int BOTTOM_PANEL_MIN_HEIGHT = 100;
  42 +}
src/main/java/eu/omp/irap/vespa/epntapclient/view/EpnTapMainView.java
@@ -17,16 +17,17 @@ @@ -17,16 +17,17 @@
17 package eu.omp.irap.vespa.epntapclient.view; 17 package eu.omp.irap.vespa.epntapclient.view;
18 18
19 import java.awt.BorderLayout; 19 import java.awt.BorderLayout;
20 -import java.awt.Dimension;  
21 import java.util.logging.Logger; 20 import java.util.logging.Logger;
22 21
23 import javax.swing.JOptionPane; 22 import javax.swing.JOptionPane;
24 import javax.swing.JPanel; 23 import javax.swing.JPanel;
25 import javax.swing.JSplitPane; 24 import javax.swing.JSplitPane;
26 -import javax.swing.event.ListSelectionEvent;  
27 -import javax.swing.event.ListSelectionListener;  
28 25
29 import eu.omp.irap.vespa.epntapclient.controller.EpnTapController; 26 import eu.omp.irap.vespa.epntapclient.controller.EpnTapController;
  27 +import eu.omp.irap.vespa.epntapclient.view.panels.BottomBarPanel;
  28 +import eu.omp.irap.vespa.epntapclient.view.panels.RequestPanel;
  29 +import eu.omp.irap.vespa.epntapclient.view.panels.ResultsPanel;
  30 +import eu.omp.irap.vespa.epntapclient.view.panels.ServicesPanel;
30 import eu.omp.irap.vespa.epntapclient.votable.view.VOTableView; 31 import eu.omp.irap.vespa.epntapclient.votable.view.VOTableView;
31 32
32 /** 33 /**
@@ -39,124 +40,89 @@ public class EpnTapMainView extends JPanel { @@ -39,124 +40,89 @@ public class EpnTapMainView extends JPanel {
39 /** The serial version UID (affected with a random number). */ 40 /** The serial version UID (affected with a random number). */
40 private static final long serialVersionUID = -1233290271099283814L; 41 private static final long serialVersionUID = -1233290271099283814L;
41 42
  43 + /** The main EPN-TAP main controller */
  44 + private EpnTapController controller;
  45 +
42 /** The JPanel where the VOTable results is displayed. */ 46 /** The JPanel where the VOTable results is displayed. */
43 - private VOTableView resultsView; 47 + private ResultsPanel resultsPanel;
44 48
45 /** The JPanel where the list of services is displayed. */ 49 /** The JPanel where the list of services is displayed. */
46 - private VOTableView servicesView; 50 + private ServicesPanel servicesPanel;
47 51
48 /** The JPanel where the user put requests. */ 52 /** The JPanel where the user put requests. */
49 - private RequestView requestView; 53 + private RequestPanel requestPanel;
50 54
51 /** The JPanel where the user put requests. */ 55 /** The JPanel where the user put requests. */
52 - private BottomBar bottomBar; 56 + private BottomBarPanel bottomBarPanel;
53 57
54 - /** The main EPN-TAP main controller */  
55 - private EpnTapController controller; 58 + private MainViewListener mainViewListener;
56 59
57 - /** The width of the left panel (services view). */  
58 - static final int LEFT_PANEL_WIDTH = 400;  
59 - /** The minimum width of the left panel (services view). */  
60 - static final int LEFT_PANEL_MIN_WIDTH = 150;  
61 - /** The width of the right panel (request view). */  
62 - static final int RIGHT_PANEL_WIDTH = 400;  
63 - /** The minimum width of the right panel (request view). */  
64 - static final int RIGHT_PANEL_MIN_WIDTH = 220;  
65 -  
66 - /** The height of the top panel (request view and services view). */  
67 - static final int TOP_PANEL_HEIGHT = 250;  
68 - /** The minimum height of the top panel (request view and services view). */  
69 - static final int TOP_PANEL_MIN_HEIGHT = 190;  
70 - /** The height of the bottom panel (result view). */  
71 - static final int BOTTOM_PANEL_HEIGHT = 150;  
72 - /** The minimum height of the bottom panel (result view). */  
73 - static final int BOTTOM_PANEL_MIN_HEIGHT = 100; 60 + public interface MainViewListener {
  61 + void event(Event event, Object... args);
  62 + }
74 63
75 /** 64 /**
76 - * The constructor of the view. 65 + * The constructor of the view. TODO: controlleur = รฉcouteur de la vue
77 * 66 *
78 * @param controller The EPN-TAP controller, allowing the EPN-TAP view to send events. 67 * @param controller The EPN-TAP controller, allowing the EPN-TAP view to send events.
79 - * @param servicesView The JPanel representing the table of services.  
80 - * @param resultsView The JPanel representing the table of results.  
81 */ 68 */
82 - public EpnTapMainView(final EpnTapController controller, final VOTableView servicesView,  
83 - VOTableView resultsView) { 69 +
  70 + public EpnTapMainView(final EpnTapController controller, VOTableView voTableServicesView,
  71 + VOTableView voTableResultsView) {
84 this.controller = controller; 72 this.controller = controller;
85 - this.servicesView = servicesView;  
86 - this.resultsView = resultsView;  
87 - this.requestView = new RequestView(this);  
88 - this.bottomBar = new BottomBar(this);  
89 73
  74 + this.servicesPanel = new ServicesPanel(this, voTableServicesView);
  75 + this.resultsPanel = new ResultsPanel(this, voTableResultsView);
  76 + this.requestPanel = new RequestPanel(this);
  77 + this.bottomBarPanel = new BottomBarPanel(this);
90 setLayout(new BorderLayout()); 78 setLayout(new BorderLayout());
91 buildWindow(); 79 buildWindow();
92 -  
93 - // TODO: Support multi-selection  
94 - servicesView.getTable().getSelectionModel()  
95 - .addListSelectionListener(new ListSelectionListener() {  
96 - public void valueChanged(ListSelectionEvent evt) {  
97 - controller.updateSelected(servicesView.getTable().getSelectedRow());  
98 - }  
99 - });  
100 } 80 }
101 81
102 - /**  
103 - * @return The main EPNT-TAP controller.  
104 - */  
105 - public EpnTapController getController() {  
106 - return controller; 82 + public void addMainViewListener(MainViewListener listener) {
  83 + mainViewListener = listener;
107 } 84 }
108 85
109 /** 86 /**
110 * @return The JPanel where the VOTable results is displayed. 87 * @return The JPanel where the VOTable results is displayed.
111 */ 88 */
112 - public VOTableView getResultsView() {  
113 - return resultsView; 89 + public ResultsPanel getResultsPanel() {
  90 + return resultsPanel;
114 } 91 }
115 92
116 /** 93 /**
117 * @return The JPanel where the GUI elements to make the request are displayed. 94 * @return The JPanel where the GUI elements to make the request are displayed.
118 */ 95 */
119 - public RequestView getRequestView() {  
120 - return requestView; 96 + public RequestPanel getRequestPanel() {
  97 + return requestPanel;
121 } 98 }
122 99
123 /** 100 /**
124 * @return The JPanel where the list of services is displayed. 101 * @return The JPanel where the list of services is displayed.
125 */ 102 */
126 - public VOTableView getServicesView() {  
127 - return servicesView; 103 + public ServicesPanel getServicesPanel() {
  104 + return servicesPanel;
128 } 105 }
129 106
130 /** 107 /**
131 * @return The JPanel where the list of services is displayed. 108 * @return The JPanel where the list of services is displayed.
132 */ 109 */
133 - public BottomBar getBottomBar() {  
134 - return bottomBar; 110 + public BottomBarPanel getBottomBarPanel() {
  111 + return bottomBarPanel;
135 } 112 }
136 113
137 /** 114 /**
138 * Build and fill the GUI. 115 * Build and fill the GUI.
139 */ 116 */
140 public void buildWindow() { 117 public void buildWindow() {
141 - JSplitPane northPanel = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, servicesView,  
142 - requestView);  
143 -  
144 - servicesView.setPreferredSize(new Dimension(LEFT_PANEL_WIDTH, TOP_PANEL_HEIGHT));  
145 - servicesView.setMinimumSize(new Dimension(LEFT_PANEL_MIN_WIDTH, TOP_PANEL_MIN_HEIGHT)); 118 + JSplitPane northPanel = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, servicesPanel,
  119 + requestPanel);
146 120
147 // TODO: put requestView inside a JScrollPane. 121 // TODO: put requestView inside a JScrollPane.
148 - requestView.setPreferredSize(new Dimension(RIGHT_PANEL_WIDTH, TOP_PANEL_HEIGHT));  
149 - requestView.setMinimumSize(new Dimension(RIGHT_PANEL_MIN_WIDTH, TOP_PANEL_MIN_HEIGHT));  
150 122
151 - resultsView.setPreferredSize(  
152 - new Dimension(LEFT_PANEL_WIDTH + RIGHT_PANEL_WIDTH, BOTTOM_PANEL_HEIGHT));  
153 - resultsView.setMinimumSize(  
154 - new Dimension(LEFT_PANEL_MIN_WIDTH + RIGHT_PANEL_MIN_WIDTH,  
155 - BOTTOM_PANEL_MIN_HEIGHT));  
156 -  
157 - JSplitPane mainPanel = new JSplitPane(JSplitPane.VERTICAL_SPLIT, northPanel, resultsView); 123 + JSplitPane mainPanel = new JSplitPane(JSplitPane.VERTICAL_SPLIT, northPanel, resultsPanel);
158 add(mainPanel, BorderLayout.CENTER); 124 add(mainPanel, BorderLayout.CENTER);
159 - add(bottomBar, BorderLayout.SOUTH); 125 + add(bottomBarPanel, BorderLayout.SOUTH);
160 } 126 }
161 127
162 /** 128 /**
@@ -170,4 +136,8 @@ public class EpnTapMainView extends JPanel { @@ -170,4 +136,8 @@ public class EpnTapMainView extends JPanel {
170 JOptionPane.ERROR_MESSAGE); 136 JOptionPane.ERROR_MESSAGE);
171 } 137 }
172 138
  139 + public void event(Event event, Object... args) {
  140 + mainViewListener.event(event, args);
  141 + }
  142 +
173 } 143 }
src/main/java/eu/omp/irap/vespa/epntapclient/view/Event.java 0 โ†’ 100644
@@ -0,0 +1,24 @@ @@ -0,0 +1,24 @@
  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.view;
  18 +
  19 +/**
  20 + * @author N. Jourdane
  21 + */
  22 +public enum Event {
  23 + serviceSelected, btnSearchClicked, paramRemoved, paramChanged;
  24 +}
src/main/java/eu/omp/irap/vespa/epntapclient/view/ParamField.java
@@ -61,11 +61,15 @@ public abstract class ParamField extends JPanel { @@ -61,11 +61,15 @@ public abstract class ParamField extends JPanel {
61 private static final String MIN_SUFFIX = "min"; 61 private static final String MIN_SUFFIX = "min";
62 private static final String MAX_SUFFIX = "max"; 62 private static final String MAX_SUFFIX = "max";
63 63
64 - protected static RequestView requestView; 64 + protected static EpnTapMainView mainView;
65 protected String paramName; 65 protected String paramName;
66 66
67 - public ParamField(RequestView requestView, String paramName) { 67 + public ParamField(EpnTapMainView mainView, String paramName) {
68 super(); 68 super();
  69 +
  70 + this.mainView = mainView;
  71 + this.paramName = paramName;
  72 +
69 this.setLayout(new BoxLayout(this, BoxLayout.X_AXIS)); 73 this.setLayout(new BoxLayout(this, BoxLayout.X_AXIS));
70 this.setMaximumSize(new Dimension(MAX_FIELD_WIDTH, FIELD_HEIGHT)); 74 this.setMaximumSize(new Dimension(MAX_FIELD_WIDTH, FIELD_HEIGHT));
71 String strLabel = paramName.replaceAll("_", " ").trim(); 75 String strLabel = paramName.replaceAll("_", " ").trim();
@@ -73,15 +77,13 @@ public abstract class ParamField extends JPanel { @@ -73,15 +77,13 @@ public abstract class ParamField extends JPanel {
73 label.setPreferredSize(new Dimension(LABEL_WIDTH, FIELD_HEIGHT)); 77 label.setPreferredSize(new Dimension(LABEL_WIDTH, FIELD_HEIGHT));
74 this.add(label); 78 this.add(label);
75 // TODO: Add tooltip text based on rr.table_column.column_description 79 // TODO: Add tooltip text based on rr.table_column.column_description
76 - this.requestView = requestView;  
77 - this.paramName = paramName;  
78 } 80 }
79 81
80 public static class StringField extends ParamField implements TextFieldListener { 82 public static class StringField extends ParamField implements TextFieldListener {
81 JTextField field; 83 JTextField field;
82 84
83 - StringField(RequestView requestView, String paramName) {  
84 - super(requestView, paramName); 85 + public StringField(EpnTapMainView mainView, String paramName) {
  86 + super(mainView, paramName);
85 field = new JTextField(); 87 field = new JTextField();
86 addChangeListener(this, field); 88 addChangeListener(this, field);
87 this.add(field); 89 this.add(field);
@@ -89,9 +91,9 @@ public abstract class ParamField extends JPanel { @@ -89,9 +91,9 @@ public abstract class ParamField extends JPanel {
89 91
90 public void update(JTextField field) { 92 public void update(JTextField field) {
91 if ("".equals(field.getText())) { 93 if ("".equals(field.getText())) {
92 - requestView.updateParam(paramName, null); 94 + mainView.event(Event.paramChanged, paramName, null);
93 } else { 95 } else {
94 - requestView.updateParam(paramName, field.getText()); 96 + mainView.event(Event.paramChanged, paramName, field.getText());
95 } 97 }
96 } 98 }
97 } 99 }
@@ -99,8 +101,8 @@ public abstract class ParamField extends JPanel { @@ -99,8 +101,8 @@ public abstract class ParamField extends JPanel {
99 public static class FloatField extends ParamField implements TextFieldListener { 101 public static class FloatField extends ParamField implements TextFieldListener {
100 JTextField field; 102 JTextField field;
101 103
102 - FloatField(RequestView requestView, String paramName) {  
103 - super(requestView, paramName); 104 + public FloatField(EpnTapMainView mainView, String paramName) {
  105 + super(mainView, paramName);
104 field = new JTextField(); 106 field = new JTextField();
105 addChangeListener(this, field); 107 addChangeListener(this, field);
106 this.add(field); 108 this.add(field);
@@ -109,10 +111,11 @@ public abstract class ParamField extends JPanel { @@ -109,10 +111,11 @@ public abstract class ParamField extends JPanel {
109 public void update(JTextField field) { 111 public void update(JTextField field) {
110 if ("".equals(field.getText())) { 112 if ("".equals(field.getText())) {
111 field.setBackground(Color.WHITE); 113 field.setBackground(Color.WHITE);
112 - requestView.updateParam(paramName, null); 114 + mainView.event(Event.paramRemoved, paramName);
113 } else { 115 } else {
114 try { 116 try {
115 - requestView.updateParam(paramName, Float.parseFloat(field.getText())); 117 + mainView.event(Event.paramChanged, paramName,
  118 + Float.parseFloat(field.getText()));
116 field.setBackground(Color.WHITE); 119 field.setBackground(Color.WHITE);
117 } catch (NumberFormatException e) { 120 } catch (NumberFormatException e) {
118 field.setBackground(Color.PINK); 121 field.setBackground(Color.PINK);
@@ -125,8 +128,8 @@ public abstract class ParamField extends JPanel { @@ -125,8 +128,8 @@ public abstract class ParamField extends JPanel {
125 JTextField fieldMin; 128 JTextField fieldMin;
126 JTextField fieldMax; 129 JTextField fieldMax;
127 130
128 - DateRangeField(RequestView requestView, String paramName) {  
129 - super(requestView, paramName); 131 + public DateRangeField(EpnTapMainView mainView, String paramName) {
  132 + super(mainView, paramName);
130 this.add(new JLabel("min ")); 133 this.add(new JLabel("min "));
131 fieldMin = new JTextField(); 134 fieldMin = new JTextField();
132 fieldMin.setName(MIN_SUFFIX); 135 fieldMin.setName(MIN_SUFFIX);
@@ -146,12 +149,12 @@ public abstract class ParamField extends JPanel { @@ -146,12 +149,12 @@ public abstract class ParamField extends JPanel {
146 DateFormat df = new SimpleDateFormat(DATE_FORMAT, Locale.ENGLISH); 149 DateFormat df = new SimpleDateFormat(DATE_FORMAT, Locale.ENGLISH);
147 if ("".equals(field.getText())) { 150 if ("".equals(field.getText())) {
148 field.setBackground(Color.WHITE); 151 field.setBackground(Color.WHITE);
149 - requestView.updateParam(paramName + field.getName(), null); 152 + mainView.event(Event.paramRemoved, paramName + field.getName());
150 } else if (field.getText().matches(DATE_REGEX)) { 153 } else if (field.getText().matches(DATE_REGEX)) {
151 try { 154 try {
152 long date = df.parse(field.getText()).getTime(); 155 long date = df.parse(field.getText()).getTime();
153 - date = (Math.round((date / 86400000.0) + 2440587.5)); // to JD  
154 - requestView.updateParam(paramName + field.getName(), date); 156 + date = Math.round((date / 86400000.0) + 2440587.5); // to JD
  157 + mainView.event(Event.paramChanged, paramName + field.getName(), date);
155 field.setBackground(Color.WHITE); 158 field.setBackground(Color.WHITE);
156 } catch (ParseException e) { 159 } catch (ParseException e) {
157 field.setBackground(Color.PINK); 160 field.setBackground(Color.PINK);
@@ -167,8 +170,8 @@ public abstract class ParamField extends JPanel { @@ -167,8 +170,8 @@ public abstract class ParamField extends JPanel {
167 JTextField fieldMin; 170 JTextField fieldMin;
168 JTextField fieldMax; 171 JTextField fieldMax;
169 172
170 - FloatRangeField(RequestView requestView, String paramName) {  
171 - super(requestView, paramName); 173 + public FloatRangeField(EpnTapMainView mainView, String paramName) {
  174 + super(mainView, paramName);
172 fieldMin = new JTextField(); 175 fieldMin = new JTextField();
173 fieldMin.setName(MIN_SUFFIX); 176 fieldMin.setName(MIN_SUFFIX);
174 addChangeListener(this, fieldMin); 177 addChangeListener(this, fieldMin);
@@ -183,10 +186,10 @@ public abstract class ParamField extends JPanel { @@ -183,10 +186,10 @@ public abstract class ParamField extends JPanel {
183 public void update(JTextField field) { 186 public void update(JTextField field) {
184 if ("".equals(field.getText())) { 187 if ("".equals(field.getText())) {
185 field.setBackground(Color.WHITE); 188 field.setBackground(Color.WHITE);
186 - requestView.updateParam(paramName + field.getName(), null); 189 + mainView.event(Event.paramRemoved, paramName + field.getName());
187 } else { 190 } else {
188 try { 191 try {
189 - requestView.updateParam(paramName + field.getName(), 192 + mainView.event(Event.paramChanged, paramName + field.getName(),
190 Float.parseFloat(field.getText())); 193 Float.parseFloat(field.getText()));
191 field.setBackground(Color.WHITE); 194 field.setBackground(Color.WHITE);
192 } catch (NumberFormatException e) { 195 } catch (NumberFormatException e) {
@@ -201,8 +204,8 @@ public abstract class ParamField extends JPanel { @@ -201,8 +204,8 @@ public abstract class ParamField extends JPanel {
201 JTextField field; 204 JTextField field;
202 String lastContent; 205 String lastContent;
203 206
204 - TargetNameField(RequestView requestView, String paramName) {  
205 - super(requestView, paramName); 207 + public TargetNameField(EpnTapMainView mainView, String paramName) {
  208 + super(mainView, paramName);
206 comboBox = new JComboBox(); 209 comboBox = new JComboBox();
207 comboBox.setPreferredSize(new Dimension(MIN_FIELD_WIDTH, FIELD_HEIGHT)); 210 comboBox.setPreferredSize(new Dimension(MIN_FIELD_WIDTH, FIELD_HEIGHT));
208 211
@@ -234,16 +237,21 @@ public abstract class ParamField extends JPanel { @@ -234,16 +237,21 @@ public abstract class ParamField extends JPanel {
234 Runnable updateComboBox = new Runnable() { 237 Runnable updateComboBox = new Runnable() {
235 @Override 238 @Override
236 public void run() { 239 public void run() {
237 - System.out.println("run updateComboBox");  
238 String content = field.getText(); 240 String content = field.getText();
239 - if (content.length() >= 2 && !content.equals(lastContent)) {  
240 - lastContent = content;  
241 - comboBox.removeAllItems();  
242 - for (String s : getItems(content)) {  
243 - comboBox.addItem(s); 241 + if (!content.equals(lastContent)) {
  242 + if (content.length() >= 2) {
  243 + lastContent = content;
  244 + comboBox.removeAllItems();
  245 + for (String s : getItems(content)) {
  246 + comboBox.addItem(s);
  247 + }
  248 + comboBox.getEditor().setItem(content);
  249 + }
  250 + if ("".equals(content)) {
  251 + mainView.event(Event.paramRemoved, paramName);
  252 + } else {
  253 + mainView.event(Event.paramChanged, paramName, content);
244 } 254 }
245 - comboBox.getEditor().setItem(content);  
246 - requestView.updateParam(paramName, content);  
247 } 255 }
248 } 256 }
249 }; 257 };
@@ -256,8 +264,8 @@ public abstract class ParamField extends JPanel { @@ -256,8 +264,8 @@ public abstract class ParamField extends JPanel {
256 public static class DataProductTypeField extends ParamField { 264 public static class DataProductTypeField extends ParamField {
257 JComboBox<String> comboBox; 265 JComboBox<String> comboBox;
258 266
259 - DataProductTypeField(RequestView requestView, String paramName) {  
260 - super(requestView, paramName); 267 + public DataProductTypeField(EpnTapMainView mainView, String paramName) {
  268 + super(mainView, paramName);
261 comboBox = new JComboBox(getItems().keySet().toArray()); 269 comboBox = new JComboBox(getItems().keySet().toArray());
262 comboBox.setPreferredSize(new Dimension(MIN_FIELD_WIDTH, FIELD_HEIGHT)); 270 comboBox.setPreferredSize(new Dimension(MIN_FIELD_WIDTH, FIELD_HEIGHT));
263 comboBox.addActionListener(new ActionListener() { 271 comboBox.addActionListener(new ActionListener() {
@@ -291,15 +299,19 @@ public abstract class ParamField extends JPanel { @@ -291,15 +299,19 @@ public abstract class ParamField extends JPanel {
291 List<String> item = new ArrayList(); 299 List<String> item = new ArrayList();
292 item.add(key.replace(" ", "-").toLowerCase()); 300 item.add(key.replace(" ", "-").toLowerCase());
293 item.add(getItems().get(key)); 301 item.add(getItems().get(key));
294 - requestView.updateParam(paramName, "All".equals(key) ? null : item); 302 + if ("All".equals(key)) {
  303 + mainView.event(Event.paramRemoved, paramName);
  304 + } else {
  305 + mainView.event(Event.paramChanged, paramName, item);
  306 + }
295 } 307 }
296 } 308 }
297 309
298 public static class TargetClassField extends ParamField { 310 public static class TargetClassField extends ParamField {
299 JComboBox<String> comboBox; 311 JComboBox<String> comboBox;
300 312
301 - TargetClassField(RequestView requestView, String paramName) {  
302 - super(requestView, paramName); 313 + public TargetClassField(EpnTapMainView mainView, String paramName) {
  314 + super(mainView, paramName);
303 comboBox = new JComboBox(getItems()); 315 comboBox = new JComboBox(getItems());
304 comboBox.setPreferredSize(new Dimension(MIN_FIELD_WIDTH, FIELD_HEIGHT)); 316 comboBox.setPreferredSize(new Dimension(MIN_FIELD_WIDTH, FIELD_HEIGHT));
305 comboBox.addActionListener(new ActionListener() { 317 comboBox.addActionListener(new ActionListener() {
@@ -318,7 +330,11 @@ public abstract class ParamField extends JPanel { @@ -318,7 +330,11 @@ public abstract class ParamField extends JPanel {
318 330
319 private void onUpdate() { 331 private void onUpdate() {
320 String value = comboBox.getSelectedItem().toString().replace(" ", "_").toLowerCase(); 332 String value = comboBox.getSelectedItem().toString().replace(" ", "_").toLowerCase();
321 - requestView.updateParam(paramName, "All".equals(value) ? null : value); 333 + if ("All".equals(value)) {
  334 + mainView.event(Event.paramRemoved, paramName);
  335 + } else {
  336 + mainView.event(Event.paramChanged, paramName, value);
  337 + }
322 } 338 }
323 } 339 }
324 340
src/main/java/eu/omp/irap/vespa/epntapclient/view/BottomBar.java renamed to src/main/java/eu/omp/irap/vespa/epntapclient/view/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; 17 +package eu.omp.irap.vespa.epntapclient.view.panels;
18 18
19 import java.awt.BorderLayout; 19 import java.awt.BorderLayout;
20 import java.util.logging.Logger; 20 import java.util.logging.Logger;
@@ -23,15 +23,17 @@ import javax.swing.JButton; @@ -23,15 +23,17 @@ import javax.swing.JButton;
23 import javax.swing.JLabel; 23 import javax.swing.JLabel;
24 import javax.swing.JPanel; 24 import javax.swing.JPanel;
25 25
  26 +import eu.omp.irap.vespa.epntapclient.view.EpnTapMainView;
  27 +
26 /** 28 /**
27 * @author N. Jourdane 29 * @author N. Jourdane
28 */ 30 */
29 -public class BottomBar extends JPanel { 31 +public class BottomBarPanel extends JPanel {
30 /** The logger for the class BottomBar. */ 32 /** The logger for the class BottomBar. */
31 - private static final Logger logger = Logger.getLogger(BottomBar.class.getName()); 33 + private static final Logger logger = Logger.getLogger(BottomBarPanel.class.getName());
32 JLabel infoLabel; 34 JLabel infoLabel;
33 35
34 - BottomBar(EpnTapMainView mainView) { 36 + public BottomBarPanel(EpnTapMainView mainView) {
35 setLayout(new BorderLayout()); 37 setLayout(new BorderLayout());
36 infoLabel = new JLabel(); 38 infoLabel = new JLabel();
37 this.add(infoLabel); 39 this.add(infoLabel);
src/main/java/eu/omp/irap/vespa/epntapclient/view/RequestView.java renamed to src/main/java/eu/omp/irap/vespa/epntapclient/view/panels/RequestPanel.java
@@ -14,16 +14,14 @@ @@ -14,16 +14,14 @@
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.view.panels;
18 18
19 import java.awt.BorderLayout; 19 import java.awt.BorderLayout;
20 import java.awt.Dimension; 20 import java.awt.Dimension;
21 import java.awt.event.ActionEvent; 21 import java.awt.event.ActionEvent;
22 import java.awt.event.ActionListener; 22 import java.awt.event.ActionListener;
23 import java.util.ArrayList; 23 import java.util.ArrayList;
24 -import java.util.HashMap;  
25 import java.util.List; 24 import java.util.List;
26 -import java.util.Map;  
27 import java.util.logging.Logger; 25 import java.util.logging.Logger;
28 26
29 import javax.swing.BorderFactory; 27 import javax.swing.BorderFactory;
@@ -32,23 +30,27 @@ import javax.swing.JButton; @@ -32,23 +30,27 @@ import javax.swing.JButton;
32 import javax.swing.JPanel; 30 import javax.swing.JPanel;
33 import javax.swing.JTextArea; 31 import javax.swing.JTextArea;
34 32
35 -import eu.omp.irap.vespa.epntapclient.utils.Queries; 33 +import eu.omp.irap.vespa.epntapclient.view.Dim;
  34 +import eu.omp.irap.vespa.epntapclient.view.EpnTapMainView;
  35 +import eu.omp.irap.vespa.epntapclient.view.Event;
  36 +import eu.omp.irap.vespa.epntapclient.view.ParamField;
36 import eu.omp.irap.vespa.epntapclient.view.ParamField.DataProductTypeField; 37 import eu.omp.irap.vespa.epntapclient.view.ParamField.DataProductTypeField;
37 import eu.omp.irap.vespa.epntapclient.view.ParamField.DateRangeField; 38 import eu.omp.irap.vespa.epntapclient.view.ParamField.DateRangeField;
38 import eu.omp.irap.vespa.epntapclient.view.ParamField.FloatRangeField; 39 import eu.omp.irap.vespa.epntapclient.view.ParamField.FloatRangeField;
39 import eu.omp.irap.vespa.epntapclient.view.ParamField.TargetNameField; 40 import eu.omp.irap.vespa.epntapclient.view.ParamField.TargetNameField;
40 -import eu.omp.irap.vespa.epntapclient.votable.controller.VOTableException;  
41 41
42 /** 42 /**
43 * @author N. Jourdane 43 * @author N. Jourdane
44 */ 44 */
45 -public class RequestView extends JPanel implements ActionListener { 45 +public class RequestPanel extends JPanel implements ActionListener {
46 /** The logger for the class RequestView. */ 46 /** The logger for the class RequestView. */
47 - private static final Logger logger = Logger.getLogger(RequestView.class.getName()); 47 + private static final Logger logger = Logger.getLogger(RequestPanel.class.getName());
48 48
49 /** The serial version UID (affected with a random number). */ 49 /** The serial version UID (affected with a random number). */
50 private static final long serialVersionUID = 1262856496809315405L; 50 private static final long serialVersionUID = 1262856496809315405L;
51 51
  52 + private static final String BTN_NAME = "btnSend";
  53 +
52 /** The EPN-TAP main view. */ 54 /** The EPN-TAP main view. */
53 private EpnTapMainView mainView; 55 private EpnTapMainView mainView;
54 56
@@ -62,11 +64,6 @@ public class RequestView extends JPanel implements ActionListener { @@ -62,11 +64,6 @@ public class RequestView extends JPanel implements ActionListener {
62 */ 64 */
63 private List<ParamField> paramFields; 65 private List<ParamField> paramFields;
64 66
65 - /**  
66 - * The parameters fields for the request.  
67 - */  
68 - private Map<String, Object> paramValues;  
69 -  
70 /** The height of the buttons panel. */ 67 /** The height of the buttons panel. */
71 private static final int BUTTON_PANEL_HEIGHT = 20; 68 private static final int BUTTON_PANEL_HEIGHT = 20;
72 69
@@ -75,19 +72,23 @@ public class RequestView extends JPanel implements ActionListener { @@ -75,19 +72,23 @@ public class RequestView extends JPanel implements ActionListener {
75 * 72 *
76 * @param mainView The EPN-TAP main view. 73 * @param mainView The EPN-TAP main view.
77 */ 74 */
78 - public RequestView(EpnTapMainView mainView) { 75 + public RequestPanel(EpnTapMainView mainView) {
79 this.mainView = mainView; 76 this.mainView = mainView;
80 setLayout(new BoxLayout(this, BoxLayout.Y_AXIS)); 77 setLayout(new BoxLayout(this, BoxLayout.Y_AXIS));
  78 + setPreferredSize(new Dimension(Dim.RIGHT_PANEL_WIDTH, Dim.TOP_PANEL_HEIGHT));
  79 + setMinimumSize(new Dimension(Dim.RIGHT_PANEL_MIN_WIDTH, Dim.TOP_PANEL_MIN_HEIGHT));
81 80
82 // TODO: Get max row number from the GUI 81 // TODO: Get max row number from the GUI
83 82
84 - paramValues = new HashMap<>();  
85 -  
86 this.add(buildParamPanel(), this); 83 this.add(buildParamPanel(), this);
87 this.add(buildQueryPanel(), this); 84 this.add(buildQueryPanel(), this);
88 this.add(buildButtonPanel(), this); 85 this.add(buildButtonPanel(), this);
89 } 86 }
90 87
  88 + public EpnTapMainView getMainView() {
  89 + return mainView;
  90 + }
  91 +
91 /** 92 /**
92 * @return A JPanel containing graphical elements for the service parameters. 93 * @return A JPanel containing graphical elements for the service parameters.
93 */ 94 */
@@ -96,10 +97,10 @@ public class RequestView extends JPanel implements ActionListener { @@ -96,10 +97,10 @@ public class RequestView extends JPanel implements ActionListener {
96 // - if the field is a String: listbox with 'xx', '%xx', 'xx%', and '%xx%'. 97 // - if the field is a String: listbox with 'xx', '%xx', 'xx%', and '%xx%'.
97 // - if the field is a numeric value: listbox with <, <=, =, =>, >. 98 // - if the field is a numeric value: listbox with <, <=, =, =>, >.
98 paramFields = new ArrayList(); 99 paramFields = new ArrayList();
99 - paramFields.add(new TargetNameField(this, "target_name"));  
100 - paramFields.add(new DateRangeField(this, "time_"));  
101 - paramFields.add(new FloatRangeField(this, "spectral_range_"));  
102 - paramFields.add(new DataProductTypeField(this, "dataproduct_type")); 100 + paramFields.add(new TargetNameField(mainView, "target_name"));
  101 + paramFields.add(new DateRangeField(mainView, "time_"));
  102 + paramFields.add(new FloatRangeField(mainView, "spectral_range_"));
  103 + paramFields.add(new DataProductTypeField(mainView, "dataproduct_type"));
103 JPanel paramPanel = new JPanel(); 104 JPanel paramPanel = new JPanel();
104 paramPanel.setLayout(new BoxLayout(paramPanel, BoxLayout.Y_AXIS)); 105 paramPanel.setLayout(new BoxLayout(paramPanel, BoxLayout.Y_AXIS));
105 paramPanel.setBorder(BorderFactory.createTitledBorder("Query parameters")); 106 paramPanel.setBorder(BorderFactory.createTitledBorder("Query parameters"));
@@ -126,23 +127,11 @@ public class RequestView extends JPanel implements ActionListener { @@ -126,23 +127,11 @@ public class RequestView extends JPanel implements ActionListener {
126 return queryPanel; 127 return queryPanel;
127 } 128 }
128 129
129 - public void updateParam(String paramName, Object value) {  
130 - if (value == null) {  
131 - paramValues.remove(paramName);  
132 - logger.info("removed " + paramName);  
133 - } else {  
134 - paramValues.put(paramName, value);  
135 - logger.info("uploaded " + paramName + ": " + value);  
136 - }  
137 - updateQueryArea();  
138 - }  
139 -  
140 /** 130 /**
141 * Update the query JTextArea according to the parameters values. 131 * Update the query JTextArea according to the parameters values.
142 */ 132 */
143 - public void updateQueryArea() {  
144 - String tableName = mainView.getController().getSelectedTable();  
145 - queryArea.setText(Queries.getQuery(tableName, paramValues, 10)); 133 + public void updateQueryArea(String query) {
  134 + queryArea.setText(query);
146 } 135 }
147 136
148 /** 137 /**
@@ -151,23 +140,18 @@ public class RequestView extends JPanel implements ActionListener { @@ -151,23 +140,18 @@ public class RequestView extends JPanel implements ActionListener {
151 private JPanel buildButtonPanel() { 140 private JPanel buildButtonPanel() {
152 JPanel buttonPanel = new JPanel(); 141 JPanel buttonPanel = new JPanel();
153 JButton btnSend = new JButton("Send query"); 142 JButton btnSend = new JButton("Send query");
154 - btnSend.setName("btnSend"); 143 + btnSend.setName(BTN_NAME);
155 btnSend.addActionListener(this); 144 btnSend.addActionListener(this);
156 buttonPanel.add(btnSend); 145 buttonPanel.add(btnSend);
157 - buttonPanel.setMaximumSize(  
158 - new Dimension(1000, BUTTON_PANEL_HEIGHT)); 146 + buttonPanel.setMaximumSize(new Dimension(1000, BUTTON_PANEL_HEIGHT));
159 147
160 return buttonPanel; 148 return buttonPanel;
161 } 149 }
162 150
163 @Override 151 @Override
164 public void actionPerformed(ActionEvent evt) { 152 public void actionPerformed(ActionEvent evt) {
165 - if (((JButton) evt.getSource()).getName() == "btnSend") {  
166 - try {  
167 - mainView.getController().sendQuery(queryArea.getText());  
168 - } catch (VOTableException e) {  
169 - logger.warning("Can not send query when clicking on the send button." + e);  
170 - } 153 + if (((JButton) evt.getSource()).getName() == BTN_NAME) {
  154 + this.mainView.event(Event.btnSearchClicked, queryArea.getText());
171 } 155 }
172 } 156 }
173 157
src/main/java/eu/omp/irap/vespa/epntapclient/view/panels/ResultsPanel.java 0 โ†’ 100644
@@ -0,0 +1,54 @@ @@ -0,0 +1,54 @@
  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.view.panels;
  18 +
  19 +import java.awt.BorderLayout;
  20 +import java.awt.Dimension;
  21 +import java.util.logging.Logger;
  22 +
  23 +import javax.swing.JPanel;
  24 +
  25 +import eu.omp.irap.vespa.epntapclient.view.Dim;
  26 +import eu.omp.irap.vespa.epntapclient.view.EpnTapMainView;
  27 +import eu.omp.irap.vespa.epntapclient.votable.view.VOTableView;
  28 +
  29 +/**
  30 + * @author N. Jourdane
  31 + */
  32 +public class ResultsPanel extends JPanel {
  33 + /** The logger for the class ResultPanel. */
  34 + private static final Logger logger = Logger.getLogger(ResultsPanel.class.getName());
  35 +
  36 + EpnTapMainView mainView;
  37 + VOTableView voTableView;
  38 +
  39 + public ResultsPanel(EpnTapMainView mainView, VOTableView voTableView) {
  40 + super();
  41 +
  42 + this.mainView = mainView;
  43 + this.voTableView = voTableView;
  44 +
  45 + this.setLayout(new BorderLayout());
  46 + this.add(voTableView);
  47 +
  48 + setPreferredSize(new Dimension(Dim.LEFT_PANEL_WIDTH + Dim.RIGHT_PANEL_WIDTH,
  49 + Dim.BOTTOM_PANEL_HEIGHT));
  50 + setMinimumSize(new Dimension(Dim.LEFT_PANEL_MIN_WIDTH + Dim.RIGHT_PANEL_MIN_WIDTH,
  51 + Dim.BOTTOM_PANEL_MIN_HEIGHT));
  52 +
  53 + }
  54 +}
src/main/java/eu/omp/irap/vespa/epntapclient/view/panels/ServicesPanel.java 0 โ†’ 100644
@@ -0,0 +1,70 @@ @@ -0,0 +1,70 @@
  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.view.panels;
  18 +
  19 +import java.awt.BorderLayout;
  20 +import java.awt.Dimension;
  21 +import java.util.logging.Logger;
  22 +
  23 +import javax.swing.JPanel;
  24 +import javax.swing.event.ListSelectionEvent;
  25 +import javax.swing.event.ListSelectionListener;
  26 +
  27 +import eu.omp.irap.vespa.epntapclient.view.Dim;
  28 +import eu.omp.irap.vespa.epntapclient.view.EpnTapMainView;
  29 +import eu.omp.irap.vespa.epntapclient.view.Event;
  30 +import eu.omp.irap.vespa.epntapclient.votable.view.VOTableView;
  31 +
  32 +/**
  33 + * @author N. Jourdane
  34 + */
  35 +public class ServicesPanel extends JPanel {
  36 + /** The logger for the class ServicesView. */
  37 + private static final Logger logger = Logger.getLogger(ServicesPanel.class.getName());
  38 +
  39 + EpnTapMainView mainView;
  40 + VOTableView voTableView;
  41 +
  42 + public ServicesPanel(final EpnTapMainView mainView, final VOTableView voTableView) {
  43 + super();
  44 + this.mainView = mainView;
  45 + this.voTableView = voTableView;
  46 +
  47 + this.setLayout(new BorderLayout());
  48 + this.add(voTableView);
  49 +
  50 + setPreferredSize(new Dimension(Dim.LEFT_PANEL_WIDTH, Dim.TOP_PANEL_HEIGHT));
  51 + setMinimumSize(new Dimension(Dim.LEFT_PANEL_MIN_WIDTH, Dim.TOP_PANEL_MIN_HEIGHT));
  52 +
  53 + // TODO: Support multi-selection
  54 + voTableView.getTable().getSelectionModel()
  55 + .addListSelectionListener(new ListSelectionListener() {
  56 + public void valueChanged(ListSelectionEvent evt) {
  57 + mainView.event(Event.serviceSelected,
  58 + voTableView.getTable().getSelectedRow());
  59 + }
  60 + });
  61 + }
  62 +
  63 + public String getServiceURL(int row) {
  64 + return (String) this.voTableView.getValueAt(5, row);
  65 + }
  66 +
  67 + public String getTableName(int row) {
  68 + return (String) this.voTableView.getValueAt(2, row);
  69 + }
  70 +}
src/main/java/eu/omp/irap/vespa/epntapclient/votable/view/VOTableView.java
@@ -29,6 +29,8 @@ import javax.swing.event.TableModelEvent; @@ -29,6 +29,8 @@ import javax.swing.event.TableModelEvent;
29 import javax.swing.event.TableModelListener; 29 import javax.swing.event.TableModelListener;
30 import javax.swing.table.DefaultTableModel; 30 import javax.swing.table.DefaultTableModel;
31 31
  32 +import eu.omp.irap.vespa.epntapclient.votable.Utils;
  33 +
32 /** 34 /**
33 * The main class of the View of the application. 35 * The main class of the View of the application.
34 * 36 *
@@ -79,6 +81,7 @@ public class VOTableView extends JPanel implements TableModelListener { @@ -79,6 +81,7 @@ public class VOTableView extends JPanel implements TableModelListener {
79 */ 81 */
80 public void fillTable(String[] columns, List<Object[]> data) { 82 public void fillTable(String[] columns, List<Object[]> data) {
81 Object[][] values = data.toArray(new Object[data.size()][]); 83 Object[][] values = data.toArray(new Object[data.size()][]);
  84 + Utils.printObject("tableData", values);
82 tableData.setDataVector(values, columns); 85 tableData.setDataVector(values, columns);
83 table.setRowSelectionInterval(0, 0); 86 table.setRowSelectionInterval(0, 0);
84 } 87 }
@@ -97,6 +100,7 @@ public class VOTableView extends JPanel implements TableModelListener { @@ -97,6 +100,7 @@ public class VOTableView extends JPanel implements TableModelListener {
97 * content. 100 * content.
98 */ 101 */
99 public Object getValueAt(int column, int row) { 102 public Object getValueAt(int column, int row) {
  103 + Object val = tableData.getValueAt(row, column);
100 return tableData.getValueAt(row, column); 104 return tableData.getValueAt(row, column);
101 } 105 }
102 106