X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fgui%2FWsPreferences.java;h=59e63090f0d5735721a29eb16bb970de0b77c6ee;hb=b2f9a8d7bce642ff4011bc6d49e02bb0569fbb11;hp=d6446afdf0d8eb645e18659d40bc598192180faa;hpb=8a6fa9ea9900d0f106529c3f6283e7f9d76dd2cb;p=jalview.git diff --git a/src/jalview/gui/WsPreferences.java b/src/jalview/gui/WsPreferences.java index d6446af..59e6309 100644 --- a/src/jalview/gui/WsPreferences.java +++ b/src/jalview/gui/WsPreferences.java @@ -1,35 +1,45 @@ /* - * Jalview - A Sequence Alignment Editor and Viewer (Version 2.6) - * Copyright (C) 2010 J Procter, AM Waterhouse, G Barton, M Clamp, S Searle + * Jalview - A Sequence Alignment Editor and Viewer (Version 2.8.1) + * Copyright (C) 2014 The Jalview Authors * * This file is part of Jalview. * * Jalview is free software: you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. - * + * * Jalview is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty * of MERCHANTABILITY or FITNESS FOR A PARTICULAR * PURPOSE. See the GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along with Jalview. If not, see . + * The Jalview Authors are detailed in the 'AUTHORS' file. */ package jalview.gui; +import jalview.bin.Cache; +import jalview.jbgui.GWsPreferences; +import jalview.util.MessageManager; +import jalview.ws.jws2.Jws2Discoverer; +import jalview.ws.rest.RestServiceDescription; + import java.awt.BorderLayout; +import java.awt.Color; +import java.awt.Component; +import java.awt.Dimension; import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; import java.net.URL; import java.util.Vector; -import javax.swing.JCheckBox; import javax.swing.JLabel; import javax.swing.JOptionPane; import javax.swing.JPanel; +import javax.swing.JTable; import javax.swing.JTextField; - -import jalview.bin.Cache; -import jalview.jbgui.GWsPreferences; +import javax.swing.table.AbstractTableModel; +import javax.swing.table.TableCellRenderer; public class WsPreferences extends GWsPreferences { @@ -40,12 +50,12 @@ public class WsPreferences extends GWsPreferences initFromPreferences(); } - Vector wsUrls, oldUrls; + Vector wsUrls, oldUrls, rsbsUrls, oldRsbsUrls; private boolean needWsMenuUpdate; private boolean oldJws1, oldJws2, oldIndexByHost, oldIndexByType, - oldEnfin; + oldEnfin, oldWsWarning; private void initFromPreferences() { @@ -60,22 +70,167 @@ public class WsPreferences extends GWsPreferences oldUrls = null; wsUrls = new Vector(); } + wsList.setDefaultRenderer(Integer.class, new JabaWSStatusRenderer()); + wsList.setAutoResizeMode(JTable.AUTO_RESIZE_ALL_COLUMNS); updateList(); + rsbsUrls = jalview.ws.rest.RestClient.getRsbsDescriptions(); + if (rsbsUrls != null) + { + oldRsbsUrls = new Vector(rsbsUrls); + } + else + { + oldRsbsUrls = null; + rsbsUrls = new Vector(); + } + updateRsbsList(); enableEnfinServices.setSelected(oldEnfin = Cache.getDefault( "SHOW_ENFIN_SERVICES", true)); - enableJws1Services.setSelected(oldJws1 = Cache.getDefault( - "SHOW_JWS1_SERVICES", true)); + enableEnfinServices.addActionListener(updateAction); enableJws2Services.setSelected(oldJws2 = Cache.getDefault( "SHOW_JWS2_SERVICES", true)); + enableJws2Services.addActionListener(updateAction); indexByHost.setSelected(oldIndexByHost = Cache.getDefault( - "WSMENU_BYHOST", true)); + "WSMENU_BYHOST", false)); + indexByHost.addActionListener(updateAction); indexByType.setSelected(oldIndexByType = Cache.getDefault( - "WSMENU_BYTYPE", true)); + "WSMENU_BYTYPE", false)); + indexByType.addActionListener(updateAction); + displayWsWarning.setSelected(oldWsWarning = Cache.getDefault( + "SHOW_WSDISCOVERY_ERRORS", true)); } + ActionListener updateAction = new ActionListener() + { + + @Override + public void actionPerformed(ActionEvent e) + { + update++; + } + + }; + private void updateList() { - wsList.setListData(wsUrls); + Object tdat[][] = new Object[wsUrls.size()][2]; + int r = 0; + for (String url : wsUrls) + { + int status = Jws2Discoverer.getDiscoverer().getServerStatusFor(url); + tdat[r][1] = new Integer(status); + tdat[r++][0] = url; + } + + wsList.setModel(new WsUrlTableModel(tdat)); + wsList.getColumn("Status").setMinWidth(10); + } + + private class JabaWSStatusRenderer extends JPanel implements + TableCellRenderer + { + public JabaWSStatusRenderer() + { + setOpaque(true); + setMinimumSize(new Dimension(10, 10)); + // setText(" "); + + } + + /** + * render an Integer reflecting service status as a colour and symbol + */ + + @Override + public Component getTableCellRendererComponent(JTable arg0, + Object status, boolean isSelected, boolean hasFocus, int row, + int column) + { + Color c; + String t = new String(""); + switch (((Integer) status).intValue()) + { + case 1: + // cb.setSelected(true); + // cb.setBackground( + c = Color.green; + break; + case 0: + // cb.setSelected(true); + // cb.setBackground( + c = Color.lightGray; + break; + case -1: + // cb.setSelected(false); + // cb.setBackground( + c = Color.red; + break; + default: + // cb.setSelected(false); + // cb.setBackground( + c = Color.orange; + } + setBackground(c); + // setText(t); + return this; + + } + + } + + private class WsUrlTableModel extends AbstractTableModel + { + + private Object[][] data; + + public WsUrlTableModel(Object[][] tdat) + { + this.data = tdat; + } + + @Override + public int getColumnCount() + { + return 2; + } + + @Override + public String getColumnName(int column) + { + if (column == 1) + { + return "Status"; + } + return "Service URL"; + } + + @Override + public int getRowCount() + { + if (data == null) + { + return 0; + } + return data.length; + } + + @Override + public java.lang.Class getColumnClass(int columnIndex) + { + return getValueAt(0, columnIndex).getClass(); + }; + + @Override + public Object getValueAt(int rowIndex, int columnIndex) + { + return data[rowIndex][columnIndex]; + } + + } + + private void updateRsbsList() + { + sbrsList.setListData(rsbsUrls); } private void updateServiceList() @@ -83,6 +238,11 @@ public class WsPreferences extends GWsPreferences jalview.ws.jws2.Jws2Discoverer.setServiceUrls(wsUrls); } + private void updateRsbsServiceList() + { + jalview.ws.rest.RestClient.setRsbsServices(rsbsUrls); + } + /* * (non-Javadoc) * @@ -93,10 +253,11 @@ public class WsPreferences extends GWsPreferences @Override protected void deleteWsUrl_actionPerformed(ActionEvent e) { - int sel = wsList.getSelectedIndex(); + int sel = wsList.getSelectedRow(); if (sel > -1) { wsUrls.removeElementAt(sel); + update++; updateList(); } } @@ -110,15 +271,16 @@ public class WsPreferences extends GWsPreferences @Override protected void editWsUrl_actionPerformed(ActionEvent e) { - int sel = wsList.getSelectedIndex(); + int sel = wsList.getSelectedRow(); if (sel > -1) { - String url = editUrl(wsUrls.elementAt(sel), "Edit JWS2 URL"); + String url = editUrl(wsUrls.elementAt(sel), "Edit JABAWS URL"); if (url != null) { int present = wsUrls.indexOf(url); if (present == -1) { + update++; wsUrls.setElementAt(url, sel); updateList(); } @@ -134,11 +296,70 @@ public class WsPreferences extends GWsPreferences } } + @Override + protected void newSbrsUrl_actionPerformed(ActionEvent e) + { + RestServiceEditorPane rse = new RestServiceEditorPane(); + rse.showDialog("Add a new Simple Bioinformatics Rest Service"); + String rservice = rse.getEditedRestService(); + if (rservice != null && !rsbsUrls.contains(rservice)) + { + rsbsUrls.add(rservice); + update++; + updateRsbsList(); + } + } + + @Override + protected void editSbrsUrl_actionPerformed(ActionEvent e) + { + int sel = sbrsList.getSelectedIndex(); + if (sel > -1) + { + RestServiceEditorPane rse = new RestServiceEditorPane( + new RestServiceDescription(rsbsUrls.elementAt(sel))); + rse.showDialog("Edit Simple Bioinformatics Rest Service entry"); + String rservice = rse.getEditedRestService(); + if (rservice != null) + { + int present = rsbsUrls.indexOf(rservice); + if (present == -1) + { + update++; + rsbsUrls.setElementAt(rservice, sel); + updateRsbsList(); + } + else + { + if (present != sel) + { + rsbsUrls.removeElementAt(sel); + update++; + updateRsbsList(); + } + } + } + } + } + void updateWsMenuConfig(boolean old) { if (old) { + if (oldUrls != wsUrls + || (wsUrls != null && oldUrls != null && !wsUrls + .equals(oldUrls))) + { + update++; + } wsUrls = (oldUrls == null) ? null : new Vector(oldUrls); + if (oldRsbsUrls != rsbsUrls + || (rsbsUrls != null && oldRsbsUrls != null && !oldRsbsUrls + .equals(rsbsUrls))) + { + update++; + } + oldRsbsUrls = (oldRsbsUrls == null) ? null : new Vector(oldRsbsUrls); } else { @@ -150,10 +371,6 @@ public class WsPreferences extends GWsPreferences old ? oldEnfin : enableEnfinServices.isSelected()) .toString()); Cache.setProperty( - "SHOW_JWS1_SERVICES", - Boolean.valueOf(old ? oldJws1 : enableJws1Services.isSelected()) - .toString()); - Cache.setProperty( "SHOW_JWS2_SERVICES", Boolean.valueOf(old ? oldJws2 : enableJws2Services.isSelected()) .toString()); @@ -165,7 +382,14 @@ public class WsPreferences extends GWsPreferences "WSMENU_BYTYPE", Boolean.valueOf(old ? oldIndexByType : indexByType.isSelected()) .toString()); + + Cache.setProperty( + "SHOW_WSDISCOVERY_ERRORS", + Boolean.valueOf( + old ? oldWsWarning : displayWsWarning.isSelected()) + .toString()); updateServiceList(); + updateRsbsServiceList(); } /* @@ -178,14 +402,15 @@ public class WsPreferences extends GWsPreferences @Override protected void moveWsUrlDown_actionPerformed(ActionEvent e) { - int p = wsList.getSelectedIndex(); + int p = wsList.getSelectedRow(); if (p > -1 && p < wsUrls.size() - 1) { String t = wsUrls.get(p + 1); wsUrls.setElementAt(wsUrls.elementAt(p), p + 1); wsUrls.setElementAt(t, p); updateList(); - wsList.setSelectedIndex(p + 1); + wsList.getSelectionModel().setSelectionInterval(p + 1, p + 1); + update++; } } @@ -199,14 +424,15 @@ public class WsPreferences extends GWsPreferences @Override protected void moveWsUrlUp_actionPerformed(ActionEvent e) { - int p = wsList.getSelectedIndex(); + int p = wsList.getSelectedRow(); if (p > 0) { String t = wsUrls.get(p - 1); wsUrls.setElementAt(wsUrls.elementAt(p), p - 1); wsUrls.setElementAt(t, p); updateList(); - wsList.setSelectedIndex(p - 1); + wsList.getSelectionModel().setSelectionInterval(p - 1, p - 1); + update++; } } @@ -221,7 +447,7 @@ public class WsPreferences extends GWsPreferences JTextField urltf = new JTextField(url, 40); JPanel panel = new JPanel(new BorderLayout()); JPanel pane12 = new JPanel(new BorderLayout()); - pane12.add(new JLabel("URL: "), BorderLayout.CENTER); + pane12.add(new JLabel(MessageManager.getString("label.url")), BorderLayout.CENTER); pane12.add(urltf, BorderLayout.EAST); panel.add(pane12, BorderLayout.NORTH); boolean valid = false; @@ -235,13 +461,19 @@ public class WsPreferences extends GWsPreferences { // TODO: do a better job of checking that the url is a valid discovery // URL for web services. - foo = new URL(urltf.getText().trim()); + String tx = urltf.getText().trim(); + while (tx.length() > 0 && tx.lastIndexOf('/') == tx.length() - 1) + { + tx = tx.substring(0, tx.length() - 1); + } + foo = new URL(tx); valid = true; + urltf.setText(tx); } catch (Exception e) { valid = false; JOptionPane.showInternalMessageDialog(Desktop.desktop, - "Invalid URL !"); + MessageManager.getString("label.invalid_url")); } } if (valid && resp == JOptionPane.OK_OPTION) @@ -283,12 +515,12 @@ public class WsPreferences extends GWsPreferences @Override protected void newWsUrl_actionPerformed(ActionEvent e) { - String url = editUrl(null, "Add new JWS2 URL"); + String url = editUrl(null, "Add new JABAWS URL"); if (url != null) { if (!wsUrls.contains(url)) { - int selind = wsList.getSelectedIndex(); + int selind = wsList.getSelectedRow(); if (selind > -1) { wsUrls.insertElementAt(url, selind); @@ -297,6 +529,7 @@ public class WsPreferences extends GWsPreferences { wsUrls.addElement(url); } + update++; updateList(); } } @@ -316,6 +549,8 @@ public class WsPreferences extends GWsPreferences public void run() { + // force a refresh. + lastrefresh = update - 1; updateWsMenuConfig(false); refreshWsMenu(true); } @@ -324,6 +559,8 @@ public class WsPreferences extends GWsPreferences } /** + * Refresh the web services menus - but only if there has been a change in the + * configuration (indicated by update!=lastrefresh) * * @param showProgress * show progress in dialog or on desktop @@ -340,8 +577,14 @@ public class WsPreferences extends GWsPreferences progressBar.setVisible(true); validate(); progressBar.setIndeterminate(true); - Desktop.instance.startServiceDiscovery(true); // wait around for all - // threads to complete + if (lastrefresh != update) + { + lastrefresh = update; + Desktop.instance.startServiceDiscovery(true); // wait around for all + // threads to complete + updateList(); + + } progressBar.setIndeterminate(false); progressBar.setVisible(false); validate(); @@ -359,15 +602,24 @@ public class WsPreferences extends GWsPreferences long ct = System.currentTimeMillis(); Desktop.instance.setProgressBar("Refreshing Web Service Menus", ct); - Desktop.instance.startServiceDiscovery(true); - Desktop.instance.setProgressBar("Refreshing Web Service Menus", - ct); + if (lastrefresh != update) + { + lastrefresh = update; + Desktop.instance.startServiceDiscovery(true); + updateList(); + } + Desktop.instance.setProgressBar(null, ct); } }).start(); } } + /** + * state counters for ensuring that updates only happen if config has changed. + */ + private long update = 0, lastrefresh = 0; + /* * (non-Javadoc) * @@ -379,8 +631,15 @@ public class WsPreferences extends GWsPreferences protected void resetWs_actionPerformed(ActionEvent e) { jalview.ws.jws2.Jws2Discoverer.setServiceUrls(null); - wsUrls = jalview.ws.jws2.Jws2Discoverer.getServiceUrls(); + Vector nwsUrls = jalview.ws.jws2.Jws2Discoverer.getServiceUrls(); + if (!wsUrls.equals(nwsUrls)) + { + update++; + } + wsUrls = nwsUrls; updateList(); + + updateAndRefreshWsMenuConfig(true); } protected void ok_ActionPerformed(ActionEvent e)