JAL-1503 update version in GPL header
[jalview.git] / src / jalview / ws / EnfinEnvision2OneWay.java
index f40831c..edc7fb7 100644 (file)
@@ -1,19 +1,20 @@
 /*
- * 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 <http://www.gnu.org/licenses/>.
+ * The Jalview Authors are detailed in the 'AUTHORS' file.
  */
 package jalview.ws;
 
@@ -30,15 +31,13 @@ import jalview.util.GroupUrlLink.UrlStringTooLongException;
 import java.awt.Component;
 import java.awt.Cursor;
 import java.awt.event.ActionEvent;
-import java.awt.event.ActionListener;
-import java.awt.event.ItemEvent;
-import java.awt.event.ItemListener;
-import java.io.BufferedReader;
-import java.io.InputStreamReader;
+import java.io.UnsupportedEncodingException;
 import java.net.URL;
+import java.net.URLEncoder;
 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;
@@ -52,10 +51,14 @@ 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
  * 
+ * as of Jalview 2.8.1 this class is mothballed and will be dropped in v3.
  * @author JimP
+ * @deprecated
  * 
  */
 public class EnfinEnvision2OneWay extends DefaultHandler implements
@@ -138,19 +141,34 @@ 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 +302,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 +315,28 @@ 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 +346,8 @@ public class EnfinEnvision2OneWay extends DefaultHandler implements
 
           public void run()
           {
-            try {
+            try
+            {
               showLink(urlgenerator.constructFrom(urlstub));
             } catch (UrlStringTooLongException ex)
             {
@@ -404,7 +432,7 @@ public class EnfinEnvision2OneWay extends DefaultHandler implements
    */
   private JMenu buildGroupURLMenu(SequenceI[] seqs, SequenceGroup sg)
   {
-    if (groupURLdescr==null || groupURLLinks==null)
+    if (groupURLdescr == null || groupURLLinks == null)
       return null;
     // TODO: usability: thread off the generation of group url content so root
     // menu appears asap
@@ -476,7 +504,8 @@ 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 = (String) groupURLLinks.elementAt(i);
@@ -527,7 +556,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;
           }
@@ -539,8 +569,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;
@@ -550,14 +582,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;
       }
@@ -590,7 +625,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)
@@ -615,6 +650,7 @@ public class EnfinEnvision2OneWay extends DefaultHandler implements
     }
     return false;
   }
+
   // / end of stuff copied from popupmenu
   public void attachWSMenuEntry(final JMenu wsmenu,
           final AlignFrame alignFrame)
@@ -643,19 +679,22 @@ public class EnfinEnvision2OneWay extends DefaultHandler implements
       {
         if (refresh && !isRunning())
         {
-          new Thread(new Runnable() {
-            public void run() {
-          try
-          {
-            buildGroupLinkMenu(enfinServiceMenu, alignFrame);
-          } catch (OutOfMemoryError ex)
+          new Thread(new Runnable()
           {
-            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;
         }
       }