JAL-1705 DbSourceProxy properties converted to methods, tidy/format code
[jalview.git] / src / jalview / ext / ensembl / EnsemblSeqProxy.java
index 137c9b0..4f85bd0 100644 (file)
@@ -1,14 +1,13 @@
 package jalview.ext.ensembl;
 
+import jalview.datamodel.Alignment;
 import jalview.datamodel.AlignmentI;
-import jalview.datamodel.DBRefSource;
 import jalview.datamodel.SequenceI;
 import jalview.exceptions.JalviewException;
 import jalview.ext.ensembl.SeqFetcher.EnsemblSeqType;
 import jalview.io.FastaFile;
 import jalview.io.FileParse;
 import jalview.util.DBRefUtils;
-import jalview.ws.seqfetcher.DbSourceProxy;
 import jalview.ws.seqfetcher.DbSourceProxyImpl;
 
 import java.util.ArrayList;
@@ -17,20 +16,13 @@ import java.util.List;
 
 import com.stevesoft.pat.Regex;
 
-public abstract class EnsemblSeqProxy extends DbSourceProxyImpl implements
-        DbSourceProxy
+public abstract class EnsemblSeqProxy extends DbSourceProxyImpl
 {
   SeqFetcher sf;
 
-  public EnsemblSeqProxy() throws Exception
+  public EnsemblSeqProxy()
   {
     sf = new SeqFetcher();
-    addDbSourceProperty(DBRefSource.MULTIACC);
-    addDbSourceProperty(DBRefSource.SEQDB);
-    // decide whether these need to be filtered according to return type
-    addDbSourceProperty(DBRefSource.PROTSEQDB);
-    addDbSourceProperty(DBRefSource.DNACODINGSEQDB);
-    addDbSourceProperty(DBRefSource.DNASEQDB);
   }
 
   @Override
@@ -58,10 +50,13 @@ public abstract class EnsemblSeqProxy extends DbSourceProxyImpl implements
     return new Regex("((ENSP|ENST|ENSG|CCDS)[0-9.]{3,})");
   }
 
+  /**
+   * Default test query is a transcript
+   */
   @Override
   public String getTestQuery()
   {
-    return "ENSP00000288602";
+    return "ENST00000288602";
   }
 
   @Override
@@ -79,14 +74,15 @@ public abstract class EnsemblSeqProxy extends DbSourceProxyImpl implements
     List<String> tids, ids = new ArrayList<String>();
     tids = Arrays.asList(queries.split(" +"));
     AlignmentI rtn = null;
-    for (int v = 0, vSize = tids.size(); v < vSize; v += 50)
+
+    /*
+     * execute queries, if necessary in batches of the
+     * maximum allowed number of ids
+     */
+    int maxQueryCount = getMaximumQueryCount();
+    for (int v = 0, vSize = tids.size(); v < vSize; v += maxQueryCount)
     {
-      int p = v + 50;
-      if (p > vSize)
-      {
-        p = vSize;
-      }
-      ;
+      int p = Math.min(vSize, v + maxQueryCount);
       ids = tids.subList(v, p);
       try
       {
@@ -111,7 +107,7 @@ public abstract class EnsemblSeqProxy extends DbSourceProxyImpl implements
         }
         if (fr.getSeqs().size() > 0)
         {
-          AlignmentI seqal = new jalview.datamodel.Alignment(
+          AlignmentI seqal = new Alignment(
                   fr.getSeqsAsArray());
           for (SequenceI sq:seqal.getSequences())
           {
@@ -175,4 +171,21 @@ public abstract class EnsemblSeqProxy extends DbSourceProxyImpl implements
   {
     return 0;
   }
+
+  /**
+   * A sequence/id POST request currently allows up to 50 queries
+   * 
+   * @see http://rest.ensembl.org/documentation/info/sequence_id_post
+   */
+  @Override
+  public int getMaximumQueryCount()
+  {
+    return 50;
+  }
+
+  @Override
+  public boolean isDnaCoding()
+  {
+    return true;
+  }
 }