Formatted source
[jalview.git] / src / jalview / io / WSWUBlastClient.java
index f8d74bf..29a0900 100755 (executable)
+/*\r
+* Jalview - A Sequence Alignment Editor and Viewer\r
+* Copyright (C) 2005 AM Waterhouse, J Procter, G Barton, M Clamp, S Searle\r
+*\r
+* This program is free software; you can redistribute it and/or\r
+* modify it under the terms of the GNU General Public License\r
+* as published by the Free Software Foundation; either version 2\r
+* of the License, or (at your option) any later version.\r
+*\r
+* This program is distributed in the hope that it will be useful,\r
+* but WITHOUT ANY WARRANTY; without even the implied warranty of\r
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
+* GNU General Public License for more details.\r
+*\r
+* You should have received a copy of the GNU General Public License\r
+* along with this program; if not, write to the Free Software\r
+* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA\r
+*/\r
 package jalview.io;\r
 \r
-import org.apache.axis.client.*;\r
-import javax.xml.namespace.QName;\r
-import java.util.*;\r
 import jalview.datamodel.*;\r
+\r
 import jalview.gui.*;\r
-import javax.swing.*;\r
-import java.util.*;\r
+\r
+import org.apache.axis.client.*;\r
+\r
 import java.awt.*;\r
 \r
-public class WSWUBlastClient\r
-{\r
-  CutAndPasteTransfer output = new CutAndPasteTransfer();\r
-  int jobsRunning = 0;\r
-\r
-  public WSWUBlastClient(AlignmentI al, ArrayList ids)\r
-  {\r
-    output.setText("To display sequence features an exact Uniprot id with 100% sequence identity match must be entered."\r
-                +"\nIn order to display these features, try changing the names of your sequences to the ids suggested below.");\r
-    Desktop.addInternalFrame(output, "BLASTing for unidentified sequences ", 800,300);\r
-\r
-    for(int i=0; i<ids.size(); i++)\r
-    {\r
-     SequenceI sequence =  al.findName( ids.get(i).toString() );\r
-     StringBuffer nonGapped = new StringBuffer();\r
-      for (int n = 0; n < sequence.getSequence().length(); n++)\r
-      {\r
-        if (!jalview.util.Comparison.isGap(sequence.getCharAt(n)))\r
-          nonGapped.append(sequence.getCharAt(n));\r
-      }\r
-\r
-     BlastThread thread = new BlastThread(ids.get(i).toString(),  nonGapped.toString());\r
-     thread.start();\r
-     jobsRunning ++;\r
-     }\r
-     ImageTwirler thread = new ImageTwirler();\r
-     thread.start();\r
-  }\r
-\r
-  class ImageTwirler extends Thread\r
-  {\r
-    ImageIcon [] imageIcon;\r
-    int imageIndex = 0;\r
-    public ImageTwirler()\r
-    {\r
-      imageIcon = new ImageIcon[9];\r
-      for(int i=0; i<9; i++)\r
-      {\r
-        java.net.URL url = getClass().getResource("/images/dna" + (i+1) + ".gif");\r
-        if (url != null)\r
-          imageIcon[i] = new ImageIcon(url);\r
-      }\r
-    }\r
+import java.util.*;\r
 \r
-    public void run()\r
-    {\r
-      while(jobsRunning>0)\r
-      {\r
-        try{\r
-          Thread.sleep(100);\r
-          imageIndex++;\r
-          imageIndex %=9;\r
-          output.setFrameIcon( imageIcon[imageIndex]);\r
-          output.setTitle("BLASTing for unidentified sequences - "+jobsRunning+" jobs running.");\r
+import javax.swing.*;\r
 \r
-        }catch(Exception ex){}\r
+import javax.xml.namespace.QName;\r
 \r
-      }\r
-    }\r
-  }\r
 \r
+public class WSWUBlastClient {\r
+    CutAndPasteTransfer output = new CutAndPasteTransfer();\r
+    int jobsRunning = 0;\r
+\r
+    public WSWUBlastClient(AlignmentI al, ArrayList ids) {\r
+        output.setText(\r
+            "To display sequence features an exact Uniprot id with 100% sequence identity match must be entered." +\r
+            "\nIn order to display these features, try changing the names of your sequences to the ids suggested below.");\r
+        Desktop.addInternalFrame(output,\r
+            "BLASTing for unidentified sequences ", 800, 300);\r
 \r
+        for (int i = 0; i < ids.size(); i++) {\r
+            SequenceI sequence = al.findName(ids.get(i).toString());\r
+            StringBuffer nonGapped = new StringBuffer();\r
 \r
+            for (int n = 0; n < sequence.getSequence().length(); n++) {\r
+                if (!jalview.util.Comparison.isGap(sequence.getCharAt(n))) {\r
+                    nonGapped.append(sequence.getCharAt(n));\r
+                }\r
+            }\r
 \r
-  class BlastThread extends Thread\r
-  {\r
-    String sequence;\r
-    String seqid;\r
-    String jobid;\r
-    boolean jobComplete = false;\r
+            BlastThread thread = new BlastThread(ids.get(i).toString(),\r
+                    nonGapped.toString());\r
+            thread.start();\r
+            jobsRunning++;\r
+        }\r
 \r
-    BlastThread(String id, String sequence)\r
-    {\r
-      this.sequence = sequence;\r
-      seqid = id;\r
+        ImageTwirler thread = new ImageTwirler();\r
+        thread.start();\r
     }\r
 \r
-    public void run()\r
-    {\r
-      StartJob();\r
-\r
-      while (!jobComplete)\r
-      {\r
-        try\r
-        {\r
-          Call call = (Call)new Service().createCall();\r
-          call.setTargetEndpointAddress(new java.net.URL(\r
-              "http://www.ebi.ac.uk/cgi-bin/webservices/WSWUBlast"));\r
-          call.setOperationName(new QName("WSWUBlast", "polljob"));\r
-          String result = (String) call.invoke(new Object[]\r
-                                               {jobid, "xml"});\r
-          if(result.indexOf("JOB PENDING")==-1 && result.indexOf("JOB RUNNING")==-1)\r
-          {\r
-                parseResult(seqid, result);\r
-                jobComplete = true;\r
-                jobsRunning --;\r
-          }\r
-          Thread.sleep(5000);\r
-          // System.out.println("WSWuBlastClient: I'm alive "+seqid+" "+jobid); // log.debug\r
+    void parseResult(String id1, String res) {\r
+        StringTokenizer st = new StringTokenizer(res, "\n");\r
+        String data;\r
+        String id2;\r
+        int maxFound = 90;\r
+        StringBuffer buffer = new StringBuffer("\n\n" + id1 + " :");\r
+\r
+        while (st.hasMoreTokens()) {\r
+            data = st.nextToken();\r
+\r
+            if (data.indexOf("database=\"uniprot\" id=") > -1) {\r
+                int index = data.indexOf("database=\"uniprot\" id=") + 23;\r
+                id2 = data.substring(index, data.indexOf("\"", index));\r
+\r
+                while (data.indexOf("</alignment>") == -1) {\r
+                    data = st.nextToken();\r
+\r
+                    if (data.indexOf("<identity>") > -1) {\r
+                        int value = Integer.parseInt(data.substring(data.indexOf(\r
+                                        "<identity>") + 10,\r
+                                    data.indexOf("</identity>")));\r
+\r
+                        if (value >= maxFound) {\r
+                            maxFound = value;\r
+                            buffer.append(" " + id2 + " " + value + "%; ");\r
+                        }\r
+                    }\r
+                }\r
+            }\r
         }\r
-        catch (Exception ex)\r
-        {}\r
-      }\r
-    }\r
 \r
-    void StartJob()\r
-    {\r
-      HashMap params = new HashMap();\r
-      params.put("database", "uniprot");\r
-      params.put("sensitivity", "low");\r
-      params.put("sort", "totalscore");\r
-      params.put("matrix", "pam10");\r
-      params.put("program", "blastp");\r
-      params.put("alignments", "5");\r
-      params.put("outformat", "xml");\r
-      params.put("searchtype", "1");\r
-      byte[] seqbytes = sequence.getBytes();\r
-\r
-      try\r
-      {\r
-        Call call = (Call)new Service().createCall();\r
-        call.setTargetEndpointAddress(new java.net.URL(\r
-            "http://www.ebi.ac.uk/cgi-bin/webservices/WSWUBlast"));\r
-        call.setOperationName(new QName("WSWUBlast", "doWUBlast"));\r
-        String result = (String) call.invoke(new Object[]\r
-                                             {params, seqbytes});\r
-        jobid = result;\r
-        System.out.println("http://www.ebi.ac.uk/cgi-bin/webservices/WSWUBlast JobId '"+jobid+"'");\r
-\r
-      }\r
-      catch (Exception exp)\r
-      {\r
-        System.err.println("WSWUBlastClient error:\n" + exp.toString());\r
-        exp.printStackTrace();\r
-      }\r
+        output.setText(output.getText() + buffer.toString());\r
     }\r
-  }\r
-\r
-    void parseResult(String id1, String res)\r
-    {\r
-      StringTokenizer st = new StringTokenizer(res, "\n");\r
-      String data;\r
-      String id2;\r
-      int maxFound = 90;\r
-      StringBuffer buffer = new StringBuffer("\n\n"+id1+" :");\r
-\r
-      while( st.hasMoreTokens() )\r
-      {\r
-        data = st.nextToken();\r
-\r
-        if(data.indexOf("database=\"uniprot\" id=")>-1)\r
-        {\r
-          int index =  data.indexOf("database=\"uniprot\" id=")+ 23;\r
-          id2 = data.substring( index, data.indexOf("\"", index) );\r
-          while( data.indexOf("</alignment>")==-1)\r
-          {\r
-            data = st.nextToken();\r
-            if(data.indexOf("<identity>")>-1)\r
-            {\r
-              int value = Integer.parseInt( data.substring(data.indexOf("<identity>")+10, data.indexOf("</identity>")));\r
-              if(value>=maxFound)\r
-              {\r
-                maxFound = value;\r
-                buffer.append(" "+ id2 + " " + value+"%; ");\r
-              }\r
+\r
+    class ImageTwirler extends Thread {\r
+        ImageIcon[] imageIcon;\r
+        int imageIndex = 0;\r
+\r
+        public ImageTwirler() {\r
+            imageIcon = new ImageIcon[9];\r
+\r
+            for (int i = 0; i < 9; i++) {\r
+                java.net.URL url = getClass().getResource("/images/dna" +\r
+                        (i + 1) + ".gif");\r
+\r
+                if (url != null) {\r
+                    imageIcon[i] = new ImageIcon(url);\r
+                }\r
             }\r
-          }\r
+        }\r
+\r
+        public void run() {\r
+            while (jobsRunning > 0) {\r
+                try {\r
+                    Thread.sleep(100);\r
+                    imageIndex++;\r
+                    imageIndex %= 9;\r
+                    output.setFrameIcon(imageIcon[imageIndex]);\r
+                    output.setTitle("BLASTing for unidentified sequences - " +\r
+                        jobsRunning + " jobs running.");\r
+                } catch (Exception ex) {\r
+                }\r
+            }\r
+        }\r
+    }\r
+\r
+    class BlastThread extends Thread {\r
+        String sequence;\r
+        String seqid;\r
+        String jobid;\r
+        boolean jobComplete = false;\r
 \r
+        BlastThread(String id, String sequence) {\r
+            this.sequence = sequence;\r
+            seqid = id;\r
         }\r
 \r
+        public void run() {\r
+            StartJob();\r
 \r
-      }\r
+            while (!jobComplete) {\r
+                try {\r
+                    Call call = (Call) new Service().createCall();\r
+                    call.setTargetEndpointAddress(new java.net.URL(\r
+                            "http://www.ebi.ac.uk/cgi-bin/webservices/WSWUBlast"));\r
+                    call.setOperationName(new QName("WSWUBlast", "polljob"));\r
 \r
-      output.setText(output.getText()+buffer.toString());\r
-    }\r
+                    String result = (String) call.invoke(new Object[] {\r
+                                jobid, "xml"\r
+                            });\r
 \r
+                    if ((result.indexOf("JOB PENDING") == -1) &&\r
+                            (result.indexOf("JOB RUNNING") == -1)) {\r
+                        parseResult(seqid, result);\r
+                        jobComplete = true;\r
+                        jobsRunning--;\r
+                    }\r
+\r
+                    Thread.sleep(5000);\r
+\r
+                    // System.out.println("WSWuBlastClient: I'm alive "+seqid+" "+jobid); // log.debug\r
+                } catch (Exception ex) {\r
+                }\r
+            }\r
+        }\r
+\r
+        void StartJob() {\r
+            HashMap params = new HashMap();\r
+            params.put("database", "uniprot");\r
+            params.put("sensitivity", "low");\r
+            params.put("sort", "totalscore");\r
+            params.put("matrix", "pam10");\r
+            params.put("program", "blastp");\r
+            params.put("alignments", "5");\r
+            params.put("outformat", "xml");\r
+            params.put("searchtype", "1");\r
+\r
+            byte[] seqbytes = sequence.getBytes();\r
+\r
+            try {\r
+                Call call = (Call) new Service().createCall();\r
+                call.setTargetEndpointAddress(new java.net.URL(\r
+                        "http://www.ebi.ac.uk/cgi-bin/webservices/WSWUBlast"));\r
+                call.setOperationName(new QName("WSWUBlast", "doWUBlast"));\r
+\r
+                String result = (String) call.invoke(new Object[] {\r
+                            params, seqbytes\r
+                        });\r
+                jobid = result;\r
+                System.out.println(\r
+                    "http://www.ebi.ac.uk/cgi-bin/webservices/WSWUBlast JobId '" +\r
+                    jobid + "'");\r
+            } catch (Exception exp) {\r
+                System.err.println("WSWUBlastClient error:\n" + exp.toString());\r
+                exp.printStackTrace();\r
+            }\r
+        }\r
+    }\r
 }\r