2 * Jalview - A Sequence Alignment Editor and Viewer (Version 2.8)
3 * Copyright (C) 2012 J Procter, AM Waterhouse, LM Lui, J Engelhardt, G Barton, M Clamp, S Searle
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/>.
20 import jalview.bin.Cache;
21 import jalview.jbgui.GWsPreferences;
22 import jalview.util.MessageManager;
23 import jalview.ws.jws2.Jws2Discoverer;
24 import jalview.ws.rest.RestServiceDescription;
26 import java.awt.BorderLayout;
27 import java.awt.Color;
28 import java.awt.Component;
29 import java.awt.Dimension;
30 import java.awt.event.ActionEvent;
31 import java.awt.event.ActionListener;
33 import java.util.Vector;
35 import javax.swing.JLabel;
36 import javax.swing.JOptionPane;
37 import javax.swing.JPanel;
38 import javax.swing.JTable;
39 import javax.swing.JTextField;
40 import javax.swing.table.AbstractTableModel;
41 import javax.swing.table.TableCellRenderer;
43 public class WsPreferences extends GWsPreferences
46 public WsPreferences()
49 initFromPreferences();
52 Vector<String> wsUrls, oldUrls, rsbsUrls, oldRsbsUrls;
54 private boolean needWsMenuUpdate;
56 private boolean oldJws1, oldJws2, oldIndexByHost, oldIndexByType,
57 oldEnfin, oldWsWarning;
59 private void initFromPreferences()
62 wsUrls = jalview.ws.jws2.Jws2Discoverer.getServiceUrls();
65 oldUrls = new Vector<String>(wsUrls);
70 wsUrls = new Vector<String>();
72 wsList.setDefaultRenderer(Integer.class, new JabaWSStatusRenderer());
73 wsList.setAutoResizeMode(JTable.AUTO_RESIZE_ALL_COLUMNS);
75 rsbsUrls = jalview.ws.rest.RestClient.getRsbsDescriptions();
78 oldRsbsUrls = new Vector<String>(rsbsUrls);
83 rsbsUrls = new Vector<String>();
86 enableEnfinServices.setSelected(oldEnfin = Cache.getDefault(
87 "SHOW_ENFIN_SERVICES", true));
88 enableEnfinServices.addActionListener(updateAction);
89 enableJws2Services.setSelected(oldJws2 = Cache.getDefault(
90 "SHOW_JWS2_SERVICES", true));
91 enableJws2Services.addActionListener(updateAction);
92 indexByHost.setSelected(oldIndexByHost = Cache.getDefault(
93 "WSMENU_BYHOST", false));
94 indexByHost.addActionListener(updateAction);
95 indexByType.setSelected(oldIndexByType = Cache.getDefault(
96 "WSMENU_BYTYPE", false));
97 indexByType.addActionListener(updateAction);
98 displayWsWarning.setSelected(oldWsWarning = Cache.getDefault(
99 "SHOW_WSDISCOVERY_ERRORS", true));
102 ActionListener updateAction = new ActionListener()
106 public void actionPerformed(ActionEvent e)
113 private void updateList()
115 Object tdat[][] = new Object[wsUrls.size()][2];
117 for (String url : wsUrls)
119 int status = Jws2Discoverer.getDiscoverer().getServerStatusFor(url);
120 tdat[r][1] = new Integer(status);
124 wsList.setModel(new WsUrlTableModel(tdat));
125 wsList.getColumn("Status").setMinWidth(10);
128 private class JabaWSStatusRenderer extends JPanel implements
131 public JabaWSStatusRenderer()
134 setMinimumSize(new Dimension(10, 10));
140 * render an Integer reflecting service status as a colour and symbol
144 public Component getTableCellRendererComponent(JTable arg0,
145 Object status, boolean isSelected, boolean hasFocus, int row,
149 String t = new String("");
150 switch (((Integer) status).intValue())
153 // cb.setSelected(true);
158 // cb.setSelected(true);
163 // cb.setSelected(false);
168 // cb.setSelected(false);
180 private class WsUrlTableModel extends AbstractTableModel
183 private Object[][] data;
185 public WsUrlTableModel(Object[][] tdat)
191 public int getColumnCount()
197 public String getColumnName(int column)
203 return "Service URL";
207 public int getRowCount()
217 public java.lang.Class<?> getColumnClass(int columnIndex)
219 return getValueAt(0, columnIndex).getClass();
223 public Object getValueAt(int rowIndex, int columnIndex)
225 return data[rowIndex][columnIndex];
230 private void updateRsbsList()
232 sbrsList.setListData(rsbsUrls);
235 private void updateServiceList()
237 jalview.ws.jws2.Jws2Discoverer.setServiceUrls(wsUrls);
240 private void updateRsbsServiceList()
242 jalview.ws.rest.RestClient.setRsbsServices(rsbsUrls);
249 * jalview.jbgui.GWsPreferences#deleteWsUrl_actionPerformed(java.awt.event
253 protected void deleteWsUrl_actionPerformed(ActionEvent e)
255 int sel = wsList.getSelectedRow();
258 wsUrls.removeElementAt(sel);
267 * @see jalview.jbgui.GWsPreferences#editWsUrl_actionPerformed(java.awt.event.
271 protected void editWsUrl_actionPerformed(ActionEvent e)
273 int sel = wsList.getSelectedRow();
276 String url = editUrl(wsUrls.elementAt(sel), "Edit JABAWS URL");
279 int present = wsUrls.indexOf(url);
283 wsUrls.setElementAt(url, sel);
290 wsUrls.removeElementAt(sel);
299 protected void newSbrsUrl_actionPerformed(ActionEvent e)
301 RestServiceEditorPane rse = new RestServiceEditorPane();
302 rse.showDialog("Add a new Simple Bioinformatics Rest Service");
303 String rservice = rse.getEditedRestService();
304 if (rservice != null && !rsbsUrls.contains(rservice))
306 rsbsUrls.add(rservice);
313 protected void editSbrsUrl_actionPerformed(ActionEvent e)
315 int sel = sbrsList.getSelectedIndex();
318 RestServiceEditorPane rse = new RestServiceEditorPane(
319 new RestServiceDescription(rsbsUrls.elementAt(sel)));
320 rse.showDialog("Edit Simple Bioinformatics Rest Service entry");
321 String rservice = rse.getEditedRestService();
322 if (rservice != null)
324 int present = rsbsUrls.indexOf(rservice);
328 rsbsUrls.setElementAt(rservice, sel);
335 rsbsUrls.removeElementAt(sel);
344 void updateWsMenuConfig(boolean old)
348 if (oldUrls != wsUrls
349 || (wsUrls != null && oldUrls != null && !wsUrls
354 wsUrls = (oldUrls == null) ? null : new Vector(oldUrls);
355 if (oldRsbsUrls != rsbsUrls
356 || (rsbsUrls != null && oldRsbsUrls != null && !oldRsbsUrls
361 oldRsbsUrls = (oldRsbsUrls == null) ? null : new Vector(oldRsbsUrls);
368 "SHOW_ENFIN_SERVICES",
370 old ? oldEnfin : enableEnfinServices.isSelected())
373 "SHOW_JWS2_SERVICES",
374 Boolean.valueOf(old ? oldJws2 : enableJws2Services.isSelected())
378 Boolean.valueOf(old ? oldIndexByHost : indexByHost.isSelected())
382 Boolean.valueOf(old ? oldIndexByType : indexByType.isSelected())
386 "SHOW_WSDISCOVERY_ERRORS",
388 old ? oldWsWarning : displayWsWarning.isSelected())
391 updateRsbsServiceList();
398 * jalview.jbgui.GWsPreferences#moveWsUrlDown_actionPerformed(java.awt.event
402 protected void moveWsUrlDown_actionPerformed(ActionEvent e)
404 int p = wsList.getSelectedRow();
405 if (p > -1 && p < wsUrls.size() - 1)
407 String t = wsUrls.get(p + 1);
408 wsUrls.setElementAt(wsUrls.elementAt(p), p + 1);
409 wsUrls.setElementAt(t, p);
411 wsList.getSelectionModel().setSelectionInterval(p + 1, p + 1);
420 * jalview.jbgui.GWsPreferences#moveWsUrlUp_actionPerformed(java.awt.event
424 protected void moveWsUrlUp_actionPerformed(ActionEvent e)
426 int p = wsList.getSelectedRow();
429 String t = wsUrls.get(p - 1);
430 wsUrls.setElementAt(wsUrls.elementAt(p), p - 1);
431 wsUrls.setElementAt(t, p);
433 wsList.getSelectionModel().setSelectionInterval(p - 1, p - 1);
438 private String editUrl(String initUrl, String title)
440 String url = initUrl;
446 JTextField urltf = new JTextField(url, 40);
447 JPanel panel = new JPanel(new BorderLayout());
448 JPanel pane12 = new JPanel(new BorderLayout());
449 pane12.add(new JLabel(MessageManager.getString("label.url")), BorderLayout.CENTER);
450 pane12.add(urltf, BorderLayout.EAST);
451 panel.add(pane12, BorderLayout.NORTH);
452 boolean valid = false;
453 int resp = JOptionPane.CANCEL_OPTION;
455 && (resp = JOptionPane.showInternalConfirmDialog(
456 Desktop.desktop, panel, title,
457 JOptionPane.OK_CANCEL_OPTION)) == JOptionPane.OK_OPTION)
461 // TODO: do a better job of checking that the url is a valid discovery
462 // URL for web services.
463 String tx = urltf.getText().trim();
464 while (tx.length() > 0 && tx.lastIndexOf('/') == tx.length() - 1)
466 tx = tx.substring(0, tx.length() - 1);
471 } catch (Exception e)
474 JOptionPane.showInternalMessageDialog(Desktop.desktop,
475 MessageManager.getString("label.invalid_url"));
478 if (valid && resp == JOptionPane.OK_OPTION)
480 int validate = JOptionPane
481 .showInternalConfirmDialog(
483 "Validate JabaWS Server ?\n(Look in console output for results)",
484 "Test Server?", JOptionPane.YES_NO_OPTION);
485 if (validate == JOptionPane.OK_OPTION)
487 if (jalview.ws.jws2.Jws2Discoverer.testServiceUrl(foo))
489 return foo.toString();
494 .showInternalMessageDialog(
496 "Service did not pass validation.\nCheck the Jalview Console for more details.");
501 // just return the URL anyway
502 return foo.toString();
511 * @see jalview.jbgui.GWsPreferences#newWsUrl_actionPerformed(java.awt.event.
515 protected void newWsUrl_actionPerformed(ActionEvent e)
517 String url = editUrl(null, "Add new JABAWS URL");
520 if (!wsUrls.contains(url))
522 int selind = wsList.getSelectedRow();
525 wsUrls.insertElementAt(url, selind);
529 wsUrls.addElement(url);
540 * @see jalview.jbgui.GWsPreferences#refreshWs_actionPerformed(java.awt.event.
544 protected void refreshWs_actionPerformed(ActionEvent e)
546 new Thread(new Runnable()
552 lastrefresh = update - 1;
553 updateWsMenuConfig(false);
561 * Refresh the web services menus - but only if there has been a change in the
562 * configuration (indicated by update!=lastrefresh)
564 * @param showProgress
565 * show progress in dialog or on desktop
567 protected void refreshWsMenu(boolean showProgress)
571 new Thread(new Runnable()
576 progressBar.setVisible(true);
578 progressBar.setIndeterminate(true);
579 if (lastrefresh != update)
581 lastrefresh = update;
582 Desktop.instance.startServiceDiscovery(true); // wait around for all
583 // threads to complete
587 progressBar.setIndeterminate(false);
588 progressBar.setVisible(false);
596 new Thread(new Runnable()
601 long ct = System.currentTimeMillis();
602 Desktop.instance.setProgressBar("Refreshing Web Service Menus",
604 if (lastrefresh != update)
606 lastrefresh = update;
607 Desktop.instance.startServiceDiscovery(true);
610 Desktop.instance.setProgressBar(null, ct);
618 * state counters for ensuring that updates only happen if config has changed.
620 private long update = 0, lastrefresh = 0;
626 * jalview.jbgui.GWsPreferences#resetWs_actionPerformed(java.awt.event.ActionEvent
630 protected void resetWs_actionPerformed(ActionEvent e)
632 jalview.ws.jws2.Jws2Discoverer.setServiceUrls(null);
633 Vector nwsUrls = jalview.ws.jws2.Jws2Discoverer.getServiceUrls();
634 if (!wsUrls.equals(nwsUrls))
641 updateAndRefreshWsMenuConfig(true);
644 protected void ok_ActionPerformed(ActionEvent e)
646 // update everything regardless.
647 updateAndRefreshWsMenuConfig(false);
650 public void updateAndRefreshWsMenuConfig(
651 final boolean showProgressInDialog)
653 new Thread(new Runnable()
658 updateWsMenuConfig(false);
659 refreshWsMenu(showProgressInDialog);