correct construction of new dataset sequence when residues are deleted
[jalview.git] / src / jalview / io / DBRefFetcher.java
index d26ef6d..6d589f9 100644 (file)
@@ -1,37 +1,31 @@
 /*\r
-* Jalview - A Sequence Alignment Editor and Viewer\r
-* Copyright (C) 2006 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
+ * Jalview - A Sequence Alignment Editor and Viewer\r
+ * Copyright (C) 2007 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 jalview.datamodel.*;\r
-\r
-import jalview.gui.*;\r
-\r
 import java.io.*;\r
-\r
 import java.util.*;\r
 \r
-import org.exolab.castor.mapping.Mapping;\r
-\r
+import org.exolab.castor.mapping.*;\r
 import org.exolab.castor.xml.*;\r
-import jalview.analysis.AlignSeq;\r
-\r
-\r
+import jalview.analysis.*;\r
+import jalview.datamodel.*;\r
+import jalview.gui.*;\r
 \r
 /**\r
  * DOCUMENT ME!\r
@@ -39,9 +33,10 @@ import jalview.analysis.AlignSeq;
  * @author $author$\r
  * @version $Revision$\r
  */\r
-public class DBRefFetcher implements Runnable\r
+public class DBRefFetcher\r
+    implements Runnable\r
 {\r
-  AlignmentI dataset;\r
+  SequenceI [] dataset;\r
   AlignFrame af;\r
   CutAndPasteTransfer output = new CutAndPasteTransfer();\r
   StringBuffer sbuffer = new StringBuffer();\r
@@ -60,7 +55,7 @@ public class DBRefFetcher implements Runnable
     try\r
     {\r
       // 1. Load the mapping information from the file\r
-      Mapping map = new Mapping(uni.getClass().getClassLoader());\r
+      org.exolab.castor.mapping.Mapping map = new org.exolab.castor.mapping.Mapping(uni.getClass().getClassLoader());\r
       java.net.URL url = getClass().getResource("/uniprot_mapping.xml");\r
       map.loadMapping(url);\r
 \r
@@ -73,10 +68,9 @@ public class DBRefFetcher implements Runnable
     }\r
     catch (Exception e)\r
     {\r
-      System.out.println("Error getUniprotEntries() "+e);\r
+      System.out.println("Error getUniprotEntries() " + e);\r
     }\r
 \r
-\r
     return uni.getUniprotEntries();\r
   }\r
 \r
@@ -86,10 +80,18 @@ public class DBRefFetcher implements Runnable
    * @param align DOCUMENT ME!\r
    * @param ap DOCUMENT ME!\r
    */\r
-  public DBRefFetcher(AlignmentI align, AlignFrame af)\r
+  public DBRefFetcher(SequenceI [] seqs, AlignFrame af)\r
   {\r
     this.af = af;\r
-    this.dataset = align.getDataset();\r
+    SequenceI [] ds = new SequenceI[seqs.length];\r
+    for (int i = 0; i < seqs.length; i++)\r
+    {\r
+      if(seqs[i].getDatasetSequence()!=null)\r
+        ds[i] = seqs[i].getDatasetSequence();\r
+      else\r
+        ds[i] = seqs[i];\r
+    }\r
+    this.dataset = ds;\r
   }\r
 \r
   public boolean fetchDBRefs(boolean waitTillFinished)\r
@@ -98,13 +100,16 @@ public class DBRefFetcher implements Runnable
     thread.start();\r
     running = true;\r
 \r
-    if(waitTillFinished)\r
+    if (waitTillFinished)\r
     {\r
-      while(running)\r
+      while (running)\r
       {\r
-        try{\r
+        try\r
+        {\r
           Thread.sleep(500);\r
-        }catch(Exception ex){}\r
+        }\r
+        catch (Exception ex)\r
+        {}\r
       }\r
     }\r
 \r
@@ -122,15 +127,15 @@ public class DBRefFetcher implements Runnable
     key = key.toUpperCase();\r
 \r
     Vector seqs;\r
-    if(seqRefs.containsKey(key))\r
+    if (seqRefs.containsKey(key))\r
     {\r
-      seqs = (Vector)seqRefs.get(key);\r
+      seqs = (Vector) seqRefs.get(key);\r
 \r
-      if(seqs!=null && !seqs.contains(seq))\r
+      if (seqs != null && !seqs.contains(seq))\r
       {\r
         seqs.addElement(seq);\r
       }\r
-      else if(seqs==null)\r
+      else if (seqs == null)\r
       {\r
         seqs = new Vector();\r
         seqs.addElement(seq);\r
@@ -146,7 +151,6 @@ public class DBRefFetcher implements Runnable
     seqRefs.put(key, seqs);\r
   }\r
 \r
-\r
   /**\r
    * DOCUMENT ME!\r
    */\r
@@ -161,45 +165,48 @@ public class DBRefFetcher implements Runnable
     try\r
     {\r
       int seqIndex = 0;\r
-      Vector sequences = dataset.getSequences();\r
 \r
-      while (seqIndex < sequences.size())\r
+      while (seqIndex < dataset.length)\r
       {\r
         StringBuffer queryString = new StringBuffer("uniprot:");\r
 \r
-        for (int i = 0; (seqIndex < sequences.size()) && (i < 50);\r
+        for (int i = 0; (seqIndex < dataset.length) && (i < 50);\r
              seqIndex++, i++)\r
         {\r
-          Sequence sequence = (Sequence) sequences.get(seqIndex);\r
-          DBRefEntry [] uprefs = jalview.util.DBRefUtils.selectRefs(sequence.getDBRef(), new String[] {\r
+          SequenceI sequence = dataset[seqIndex];\r
+          DBRefEntry[] uprefs = jalview.util.DBRefUtils.selectRefs(sequence.\r
+              getDBRef(), new String[]\r
+              {\r
               jalview.datamodel.DBRefSource.UNIPROT});\r
-          if (uprefs!=null)\r
+          if (uprefs != null)\r
           {\r
-            if(uprefs.length+i>50)\r
+            if (uprefs.length + i > 50)\r
+            {\r
               break;\r
+            }\r
 \r
-            for(int j=0; j<uprefs.length; j++)\r
+            for (int j = 0; j < uprefs.length; j++)\r
             {\r
               addSeqId(sequence, uprefs[j].getAccessionId());\r
-              queryString.append(uprefs[i].getAccessionId()+";");\r
+              queryString.append(uprefs[j].getAccessionId() + ";");\r
             }\r
           }\r
           else\r
           {\r
             StringTokenizer st = new StringTokenizer(sequence.getName(), "|");\r
-            if(st.countTokens()+i>50)\r
+            if (st.countTokens() + i > 50)\r
             {\r
               //Dont send more than 50 id strings to dbFetch!!\r
-              seqIndex --;\r
+              seqIndex--;\r
             }\r
             else\r
             {\r
-                while(st.hasMoreTokens())\r
-                {\r
-                  String token = st.nextToken();\r
-                  addSeqId(sequence, token);\r
-                  queryString.append(token+";");\r
-                }\r
+              while (st.hasMoreTokens())\r
+              {\r
+                String token = st.nextToken();\r
+                addSeqId(sequence, token);\r
+                queryString.append(token + ";");\r
+              }\r
             }\r
           }\r
         }\r
@@ -233,13 +240,12 @@ public class DBRefFetcher implements Runnable
     }\r
 \r
     af.setProgressBar("DBRef search completed", startTime);\r
-   // promptBeforeBlast();\r
+    // promptBeforeBlast();\r
 \r
-   running = false;\r
+    running = false;\r
 \r
   }\r
 \r
-\r
   /**\r
    * DOCUMENT ME!\r
    *\r
@@ -250,7 +256,9 @@ public class DBRefFetcher implements Runnable
   void ReadUniprotFile(File file)\r
   {\r
     if (!file.exists())\r
+    {\r
       return;\r
+    }\r
 \r
     SequenceI sequence = null;\r
 \r
@@ -275,7 +283,9 @@ public class DBRefFetcher implements Runnable
           {\r
             sequence = (SequenceI) seqs.elementAt(jj);\r
             if (!sequenceMatches.contains(sequence))\r
+            {\r
               sequenceMatches.addElement(sequence);\r
+            }\r
           }\r
         }\r
       }\r
@@ -289,7 +299,9 @@ public class DBRefFetcher implements Runnable
           {\r
             sequence = (SequenceI) seqs.elementAt(jj);\r
             if (!sequenceMatches.contains(sequence))\r
+            {\r
               sequenceMatches.addElement(sequence);\r
+            }\r
           }\r
         }\r
       }\r
@@ -305,7 +317,8 @@ public class DBRefFetcher implements Runnable
         System.out.println("Adding dbref to " + sequence.getName() + " : " +\r
                            entry.getAccession().elementAt(0).toString());\r
 \r
-        String nonGapped = AlignSeq.extractGaps("-. ", sequence.getSequence()).\r
+        String nonGapped = AlignSeq.extractGaps("-. ",\r
+                                                sequence.getSequenceAsString()).\r
             toUpperCase();\r
 \r
         int absStart = entry.getUniprotSequence().getContent().indexOf(\r
@@ -352,7 +365,9 @@ public class DBRefFetcher implements Runnable
         {\r
           PDBEntry pdb = (PDBEntry) e.nextElement();\r
           if (!pdb.getType().equals(DBRefSource.PDB))\r
+          {\r
             continue;\r
+          }\r
 \r
           sequence.addDBRef(new DBRefEntry(DBRefSource.PDB,\r
                                            "0",\r
@@ -370,5 +385,3 @@ public class DBRefFetcher implements Runnable
     }\r
   }\r
 }\r
-\r
-\r