open each query result from an alignment datasource as a
authorjprocter <jprocter@compbio.dundee.ac.uk>
Fri, 8 Jul 2011 14:59:02 +0000 (15:59 +0100)
committerjprocter <jprocter@compbio.dundee.ac.uk>
Fri, 8 Jul 2011 14:59:02 +0000 (15:59 +0100)
different alignment (JAL-865)

src/jalview/datamodel/DBRefSource.java
src/jalview/gui/SequenceFetcher.java
src/jalview/ws/dbsources/Pfam.java
src/jalview/ws/seqfetcher/DbSourceProxy.java
src/jalview/ws/seqfetcher/DbSourceProxyImpl.java

index b9442df..e060b54 100755 (executable)
@@ -125,4 +125,9 @@ public class DBRefSource
    * time.\r
    */\r
   public static final Object MULTIACC = "MULTIACC";\r
+\r
+  /**\r
+   * DB query returns an alignment for each accession provided.\r
+   */\r
+  public static final Object ALIGNMENTDB = "ALIGNMENTS";\r
 }\r
index b7cccf7..14c0a00 100755 (executable)
@@ -444,9 +444,11 @@ public class SequenceFetcher extends JPanel implements Runnable
       resetDialog();
       return;
     }
-    AlignmentI aresult = null;
+    ArrayList<String> aresultq=new ArrayList<String>();
+    ArrayList<AlignmentI> aresult = new ArrayList<AlignmentI>();
     Object source = database.getSelectedItem();
     Enumeration en = new StringTokenizer(textArea.getText(), ";");
+    boolean isAliSource=false;
     try
     {
       guiWindow.setProgressBar(
@@ -454,6 +456,7 @@ public class SequenceFetcher extends JPanel implements Runnable
               Thread.currentThread().hashCode());
       DbSourceProxy proxy = sfetch.getSourceProxy((String) sources
               .get(source));
+      isAliSource = proxy.isA(DBRefSource.ALIGNMENTDB);
       if (proxy.getAccessionSeparator() == null)
       {
         while (en.hasMoreElements())
@@ -485,14 +488,8 @@ public class SequenceFetcher extends JPanel implements Runnable
             }
             if (indres != null)
             {
-              if (aresult == null)
-              {
-                aresult = indres;
-              }
-              else
-              {
-                aresult.append(indres);
-              }
+              aresultq.add(item);
+              aresult.add(indres);
             }
           } catch (Exception e)
           {
@@ -514,7 +511,8 @@ public class SequenceFetcher extends JPanel implements Runnable
         }
         try
         {
-          aresult = proxy.getSequenceRecords(multiacc.toString());
+          aresultq.add(multiacc.toString());
+          aresult.add(proxy.getSequenceRecords(multiacc.toString()));
         } catch (OutOfMemoryError oome)
         {
           new OOMWarning("fetching " + multiacc + " from "
@@ -547,9 +545,24 @@ public class SequenceFetcher extends JPanel implements Runnable
               + " from " + database.getSelectedItem());
       e.printStackTrace();
     }
-    if (aresult != null)
+    if (aresult != null && aresult.size()>0)
     {
-      parseResult(aresult, null, null);
+      AlignmentI ar=null;
+      if (isAliSource) {
+        // new window for each result
+        while (aresult.size()>0)
+        {
+          parseResult(aresult.remove(0), aresultq.remove(0)+" "+getDefaultRetrievalTitle(), null);
+        }
+      } else {
+        // concatenate all results in one window
+        while (aresult.size()>0)
+        {
+          if (ar==null) { ar = aresult.remove(0);}
+          else { ar.append(aresult.remove(0)); };
+        }
+        parseResult(ar, null, null);
+      } 
     }
     // only remove visual delay after we finished parsing.
     guiWindow.setProgressBar(null, Thread.currentThread().hashCode());
@@ -728,6 +741,13 @@ public class SequenceFetcher extends JPanel implements Runnable
     return null;
   }
 
+  /**
+   * 
+   * @return a standard title for any results retrieved using the currently selected source and settings
+   */
+  public String getDefaultRetrievalTitle() {
+    return "Retrieved from " + database.getSelectedItem();
+  }
   AlignmentI parseResult(AlignmentI al, String title,
           String currentFileFormat)
   {
@@ -748,7 +768,7 @@ public class SequenceFetcher extends JPanel implements Runnable
 
         if (title == null)
         {
-          title = "Retrieved from " + database.getSelectedItem();
+          title = getDefaultRetrievalTitle();
         }
         SequenceFeature[] sfs = null;
         for (Enumeration sq = al.getSequences().elements(); sq
index 834dd12..1b2a0c4 100644 (file)
@@ -46,6 +46,7 @@ abstract public class Pfam extends DbSourceProxyImpl implements
     super();\r
     // all extensions of this PFAM source base class are DOMAINDB sources\r
     addDbSourceProperty(jalview.datamodel.DBRefSource.DOMAINDB);\r
+    addDbSourceProperty(jalview.datamodel.DBRefSource.ALIGNMENTDB);\r
   }\r
 \r
   /*\r
index 9c5356a..67097ef 100644 (file)
@@ -120,4 +120,12 @@ public interface DbSourceProxy
    * @return one or more string buffers for each individual query\r
    */\r
   public StringBuffer getRawRecords();\r
+\r
+  \r
+  /**\r
+   * Find out more info about the source.\r
+   * @param dbsourceproperty - one of the database reference source properties in jalview.datamodel.DBRefSource\r
+   * @return true if the source has this property\r
+   */\r
+  public boolean isA(Object dbsourceproperty);\r
 }\r
index 44de157..94d7577 100644 (file)
@@ -128,4 +128,12 @@ public abstract class DbSourceProxyImpl implements DbSourceProxy
     return sequences;\r
   }\r
 \r
+  @Override\r
+  public boolean isA(Object dbsourceproperty)\r
+  {\r
+    assert(dbsourceproperty!=null);\r
+    return (props==null) ? false : props.containsKey(dbsourceproperty);\r
+  }\r
+  \r
+\r
 }\r