JAL-1432 updated copyright notices
[jalview.git] / src / jalview / gui / WsPreferences.java
index b88f27e..2f040b2 100644 (file)
@@ -1,36 +1,44 @@
 /*
- * 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.0b1)
+ * 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 <http://www.gnu.org/licenses/>.
+ * The Jalview Authors are detailed in the 'AUTHORS' file.
  */
 package jalview.gui;
 
+import jalview.bin.Cache;
+import jalview.jbgui.GWsPreferences;
+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
 {
@@ -41,7 +49,7 @@ public class WsPreferences extends GWsPreferences
     initFromPreferences();
   }
 
-  Vector<String> wsUrls, oldUrls;
+  Vector<String> wsUrls, oldUrls, rsbsUrls, oldRsbsUrls;
 
   private boolean needWsMenuUpdate;
 
@@ -61,21 +69,31 @@ public class WsPreferences extends GWsPreferences
       oldUrls = null;
       wsUrls = new Vector<String>();
     }
+    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<String>(rsbsUrls);
+    }
+    else
+    {
+      oldRsbsUrls = null;
+      rsbsUrls = new Vector<String>();
+    }
+    updateRsbsList();
     enableEnfinServices.setSelected(oldEnfin = Cache.getDefault(
             "SHOW_ENFIN_SERVICES", true));
     enableEnfinServices.addActionListener(updateAction);
-    enableJws1Services.setSelected(oldJws1 = Cache.getDefault(
-            "SHOW_JWS1_SERVICES", true));
-    enableJws1Services.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));
@@ -94,7 +112,124 @@ public class WsPreferences extends GWsPreferences
 
   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()
@@ -102,6 +237,11 @@ public class WsPreferences extends GWsPreferences
     jalview.ws.jws2.Jws2Discoverer.setServiceUrls(wsUrls);
   }
 
+  private void updateRsbsServiceList()
+  {
+    jalview.ws.rest.RestClient.setRsbsServices(rsbsUrls);
+  }
+
   /*
    * (non-Javadoc)
    * 
@@ -112,7 +252,7 @@ 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);
@@ -130,10 +270,10 @@ 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);
@@ -155,15 +295,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)))
+      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
     {
@@ -175,10 +370,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());
@@ -190,9 +381,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());
+
+    Cache.setProperty(
+            "SHOW_WSDISCOVERY_ERRORS",
+            Boolean.valueOf(
+                    old ? oldWsWarning : displayWsWarning.isSelected())
+                    .toString());
     updateServiceList();
+    updateRsbsServiceList();
   }
 
   /*
@@ -205,14 +401,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++;
     }
   }
 
@@ -226,14 +423,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++;
     }
   }
 
@@ -263,9 +461,9 @@ public class WsPreferences extends GWsPreferences
         // TODO: do a better job of checking that the url is a valid discovery
         // URL for web services.
         String tx = urltf.getText().trim();
-        while (tx.length()>0 && tx.lastIndexOf('/')==tx.length()-1)
+        while (tx.length() > 0 && tx.lastIndexOf('/') == tx.length() - 1)
         {
-          tx = tx.substring(0, tx.length()-1);
+          tx = tx.substring(0, tx.length() - 1);
         }
         foo = new URL(tx);
         valid = true;
@@ -316,12 +514,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);
@@ -383,6 +581,8 @@ public class WsPreferences extends GWsPreferences
             lastrefresh = update;
             Desktop.instance.startServiceDiscovery(true); // wait around for all
                                                           // threads to complete
+            updateList();
+
           }
           progressBar.setIndeterminate(false);
           progressBar.setVisible(false);
@@ -405,6 +605,7 @@ public class WsPreferences extends GWsPreferences
           {
             lastrefresh = update;
             Desktop.instance.startServiceDiscovery(true);
+            updateList();
           }
           Desktop.instance.setProgressBar(null, ct);
         }
@@ -430,12 +631,13 @@ public class WsPreferences extends GWsPreferences
   {
     jalview.ws.jws2.Jws2Discoverer.setServiceUrls(null);
     Vector nwsUrls = jalview.ws.jws2.Jws2Discoverer.getServiceUrls();
-    if (!wsUrls.equals(nwsUrls)) {
+    if (!wsUrls.equals(nwsUrls))
+    {
       update++;
     }
-    wsUrls=nwsUrls;
+    wsUrls = nwsUrls;
     updateList();
-    
+
     updateAndRefreshWsMenuConfig(true);
   }