report any problematic web service URLs ( JAL-343 )
[jalview.git] / src / jalview / gui / Desktop.java
index 6228afb..2484ba8 100755 (executable)
@@ -25,6 +25,7 @@ import java.awt.*;
 import java.awt.datatransfer.*;
 import java.awt.dnd.*;
 import java.awt.event.*;
+import java.beans.PropertyChangeEvent;
 import java.beans.PropertyChangeListener;
 import java.io.BufferedInputStream;
 import java.io.BufferedOutputStream;
@@ -306,6 +307,20 @@ public class Desktop extends jalview.jbgui.GDesktop implements
         Cache.log.debug("Filechooser init thread finished.");
       }
     }).start();
+    // Add the service change listener
+    changeSupport.addJalviewPropertyChangeListener("services",
+            new PropertyChangeListener()
+            {
+
+              @Override
+              public void propertyChange(PropertyChangeEvent evt)
+              {
+                Cache.log.debug("Firing service changed event for "
+                        + evt.getNewValue());
+                JalviewServicesChanged(evt);
+              }
+
+            });
   }
 
   /**
@@ -2132,10 +2147,12 @@ public class Desktop extends jalview.jbgui.GDesktop implements
     }
     if (Cache.getDefault("SHOW_JWS2_SERVICES", true))
     {
-      if (jalview.ws.jws2.Jws2Discoverer.getDiscoverer().isRunning()) {
+      if (jalview.ws.jws2.Jws2Discoverer.getDiscoverer().isRunning())
+      {
         jalview.ws.jws2.Jws2Discoverer.getDiscoverer().setAborted(true);
       }
-      t2=jalview.ws.jws2.Jws2Discoverer.getDiscoverer().startDiscoverer(changeSupport);
+      t2 = jalview.ws.jws2.Jws2Discoverer.getDiscoverer().startDiscoverer(
+              changeSupport);
       
     }
     if (blocking)
@@ -2156,6 +2173,46 @@ public class Desktop extends jalview.jbgui.GDesktop implements
   }
 
   /**
+   * called to check if the service discovery process completed successfully.
+   * 
+   * @param evt
+   */
+  protected void JalviewServicesChanged(PropertyChangeEvent evt)
+  {
+    if (evt.getNewValue() instanceof Vector)
+    {
+      final String ermsg = jalview.ws.jws2.Jws2Discoverer.getDiscoverer()
+              .getErrorMessages();
+      if (ermsg != null)
+      {
+        if (serviceChangedDialog == null)
+        {
+          // only run if we aren't already displaying one of these.
+          javax.swing.SwingUtilities
+                  .invokeLater(serviceChangedDialog = new Runnable()
+                  {
+                    public void run()
+                    {
+
+                      JOptionPane
+                              .showInternalMessageDialog(
+                                      Desktop.desktop,
+                                      ermsg
+                                              + "\nPlease check the web services preferences.\n",
+                                      "Preferences Problem",
+                                      JOptionPane.WARNING_MESSAGE);
+                      serviceChangedDialog = null;
+
+                    }
+                  });
+        }
+      }
+    }
+  }
+
+  private Runnable serviceChangedDialog = null;
+
+  /**
    * start a thread to open a URL in the configured browser. Pops up a warning
    * dialog to the user if there is an exception when calling out to the browser
    * to open the URL.