Commit 857e48450751319934be944ff58e4cb9632ec148

Authored by Nathanael Jourdane
1 parent a17b4f33
Exists in master

Use a swing worker to send the query.

src/main/java/eu/omp/irap/vespa/epntapclient/gui/mainpanel/MainPanelCtrl.java
... ... @@ -16,10 +16,12 @@
16 16  
17 17 package eu.omp.irap.vespa.epntapclient.gui.mainpanel;
18 18  
  19 +import java.awt.Cursor;
19 20 import java.util.logging.Level;
20 21 import java.util.logging.Logger;
21 22  
22 23 import javax.swing.JOptionPane;
  24 +import javax.swing.SwingWorker;
23 25  
24 26 import eu.omp.irap.vespa.epntapclient.EpnTapController;
25 27 import eu.omp.irap.vespa.epntapclient.gui.requestpanel.RequestPanelCtrl;
... ... @@ -35,17 +37,20 @@ public class MainPanelCtrl extends EpnTapController implements MainPanelListener
35 37 /** The logger for the class MainPanelCtrl. */
36 38 private static final Logger LOGGER = Logger.getLogger(MainPanelCtrl.class.getName());
37 39  
  40 + /** The swing worker for doing a send query. */
  41 + private SwingWorker<Void, Void> sw;
  42 +
38 43 /** The controller of the request panel. */
39   - private RequestPanelCtrl requestPanelCtrl;
  44 + RequestPanelCtrl requestPanelCtrl;
40 45  
41 46 /** The controller of the result panel. */
42   - private ResultPanelCtrl resultsPanelCtrl;
  47 + ResultPanelCtrl resultsPanelCtrl;
43 48  
44 49 /** The controller of the services panel. */
45   - private ServicesPanelCtrl servicesPanelCtrl;
  50 + ServicesPanelCtrl servicesPanelCtrl;
46 51  
47 52 /** The main view of the application. */
48   - private MainPanelView view;
  53 + MainPanelView view;
49 54  
50 55  
51 56 /**
... ... @@ -64,6 +69,15 @@ public class MainPanelCtrl extends EpnTapController implements MainPanelListener
64 69 JOptionPane.showMessageDialog(view, e.getMessage(), message, JOptionPane.ERROR_MESSAGE);
65 70 }
66 71  
  72 + /*
  73 + * @see
  74 + * eu.omp.irap.vespa.epntapclient.gui.mainpanel.MainPanelListener#displayInfo(java.lang.String)
  75 + */
  76 + @Override
  77 + public void displayInfo(String message) {
  78 + view.getResultsPanel().getStatusBar().setText(message);
  79 + }
  80 +
67 81 /**
68 82 * @return The controller of the request panel.
69 83 */
... ... @@ -107,15 +121,45 @@ public class MainPanelCtrl extends EpnTapController implements MainPanelListener
107 121  
108 122 @Override
109 123 public void sendQuery() {
110   - try {
111   - sendQueries(servicesPanelCtrl.getServices());
112   - } catch (VOTableException e) {
113   - displayError("Can not update the VOTable.", e);
  124 + // Avoid multiple queries at the same time: stop the current first, then launch a new one.
  125 + if (sw != null && !sw.isDone()) {
  126 + sw.cancel(true);
114 127 }
  128 + sw = createNewWorker();
  129 + view.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
  130 + sw.execute();
115 131 }
116 132  
117 133 @Override
118 134 public void updateQuery() {
119 135 requestPanelCtrl.updateQuery();
120 136 }
  137 +
  138 + /**
  139 + * Create a new {@link SwingWorker} for doing a send query.
  140 + *
  141 + * @return The created {@link SwingWorker}.
  142 + */
  143 + private SwingWorker<Void, Void> createNewWorker() {
  144 + return new SwingWorker<Void, Void>() {
  145 +
  146 + @Override
  147 + protected Void doInBackground() throws Exception {
  148 + try {
  149 + sendQueries(servicesPanelCtrl.getServices());
  150 + } catch (VOTableException e) {
  151 + displayError("Can not update the VOTable.", e);
  152 + }
  153 + return null;
  154 + }
  155 +
  156 + @Override
  157 + protected void done() {
  158 + if (!isCancelled()) {
  159 + resultsPanelCtrl.getView().fillTable(resultsPanelCtrl.getVOTableData());
  160 + }
  161 + view.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
  162 + }
  163 + };
  164 + }
121 165 }
... ...