2 * Jalview - A Sequence Alignment Editor and Viewer (Version 2.8.2)
3 * Copyright (C) 2014 The Jalview Authors
5 * This file is part of Jalview.
7 * Jalview is free software: you can redistribute it and/or
8 * modify it under the terms of the GNU General Public License
9 * as published by the Free Software Foundation, either version 3
10 * of the License, or (at your option) any later version.
12 * Jalview is distributed in the hope that it will be useful, but
13 * WITHOUT ANY WARRANTY; without even the implied warranty
14 * of MERCHANTABILITY or FITNESS FOR A PARTICULAR
15 * PURPOSE. See the GNU General Public License for more details.
17 * You should have received a copy of the GNU General Public License
18 * along with Jalview. If not, see <http://www.gnu.org/licenses/>.
19 * The Jalview Authors are detailed in the 'AUTHORS' file.
23 import jalview.bin.Cache;
24 import jalview.jbgui.GWsPreferences;
25 import jalview.util.MessageManager;
26 import jalview.ws.jws2.Jws2Discoverer;
27 import jalview.ws.rest.RestServiceDescription;
29 import java.awt.BorderLayout;
30 import java.awt.Color;
31 import java.awt.Component;
32 import java.awt.Dimension;
33 import java.awt.event.ActionEvent;
34 import java.awt.event.ActionListener;
36 import java.util.Vector;
38 import javax.swing.JLabel;
39 import javax.swing.JOptionPane;
40 import javax.swing.JPanel;
41 import javax.swing.JTable;
42 import javax.swing.JTextField;
43 import javax.swing.table.AbstractTableModel;
44 import javax.swing.table.TableCellRenderer;
46 public class WsPreferences extends GWsPreferences
49 public WsPreferences()
52 initFromPreferences();
55 Vector<String> wsUrls, oldUrls, rsbsUrls, oldRsbsUrls;
57 private boolean needWsMenuUpdate;
59 private boolean oldJws1, oldJws2, oldIndexByHost, oldIndexByType,
60 oldEnfin, oldWsWarning;
62 private void initFromPreferences()
65 wsUrls = jalview.ws.jws2.Jws2Discoverer.getServiceUrls();
68 oldUrls = new Vector<String>(wsUrls);
73 wsUrls = new Vector<String>();
75 wsList.setDefaultRenderer(Integer.class, new JabaWSStatusRenderer());
76 wsList.setAutoResizeMode(JTable.AUTO_RESIZE_ALL_COLUMNS);
78 rsbsUrls = jalview.ws.rest.RestClient.getRsbsDescriptions();
81 oldRsbsUrls = new Vector<String>(rsbsUrls);
86 rsbsUrls = new Vector<String>();
89 enableEnfinServices.setSelected(oldEnfin = Cache.getDefault(
90 "SHOW_ENFIN_SERVICES", true));
91 enableEnfinServices.addActionListener(updateAction);
92 enableJws2Services.setSelected(oldJws2 = Cache.getDefault(
93 "SHOW_JWS2_SERVICES", true));
94 enableJws2Services.addActionListener(updateAction);
95 indexByHost.setSelected(oldIndexByHost = Cache.getDefault(
96 "WSMENU_BYHOST", false));
97 indexByHost.addActionListener(updateAction);
98 indexByType.setSelected(oldIndexByType = Cache.getDefault(
99 "WSMENU_BYTYPE", false));
100 indexByType.addActionListener(updateAction);
101 displayWsWarning.setSelected(oldWsWarning = Cache.getDefault(
102 "SHOW_WSDISCOVERY_ERRORS", true));
105 ActionListener updateAction = new ActionListener()
109 public void actionPerformed(ActionEvent e)
116 private void updateList()
118 Object tdat[][] = new Object[wsUrls.size()][2];
120 for (String url : wsUrls)
122 int status = Jws2Discoverer.getDiscoverer().getServerStatusFor(url);
123 tdat[r][1] = new Integer(status);
127 wsList.setModel(new WsUrlTableModel(tdat));
128 wsList.getColumn("Status").setMinWidth(10);
131 private class JabaWSStatusRenderer extends JPanel implements
134 public JabaWSStatusRenderer()
137 setMinimumSize(new Dimension(10, 10));
143 * render an Integer reflecting service status as a colour and symbol
147 public Component getTableCellRendererComponent(JTable arg0,
148 Object status, boolean isSelected, boolean hasFocus, int row,
152 String t = new String("");
153 switch (((Integer) status).intValue())
156 // cb.setSelected(true);
161 // cb.setSelected(true);
166 // cb.setSelected(false);
171 // cb.setSelected(false);
183 private class WsUrlTableModel extends AbstractTableModel
186 private Object[][] data;
188 public WsUrlTableModel(Object[][] tdat)
194 public int getColumnCount()
200 public String getColumnName(int column)
206 return "Service URL";
210 public int getRowCount()
220 public java.lang.Class<?> getColumnClass(int columnIndex)
222 return getValueAt(0, columnIndex).getClass();
226 public Object getValueAt(int rowIndex, int columnIndex)
228 return data[rowIndex][columnIndex];
233 private void updateRsbsList()
235 sbrsList.setListData(rsbsUrls);
238 private void updateServiceList()
240 jalview.ws.jws2.Jws2Discoverer.setServiceUrls(wsUrls);
243 private void updateRsbsServiceList()
245 jalview.ws.rest.RestClient.setRsbsServices(rsbsUrls);
252 * jalview.jbgui.GWsPreferences#deleteWsUrl_actionPerformed(java.awt.event
256 protected void deleteWsUrl_actionPerformed(ActionEvent e)
258 int sel = wsList.getSelectedRow();
261 wsUrls.removeElementAt(sel);
270 * @see jalview.jbgui.GWsPreferences#editWsUrl_actionPerformed(java.awt.event.
274 protected void editWsUrl_actionPerformed(ActionEvent e)
276 int sel = wsList.getSelectedRow();
279 String url = editUrl(wsUrls.elementAt(sel), "Edit JABAWS URL");
282 int present = wsUrls.indexOf(url);
286 wsUrls.setElementAt(url, sel);
293 wsUrls.removeElementAt(sel);
302 protected void newSbrsUrl_actionPerformed(ActionEvent e)
304 RestServiceEditorPane rse = new RestServiceEditorPane();
305 rse.showDialog("Add a new Simple Bioinformatics Rest Service");
306 String rservice = rse.getEditedRestService();
307 if (rservice != null && !rsbsUrls.contains(rservice))
309 rsbsUrls.add(rservice);
316 protected void editSbrsUrl_actionPerformed(ActionEvent e)
318 int sel = sbrsList.getSelectedIndex();
321 RestServiceEditorPane rse = new RestServiceEditorPane(
322 new RestServiceDescription(rsbsUrls.elementAt(sel)));
323 rse.showDialog("Edit Simple Bioinformatics Rest Service entry");
324 String rservice = rse.getEditedRestService();
325 if (rservice != null)
327 int present = rsbsUrls.indexOf(rservice);
331 rsbsUrls.setElementAt(rservice, sel);
338 rsbsUrls.removeElementAt(sel);
347 void updateWsMenuConfig(boolean old)
351 if (oldUrls != wsUrls
352 || (wsUrls != null && oldUrls != null && !wsUrls
357 wsUrls = (oldUrls == null) ? null : new Vector(oldUrls);
358 if (oldRsbsUrls != rsbsUrls
359 || (rsbsUrls != null && oldRsbsUrls != null && !oldRsbsUrls
364 oldRsbsUrls = (oldRsbsUrls == null) ? null : new Vector(oldRsbsUrls);
371 "SHOW_ENFIN_SERVICES",
373 old ? oldEnfin : enableEnfinServices.isSelected())
376 "SHOW_JWS2_SERVICES",
377 Boolean.valueOf(old ? oldJws2 : enableJws2Services.isSelected())
381 Boolean.valueOf(old ? oldIndexByHost : indexByHost.isSelected())
385 Boolean.valueOf(old ? oldIndexByType : indexByType.isSelected())
389 "SHOW_WSDISCOVERY_ERRORS",
391 old ? oldWsWarning : displayWsWarning.isSelected())
394 updateRsbsServiceList();
401 * jalview.jbgui.GWsPreferences#moveWsUrlDown_actionPerformed(java.awt.event
405 protected void moveWsUrlDown_actionPerformed(ActionEvent e)
407 int p = wsList.getSelectedRow();
408 if (p > -1 && p < wsUrls.size() - 1)
410 String t = wsUrls.get(p + 1);
411 wsUrls.setElementAt(wsUrls.elementAt(p), p + 1);
412 wsUrls.setElementAt(t, p);
414 wsList.getSelectionModel().setSelectionInterval(p + 1, p + 1);
423 * jalview.jbgui.GWsPreferences#moveWsUrlUp_actionPerformed(java.awt.event
427 protected void moveWsUrlUp_actionPerformed(ActionEvent e)
429 int p = wsList.getSelectedRow();
432 String t = wsUrls.get(p - 1);
433 wsUrls.setElementAt(wsUrls.elementAt(p), p - 1);
434 wsUrls.setElementAt(t, p);
436 wsList.getSelectionModel().setSelectionInterval(p - 1, p - 1);
441 private String editUrl(String initUrl, String title)
443 String url = initUrl;
449 JTextField urltf = new JTextField(url, 40);
450 JPanel panel = new JPanel(new BorderLayout());
451 JPanel pane12 = new JPanel(new BorderLayout());
452 pane12.add(new JLabel(MessageManager.getString("label.url")),
453 BorderLayout.CENTER);
454 pane12.add(urltf, BorderLayout.EAST);
455 panel.add(pane12, BorderLayout.NORTH);
456 boolean valid = false;
457 int resp = JOptionPane.CANCEL_OPTION;
459 && (resp = JOptionPane.showInternalConfirmDialog(
460 Desktop.desktop, panel, title,
461 JOptionPane.OK_CANCEL_OPTION)) == JOptionPane.OK_OPTION)
465 // TODO: do a better job of checking that the url is a valid discovery
466 // URL for web services.
467 String tx = urltf.getText().trim();
468 while (tx.length() > 0 && tx.lastIndexOf('/') == tx.length() - 1)
470 tx = tx.substring(0, tx.length() - 1);
475 } catch (Exception e)
478 JOptionPane.showInternalMessageDialog(Desktop.desktop,
479 MessageManager.getString("label.invalid_url"));
482 if (valid && resp == JOptionPane.OK_OPTION)
484 int validate = JOptionPane
485 .showInternalConfirmDialog(
487 "Validate JabaWS Server ?\n(Look in console output for results)",
488 "Test Server?", JOptionPane.YES_NO_OPTION);
489 if (validate == JOptionPane.OK_OPTION)
491 if (jalview.ws.jws2.Jws2Discoverer.testServiceUrl(foo))
493 return foo.toString();
498 .showInternalMessageDialog(
500 "Service did not pass validation.\nCheck the Jalview Console for more details.");
505 // just return the URL anyway
506 return foo.toString();
515 * @see jalview.jbgui.GWsPreferences#newWsUrl_actionPerformed(java.awt.event.
519 protected void newWsUrl_actionPerformed(ActionEvent e)
521 String url = editUrl(null, "Add new JABAWS URL");
524 if (!wsUrls.contains(url))
526 int selind = wsList.getSelectedRow();
529 wsUrls.insertElementAt(url, selind);
533 wsUrls.addElement(url);
544 * @see jalview.jbgui.GWsPreferences#refreshWs_actionPerformed(java.awt.event.
548 protected void refreshWs_actionPerformed(ActionEvent e)
550 new Thread(new Runnable()
556 lastrefresh = update - 1;
557 updateWsMenuConfig(false);
565 * Refresh the web services menus - but only if there has been a change in the
566 * configuration (indicated by update!=lastrefresh)
568 * @param showProgress
569 * show progress in dialog or on desktop
571 protected void refreshWsMenu(boolean showProgress)
575 new Thread(new Runnable()
580 progressBar.setVisible(true);
582 progressBar.setIndeterminate(true);
583 if (lastrefresh != update)
585 lastrefresh = update;
586 Desktop.instance.startServiceDiscovery(true); // wait around for all
587 // threads to complete
591 progressBar.setIndeterminate(false);
592 progressBar.setVisible(false);
600 new Thread(new Runnable()
605 long ct = System.currentTimeMillis();
606 Desktop.instance.setProgressBar("Refreshing Web Service Menus",
608 if (lastrefresh != update)
610 lastrefresh = update;
611 Desktop.instance.startServiceDiscovery(true);
614 Desktop.instance.setProgressBar(null, ct);
622 * state counters for ensuring that updates only happen if config has changed.
624 private long update = 0, lastrefresh = 0;
630 * jalview.jbgui.GWsPreferences#resetWs_actionPerformed(java.awt.event.ActionEvent
634 protected void resetWs_actionPerformed(ActionEvent e)
636 jalview.ws.jws2.Jws2Discoverer.setServiceUrls(null);
637 Vector nwsUrls = jalview.ws.jws2.Jws2Discoverer.getServiceUrls();
638 if (!wsUrls.equals(nwsUrls))
645 updateAndRefreshWsMenuConfig(true);
648 protected void ok_ActionPerformed(ActionEvent e)
650 // update everything regardless.
651 updateAndRefreshWsMenuConfig(false);
654 public void updateAndRefreshWsMenuConfig(
655 final boolean showProgressInDialog)
657 new Thread(new Runnable()
662 updateWsMenuConfig(false);
663 refreshWsMenu(showProgressInDialog);