Jalview 2.6 source licence
[jalview.git] / src / jalview / ws / EnfinEnvision2OneWay.java
index ae2792c..f40831c 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Jalview - A Sequence Alignment Editor and Viewer (Version 2.5)
+ * Jalview - A Sequence Alignment Editor and Viewer (Version 2.6)
  * Copyright (C) 2010 J Procter, AM Waterhouse, G Barton, M Clamp, S Searle
  * 
  * This file is part of Jalview.
@@ -25,6 +25,7 @@ import jalview.gui.AlignFrame;
 import jalview.gui.Desktop;
 import jalview.gui.JvSwingUtils;
 import jalview.util.GroupUrlLink;
+import jalview.util.GroupUrlLink.UrlStringTooLongException;
 
 import java.awt.Component;
 import java.awt.Cursor;
@@ -318,7 +319,12 @@ public class EnfinEnvision2OneWay extends DefaultHandler implements
 
           public void run()
           {
-            showLink(urlgenerator.constructFrom(urlstub));
+            try {
+              showLink(urlgenerator.constructFrom(urlstub));
+            } catch (UrlStringTooLongException ex)
+            {
+              Cache.log.warn("Not showing link: URL is too long!", ex);
+            }
           }
 
         }).start();
@@ -360,6 +366,10 @@ public class EnfinEnvision2OneWay extends DefaultHandler implements
   private void buildGroupLinkMenu(JMenu enfinServiceMenu,
           AlignFrame alignFrame)
   {
+    if (running || !started)
+    {
+      return;
+    }
     SequenceI[] seqs = alignFrame.getViewport().getSelectionAsNewSequence();
     SequenceGroup sg = alignFrame.getViewport().getSelectionGroup();
     if (sg == null)
@@ -394,7 +404,8 @@ public class EnfinEnvision2OneWay extends DefaultHandler implements
    */
   private JMenu buildGroupURLMenu(SequenceI[] seqs, SequenceGroup sg)
   {
-
+    if (groupURLdescr==null || groupURLLinks==null)
+      return null;
     // TODO: usability: thread off the generation of group url content so root
     // menu appears asap
     // sequence only URLs
@@ -462,10 +473,14 @@ public class EnfinEnvision2OneWay extends DefaultHandler implements
     }
     // now create group links for all distinct ID/sequence sets.
     Hashtable<String, JMenu[]> gurlMenus = new Hashtable<String, JMenu[]>();
+    /**
+     * last number of sequences where URL generation failed
+     */
+    int[] nsqtype = new int[] { 0,0,0,0,0,0,0,0,0,0};
     for (int i = 0; i < groupURLLinks.size(); i++)
     {
-      String link = groupURLLinks.elementAt(i).toString();
-      String descr = groupURLdescr.elementAt(i).toString();
+      String link = (String) groupURLLinks.elementAt(i);
+      String descr = (String) groupURLdescr.elementAt(i);
 
       // boolean specialCase =
       // additionalPar.elementAt(i).toString().equals(BACKGROUND);
@@ -512,6 +527,10 @@ public class EnfinEnvision2OneWay extends DefaultHandler implements
           String[] allids = ((String[]) idset[1]);
           seqstr = new String[numinput];
           ids = new String[numinput];
+          if (nsqtype[urlLink.getGroupURLType()]>0 && numinput>=nsqtype[urlLink.getGroupURLType()])
+          {
+            continue;
+          }
           for (int sq = 0, idcount = 0; sq < seqs.length; sq++)
           {
             if (allids[sq] != null)
@@ -520,15 +539,28 @@ public class EnfinEnvision2OneWay extends DefaultHandler implements
               seqstr[idcount++] = idandseqs[1][sq];
             }
           }
-          createAndAddLinks(wflinkMenus, false, urlLink, ltarget, null,
+          try {createAndAddLinks(wflinkMenus, false, urlLink, ltarget, null,
                   descr, ids, seqstr);
+          } catch (UrlStringTooLongException ex)
+          {
+            nsqtype[urlLink.getGroupURLType()] = numinput;
+          }
         }
       }
       // also do names only.
       seqstr = idandseqs[1];
       ids = idandseqs[0];
-      createAndAddLinks(wflinkMenus, true, urlLink, "Any", null, descr,
+      if (nsqtype[urlLink.getGroupURLType()]>0 && idandseqs[0].length>=nsqtype[urlLink.getGroupURLType()])
+      {
+        continue;
+      }
+      
+      try {createAndAddLinks(wflinkMenus, true, urlLink, "Any", null, descr,
               ids, seqstr);
+      }catch (UrlStringTooLongException ex)
+      {
+        nsqtype[urlLink.getGroupURLType()] = idandseqs[0].length;
+      }
     }
     boolean anyadded = false; // indicates if there are any group links to give
     // to user
@@ -556,10 +588,11 @@ public class EnfinEnvision2OneWay extends DefaultHandler implements
 
   private boolean createAndAddLinks(JMenu[] linkMenus, boolean usingNames,
           GroupUrlLink urlLink, String label, String ltarget, String descr,
-          String[] ids, String[] seqstr)
+          String[] ids, String[] seqstr) throws UrlStringTooLongException
   {
-    Object[] urlset = urlLink.makeUrlStubs(ids, seqstr, "FromJalview"
+    Object[] urlset= urlLink.makeUrlStubs(ids, seqstr, "FromJalview"
             + System.currentTimeMillis(), false);
+
     if (urlset != null)
     {
       int type = urlLink.getGroupURLType() & 3;
@@ -582,7 +615,6 @@ public class EnfinEnvision2OneWay extends DefaultHandler implements
     }
     return false;
   }
-
   // / end of stuff copied from popupmenu
   public void attachWSMenuEntry(final JMenu wsmenu,
           final AlignFrame alignFrame)
@@ -609,8 +641,10 @@ public class EnfinEnvision2OneWay extends DefaultHandler implements
 
       public void menuSelected(MenuEvent e)
       {
-        if (refresh)
+        if (refresh && !isRunning())
         {
+          new Thread(new Runnable() {
+            public void run() {
           try
           {
             buildGroupLinkMenu(enfinServiceMenu, alignFrame);
@@ -621,6 +655,7 @@ public class EnfinEnvision2OneWay extends DefaultHandler implements
                     ex);
             enfinServiceMenu.setEnabled(false);
           }
+            }}).start();
           refresh = false;
         }
       }