2 * Jalview - A Sequence Alignment Editor and Viewer (Version 2.8.0b1)
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 of the License, or (at your option) any later version.
11 * Jalview is distributed in the hope that it will be useful, but
12 * WITHOUT ANY WARRANTY; without even the implied warranty
13 * of MERCHANTABILITY or FITNESS FOR A PARTICULAR
14 * PURPOSE. See the GNU General Public License for more details.
16 * You should have received a copy of the GNU General Public License along with Jalview. If not, see <http://www.gnu.org/licenses/>.
17 * The Jalview Authors are detailed in the 'AUTHORS' file.
21 import jalview.bin.Cache;
22 import jalview.jbgui.GWsPreferences;
23 import jalview.util.MessageManager;
24 import jalview.ws.jws2.Jws2Discoverer;
25 import jalview.ws.rest.RestServiceDescription;
27 import java.awt.BorderLayout;
28 import java.awt.Color;
29 import java.awt.Component;
30 import java.awt.Dimension;
31 import java.awt.event.ActionEvent;
32 import java.awt.event.ActionListener;
34 import java.util.Vector;
36 import javax.swing.JLabel;
37 import javax.swing.JOptionPane;
38 import javax.swing.JPanel;
39 import javax.swing.JTable;
40 import javax.swing.JTextField;
41 import javax.swing.table.AbstractTableModel;
42 import javax.swing.table.TableCellRenderer;
44 public class WsPreferences extends GWsPreferences
47 public WsPreferences()
50 initFromPreferences();
53 Vector<String> wsUrls, oldUrls, rsbsUrls, oldRsbsUrls;
55 private boolean needWsMenuUpdate;
57 private boolean oldJws1, oldJws2, oldIndexByHost, oldIndexByType,
58 oldEnfin, oldWsWarning;
60 private void initFromPreferences()
63 wsUrls = jalview.ws.jws2.Jws2Discoverer.getServiceUrls();
66 oldUrls = new Vector<String>(wsUrls);
71 wsUrls = new Vector<String>();
73 wsList.setDefaultRenderer(Integer.class, new JabaWSStatusRenderer());
74 wsList.setAutoResizeMode(JTable.AUTO_RESIZE_ALL_COLUMNS);
76 rsbsUrls = jalview.ws.rest.RestClient.getRsbsDescriptions();
79 oldRsbsUrls = new Vector<String>(rsbsUrls);
84 rsbsUrls = new Vector<String>();
87 enableEnfinServices.setSelected(oldEnfin = Cache.getDefault(
88 "SHOW_ENFIN_SERVICES", true));
89 enableEnfinServices.addActionListener(updateAction);
90 enableJws2Services.setSelected(oldJws2 = Cache.getDefault(
91 "SHOW_JWS2_SERVICES", true));
92 enableJws2Services.addActionListener(updateAction);
93 indexByHost.setSelected(oldIndexByHost = Cache.getDefault(
94 "WSMENU_BYHOST", false));
95 indexByHost.addActionListener(updateAction);
96 indexByType.setSelected(oldIndexByType = Cache.getDefault(
97 "WSMENU_BYTYPE", false));
98 indexByType.addActionListener(updateAction);
99 displayWsWarning.setSelected(oldWsWarning = Cache.getDefault(
100 "SHOW_WSDISCOVERY_ERRORS", true));
103 ActionListener updateAction = new ActionListener()
107 public void actionPerformed(ActionEvent e)
114 private void updateList()
116 Object tdat[][] = new Object[wsUrls.size()][2];
118 for (String url : wsUrls)
120 int status = Jws2Discoverer.getDiscoverer().getServerStatusFor(url);
121 tdat[r][1] = new Integer(status);
125 wsList.setModel(new WsUrlTableModel(tdat));
126 wsList.getColumn("Status").setMinWidth(10);
129 private class JabaWSStatusRenderer extends JPanel implements
132 public JabaWSStatusRenderer()
135 setMinimumSize(new Dimension(10, 10));
141 * render an Integer reflecting service status as a colour and symbol
145 public Component getTableCellRendererComponent(JTable arg0,
146 Object status, boolean isSelected, boolean hasFocus, int row,
150 String t = new String("");
151 switch (((Integer) status).intValue())
154 // cb.setSelected(true);
159 // cb.setSelected(true);
164 // cb.setSelected(false);
169 // cb.setSelected(false);
181 private class WsUrlTableModel extends AbstractTableModel
184 private Object[][] data;
186 public WsUrlTableModel(Object[][] tdat)
192 public int getColumnCount()
198 public String getColumnName(int column)
204 return "Service URL";
208 public int getRowCount()
218 public java.lang.Class<?> getColumnClass(int columnIndex)
220 return getValueAt(0, columnIndex).getClass();
224 public Object getValueAt(int rowIndex, int columnIndex)
226 return data[rowIndex][columnIndex];
231 private void updateRsbsList()
233 sbrsList.setListData(rsbsUrls);
236 private void updateServiceList()
238 jalview.ws.jws2.Jws2Discoverer.setServiceUrls(wsUrls);
241 private void updateRsbsServiceList()
243 jalview.ws.rest.RestClient.setRsbsServices(rsbsUrls);
250 * jalview.jbgui.GWsPreferences#deleteWsUrl_actionPerformed(java.awt.event
254 protected void deleteWsUrl_actionPerformed(ActionEvent e)
256 int sel = wsList.getSelectedRow();
259 wsUrls.removeElementAt(sel);
268 * @see jalview.jbgui.GWsPreferences#editWsUrl_actionPerformed(java.awt.event.
272 protected void editWsUrl_actionPerformed(ActionEvent e)
274 int sel = wsList.getSelectedRow();
277 String url = editUrl(wsUrls.elementAt(sel), "Edit JABAWS URL");
280 int present = wsUrls.indexOf(url);
284 wsUrls.setElementAt(url, sel);
291 wsUrls.removeElementAt(sel);
300 protected void newSbrsUrl_actionPerformed(ActionEvent e)
302 RestServiceEditorPane rse = new RestServiceEditorPane();
303 rse.showDialog("Add a new Simple Bioinformatics Rest Service");
304 String rservice = rse.getEditedRestService();
305 if (rservice != null && !rsbsUrls.contains(rservice))
307 rsbsUrls.add(rservice);
314 protected void editSbrsUrl_actionPerformed(ActionEvent e)
316 int sel = sbrsList.getSelectedIndex();
319 RestServiceEditorPane rse = new RestServiceEditorPane(
320 new RestServiceDescription(rsbsUrls.elementAt(sel)));
321 rse.showDialog("Edit Simple Bioinformatics Rest Service entry");
322 String rservice = rse.getEditedRestService();
323 if (rservice != null)
325 int present = rsbsUrls.indexOf(rservice);
329 rsbsUrls.setElementAt(rservice, sel);
336 rsbsUrls.removeElementAt(sel);
345 void updateWsMenuConfig(boolean old)
349 if (oldUrls != wsUrls
350 || (wsUrls != null && oldUrls != null && !wsUrls
355 wsUrls = (oldUrls == null) ? null : new Vector(oldUrls);
356 if (oldRsbsUrls != rsbsUrls
357 || (rsbsUrls != null && oldRsbsUrls != null && !oldRsbsUrls
362 oldRsbsUrls = (oldRsbsUrls == null) ? null : new Vector(oldRsbsUrls);
369 "SHOW_ENFIN_SERVICES",
371 old ? oldEnfin : enableEnfinServices.isSelected())
374 "SHOW_JWS2_SERVICES",
375 Boolean.valueOf(old ? oldJws2 : enableJws2Services.isSelected())
379 Boolean.valueOf(old ? oldIndexByHost : indexByHost.isSelected())
383 Boolean.valueOf(old ? oldIndexByType : indexByType.isSelected())
387 "SHOW_WSDISCOVERY_ERRORS",
389 old ? oldWsWarning : displayWsWarning.isSelected())
392 updateRsbsServiceList();
399 * jalview.jbgui.GWsPreferences#moveWsUrlDown_actionPerformed(java.awt.event
403 protected void moveWsUrlDown_actionPerformed(ActionEvent e)
405 int p = wsList.getSelectedRow();
406 if (p > -1 && p < wsUrls.size() - 1)
408 String t = wsUrls.get(p + 1);
409 wsUrls.setElementAt(wsUrls.elementAt(p), p + 1);
410 wsUrls.setElementAt(t, p);
412 wsList.getSelectionModel().setSelectionInterval(p + 1, p + 1);
421 * jalview.jbgui.GWsPreferences#moveWsUrlUp_actionPerformed(java.awt.event
425 protected void moveWsUrlUp_actionPerformed(ActionEvent e)
427 int p = wsList.getSelectedRow();
430 String t = wsUrls.get(p - 1);
431 wsUrls.setElementAt(wsUrls.elementAt(p), p - 1);
432 wsUrls.setElementAt(t, p);
434 wsList.getSelectionModel().setSelectionInterval(p - 1, p - 1);
439 private String editUrl(String initUrl, String title)
441 String url = initUrl;
447 JTextField urltf = new JTextField(url, 40);
448 JPanel panel = new JPanel(new BorderLayout());
449 JPanel pane12 = new JPanel(new BorderLayout());
450 pane12.add(new JLabel(MessageManager.getString("label.url")), BorderLayout.CENTER);
451 pane12.add(urltf, BorderLayout.EAST);
452 panel.add(pane12, BorderLayout.NORTH);
453 boolean valid = false;
454 int resp = JOptionPane.CANCEL_OPTION;
456 && (resp = JOptionPane.showInternalConfirmDialog(
457 Desktop.desktop, panel, title,
458 JOptionPane.OK_CANCEL_OPTION)) == JOptionPane.OK_OPTION)
462 // TODO: do a better job of checking that the url is a valid discovery
463 // URL for web services.
464 String tx = urltf.getText().trim();
465 while (tx.length() > 0 && tx.lastIndexOf('/') == tx.length() - 1)
467 tx = tx.substring(0, tx.length() - 1);
472 } catch (Exception e)
475 JOptionPane.showInternalMessageDialog(Desktop.desktop,
476 MessageManager.getString("label.invalid_url"));
479 if (valid && resp == JOptionPane.OK_OPTION)
481 int validate = JOptionPane
482 .showInternalConfirmDialog(
484 "Validate JabaWS Server ?\n(Look in console output for results)",
485 "Test Server?", JOptionPane.YES_NO_OPTION);
486 if (validate == JOptionPane.OK_OPTION)
488 if (jalview.ws.jws2.Jws2Discoverer.testServiceUrl(foo))
490 return foo.toString();
495 .showInternalMessageDialog(
497 "Service did not pass validation.\nCheck the Jalview Console for more details.");
502 // just return the URL anyway
503 return foo.toString();
512 * @see jalview.jbgui.GWsPreferences#newWsUrl_actionPerformed(java.awt.event.
516 protected void newWsUrl_actionPerformed(ActionEvent e)
518 String url = editUrl(null, "Add new JABAWS URL");
521 if (!wsUrls.contains(url))
523 int selind = wsList.getSelectedRow();
526 wsUrls.insertElementAt(url, selind);
530 wsUrls.addElement(url);
541 * @see jalview.jbgui.GWsPreferences#refreshWs_actionPerformed(java.awt.event.
545 protected void refreshWs_actionPerformed(ActionEvent e)
547 new Thread(new Runnable()
553 lastrefresh = update - 1;
554 updateWsMenuConfig(false);
562 * Refresh the web services menus - but only if there has been a change in the
563 * configuration (indicated by update!=lastrefresh)
565 * @param showProgress
566 * show progress in dialog or on desktop
568 protected void refreshWsMenu(boolean showProgress)
572 new Thread(new Runnable()
577 progressBar.setVisible(true);
579 progressBar.setIndeterminate(true);
580 if (lastrefresh != update)
582 lastrefresh = update;
583 Desktop.instance.startServiceDiscovery(true); // wait around for all
584 // threads to complete
588 progressBar.setIndeterminate(false);
589 progressBar.setVisible(false);
597 new Thread(new Runnable()
602 long ct = System.currentTimeMillis();
603 Desktop.instance.setProgressBar("Refreshing Web Service Menus",
605 if (lastrefresh != update)
607 lastrefresh = update;
608 Desktop.instance.startServiceDiscovery(true);
611 Desktop.instance.setProgressBar(null, ct);
619 * state counters for ensuring that updates only happen if config has changed.
621 private long update = 0, lastrefresh = 0;
627 * jalview.jbgui.GWsPreferences#resetWs_actionPerformed(java.awt.event.ActionEvent
631 protected void resetWs_actionPerformed(ActionEvent e)
633 jalview.ws.jws2.Jws2Discoverer.setServiceUrls(null);
634 Vector nwsUrls = jalview.ws.jws2.Jws2Discoverer.getServiceUrls();
635 if (!wsUrls.equals(nwsUrls))
642 updateAndRefreshWsMenuConfig(true);
645 protected void ok_ActionPerformed(ActionEvent e)
647 // update everything regardless.
648 updateAndRefreshWsMenuConfig(false);
651 public void updateAndRefreshWsMenuConfig(
652 final boolean showProgressInDialog)
654 new Thread(new Runnable()
659 updateWsMenuConfig(false);
660 refreshWsMenu(showProgressInDialog);