(JAL-975) ensure AACons is only run on protein sequences. (note - should really fix...
[jalview.git] / src / jalview / ws / EnfinEnvision2OneWay.java
index 3cb62c1..503245b 100644 (file)
@@ -1,6 +1,6 @@
 /*
- * Jalview - A Sequence Alignment Editor and Viewer (Version 2.5)
- * Copyright (C) 2010 J Procter, AM Waterhouse, G Barton, M Clamp, S Searle
+ * Jalview - A Sequence Alignment Editor and Viewer (Version 2.7)
+ * Copyright (C) 2011 J Procter, AM Waterhouse, J Engelhardt, LM Lui, G Barton, M Clamp, S Searle
  * 
  * This file is part of Jalview.
  * 
@@ -33,12 +33,21 @@ import java.awt.event.ActionEvent;
 import java.awt.event.ActionListener;
 import java.awt.event.ItemEvent;
 import java.awt.event.ItemListener;
+import java.io.BufferedOutputStream;
 import java.io.BufferedReader;
 import java.io.InputStreamReader;
+import java.io.OutputStreamWriter;
+import java.io.PrintWriter;
+import java.io.StringWriter;
+import java.io.UnsupportedEncodingException;
 import java.net.URL;
+import java.net.URLEncoder;
+import java.nio.charset.Charset;
+import java.nio.charset.CharsetEncoder;
 import java.util.Hashtable;
 import java.util.Map;
 import java.util.Vector;
+import java.util.regex.Pattern;
 
 import javax.swing.JMenu;
 import javax.swing.JMenuItem;
@@ -48,10 +57,15 @@ import javax.swing.event.MenuListener;
 import javax.xml.parsers.SAXParser;
 import javax.xml.parsers.SAXParserFactory;
 
+import org.apache.axis.utils.StringUtils;
+import org.apache.http.client.utils.URLEncodedUtils;
+import org.apache.http.entity.StringEntity;
 import org.xml.sax.Attributes;
 import org.xml.sax.SAXException;
 import org.xml.sax.helpers.DefaultHandler;
 
+import com.lowagie.text.html.HtmlEncoder;
+
 /**
  * Lightweight runnable to discover dynamic 'one way' group URL services
  * 
@@ -138,19 +152,31 @@ public class EnfinEnvision2OneWay extends DefaultHandler implements
       System.err.println("Adding entry for " + wfname + " " + description);
       if (wfname.toLowerCase().indexOf("funcnet") == -1)
       {
+        description = Pattern.compile("\\s+",Pattern.MULTILINE).matcher(description).replaceAll(" ");
         groupURLdescr.addElement(description);
         groupURLdescr.addElement(description);
+        String urlstub=wfname;
+        if (wfname.indexOf(" ")>-1)
+        {
+               // make the name safe!
+               try {
+                               urlstub = URLEncoder.encode(wfname,"utf-8");
+                       } catch (UnsupportedEncodingException e) {
+                               // TODO Auto-generated catch block
+                               e.printStackTrace();
+                       }
+        }
         groupURLLinks
                 .addElement(wfname
                         + "|"
                         + "http://www.ebi.ac.uk/enfin-srv/envision2/pages/linkin.jsf?tool=Jalview&workflow="
-                        + wfname
+                        + urlstub
                         + "&datasetName=JalviewSeqs$DATASETID$&input=$SEQUENCEIDS$&inputType=0|,"); // #"+description+"#");
         groupURLLinks
                 .addElement(wfname
                         + "|"
                         + "http://www.ebi.ac.uk/enfin-srv/envision2/pages/linkin.jsf?tool=Jalview&workflow="
-                        + wfname
+                        + urlstub
                         + "&datasetName=JalviewSeqs$DATASETID$&input=$SEQUENCES=/([A-Za-z]+)+/=$&inputType=1|,"); // #"+description+"#");
       }
     }
@@ -284,7 +310,8 @@ public class EnfinEnvision2OneWay extends DefaultHandler implements
    *          Object array returned from the makeUrlStubs function.
    */
   private void addshowLink(JMenu linkMenu, String label, String descr,
-          String dbname, final GroupUrlLink urlgenerator, final Object[] urlstub)
+          String dbname, final GroupUrlLink urlgenerator,
+          final Object[] urlstub)
   {
     Component[] jmi = linkMenu.getMenuComponents();
     for (int i = 0; i < jmi.length; i++)
@@ -296,20 +323,24 @@ public class EnfinEnvision2OneWay extends DefaultHandler implements
         return;
       }
     }
+    try {
+      descr = HtmlEncoder.encode(descr);
+    } catch (Exception e){};
+    
     boolean seqsorids = (urlgenerator.getGroupURLType() & urlgenerator.SEQUENCEIDS) == 0;
     int i = urlgenerator.getNumberInvolved(urlstub);
     JMenuItem item = new JMenuItem(label);
-    // 
-    if (dbname==null || dbname.trim().length()==0)
+    //
+    if (dbname == null || dbname.trim().length() == 0)
     {
       dbname = "";
     }
     item.setToolTipText("<html>"
-            + JvSwingUtils.wrapTooltip("Submit " + i + " " +
-                    dbname +" "
-                    + (seqsorids ? "sequence" : "sequence id") + (i > 1 ? "s" : "")
-                    
-            + " to<br/>" + descr) + "</html>");
+            + JvSwingUtils.wrapTooltip("Submit " + i + " " + dbname + " "
+                    + (seqsorids ? "sequence" : "sequence id")
+                    + (i > 1 ? "s" : "")
+
+                    + " to<br/>" + descr) + "</html>");
     item.addActionListener(new java.awt.event.ActionListener()
     {
       public void actionPerformed(ActionEvent e)
@@ -319,7 +350,8 @@ public class EnfinEnvision2OneWay extends DefaultHandler implements
 
           public void run()
           {
-            try {
+            try
+            {
               showLink(urlgenerator.constructFrom(urlstub));
             } catch (UrlStringTooLongException ex)
             {
@@ -404,7 +436,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
@@ -475,11 +508,12 @@ public class EnfinEnvision2OneWay extends DefaultHandler implements
     /**
      * last number of sequences where URL generation failed
      */
-    int[] nsqtype = new int[] { 0,0,0,0,0,0,0,0,0,0};
+    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);
@@ -526,7 +560,8 @@ 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()])
+          if (nsqtype[urlLink.getGroupURLType()] > 0
+                  && numinput >= nsqtype[urlLink.getGroupURLType()])
           {
             continue;
           }
@@ -538,8 +573,10 @@ public class EnfinEnvision2OneWay extends DefaultHandler implements
               seqstr[idcount++] = idandseqs[1][sq];
             }
           }
-          try {createAndAddLinks(wflinkMenus, false, urlLink, ltarget, null,
-                  descr, ids, seqstr);
+          try
+          {
+            createAndAddLinks(wflinkMenus, false, urlLink, ltarget, null,
+                    descr, ids, seqstr);
           } catch (UrlStringTooLongException ex)
           {
             nsqtype[urlLink.getGroupURLType()] = numinput;
@@ -549,14 +586,17 @@ public class EnfinEnvision2OneWay extends DefaultHandler implements
       // also do names only.
       seqstr = idandseqs[1];
       ids = idandseqs[0];
-      if (nsqtype[urlLink.getGroupURLType()]>0 && idandseqs[0].length>=nsqtype[urlLink.getGroupURLType()])
+      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)
+
+      try
+      {
+        createAndAddLinks(wflinkMenus, true, urlLink, "Any", null, descr,
+                ids, seqstr);
+      } catch (UrlStringTooLongException ex)
       {
         nsqtype[urlLink.getGroupURLType()] = idandseqs[0].length;
       }
@@ -589,7 +629,7 @@ public class EnfinEnvision2OneWay extends DefaultHandler implements
           GroupUrlLink urlLink, String label, String ltarget, String descr,
           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)
@@ -614,6 +654,7 @@ public class EnfinEnvision2OneWay extends DefaultHandler implements
     }
     return false;
   }
+
   // / end of stuff copied from popupmenu
   public void attachWSMenuEntry(final JMenu wsmenu,
           final AlignFrame alignFrame)
@@ -640,21 +681,24 @@ public class EnfinEnvision2OneWay extends DefaultHandler implements
 
       public void menuSelected(MenuEvent e)
       {
-        if (refresh)
+        if (refresh && !isRunning())
         {
-          new Thread(new Runnable() {
-            public void run() {
-          try
+          new Thread(new Runnable()
           {
-            buildGroupLinkMenu(enfinServiceMenu, alignFrame);
-          } catch (OutOfMemoryError ex)
-          {
-            Cache.log.error(
-                    "Out of memory when calculating the Envision2 links.",
-                    ex);
-            enfinServiceMenu.setEnabled(false);
-          }
-            }}).start();
+            public void run()
+            {
+              try
+              {
+                buildGroupLinkMenu(enfinServiceMenu, alignFrame);
+              } catch (OutOfMemoryError ex)
+              {
+                Cache.log
+                        .error("Out of memory when calculating the Envision2 links.",
+                                ex);
+                enfinServiceMenu.setEnabled(false);
+              }
+            }
+          }).start();
           refresh = false;
         }
       }