JAL-2679 use object_type=Transcript for lookup of Parent for Protein
[jalview.git] / src / jalview / ext / ensembl / EnsemblSeqProxy.java
index dcf2eb4..24d1b95 100644 (file)
@@ -48,8 +48,6 @@ import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Collections;
 import java.util.List;
-import java.util.Map;
-import java.util.Map.Entry;
 
 /**
  * Base class for Ensembl sequence fetchers
@@ -61,10 +59,6 @@ public abstract class EnsemblSeqProxy extends EnsemblRestClient
 {
   private static final String ALLELES = "alleles";
 
-  protected static final String PARENT = "Parent";
-
-  protected static final String ID = "ID";
-
   protected static final String NAME = "Name";
 
   protected static final String DESCRIPTION = "description";
@@ -139,8 +133,8 @@ public abstract class EnsemblSeqProxy extends EnsemblRestClient
 
     // danger: accession separator used as a regex here, a string elsewhere
     // in this case it is ok (it is just a space), but (e.g.) '\' would not be
-    List<String> allIds = Arrays.asList(query
-            .split(getAccessionSeparator()));
+    List<String> allIds = Arrays
+            .asList(query.split(getAccessionSeparator()));
     AlignmentI alignment = null;
     inProgress = true;
 
@@ -238,8 +232,8 @@ public abstract class EnsemblSeqProxy extends EnsemblRestClient
       }
     } catch (IOException e)
     {
-      System.err.println("Error transferring Ensembl features: "
-              + e.getMessage());
+      System.err.println(
+              "Error transferring Ensembl features: " + e.getMessage());
     }
   }
 
@@ -277,8 +271,8 @@ public abstract class EnsemblSeqProxy extends EnsemblRestClient
       proteinSeq.createDatasetSequence();
       querySeq.createDatasetSequence();
 
-      MapList mapList = AlignmentUtils
-              .mapCdsToProtein(querySeq, proteinSeq);
+      MapList mapList = AlignmentUtils.mapCdsToProtein(querySeq,
+              proteinSeq);
       if (mapList != null)
       {
         // clunky: ensure Uniprot xref if we have one is on mapped sequence
@@ -289,9 +283,11 @@ public abstract class EnsemblSeqProxy extends EnsemblRestClient
                 getEnsemblDataVersion(), proteinSeq.getName(), map);
         querySeq.getDatasetSequence().addDBRef(dbr);
         DBRefEntry[] uprots = DBRefUtils.selectRefs(ds.getDBRefs(),
-                new String[] { DBRefSource.UNIPROT });
+                new String[]
+                { DBRefSource.UNIPROT });
         DBRefEntry[] upxrefs = DBRefUtils.selectRefs(querySeq.getDBRefs(),
-                new String[] { DBRefSource.UNIPROT });
+                new String[]
+                { DBRefSource.UNIPROT });
         if (uprots != null)
         {
           for (DBRefEntry up : uprots)
@@ -306,8 +302,8 @@ public abstract class EnsemblSeqProxy extends EnsemblRestClient
 
               if (upx.size() > 1)
               {
-                Cache.log
-                        .warn("Implementation issue - multiple uniprot acc on product sequence.");
+                Cache.log.warn(
+                        "Implementation issue - multiple uniprot acc on product sequence.");
               }
             }
             else
@@ -332,8 +328,8 @@ public abstract class EnsemblSeqProxy extends EnsemblRestClient
          * copy exon features to protein, compute peptide variants from dna 
          * variants and add as features on the protein sequence ta-da
          */
-        AlignmentUtils
-                .computeProteinFeatures(querySeq, proteinSeq, mapList);
+        AlignmentUtils.computeProteinFeatures(querySeq, proteinSeq,
+                mapList);
       }
     } catch (Exception e)
     {
@@ -366,8 +362,8 @@ public abstract class EnsemblSeqProxy extends EnsemblRestClient
     /*
      * and add a reference to itself
      */
-    DBRefEntry self = new DBRefEntry(getDbSource(),
-            getEnsemblDataVersion(), seq.getName());
+    DBRefEntry self = new DBRefEntry(getDbSource(), getEnsemblDataVersion(),
+            seq.getName());
     seq.addDBRef(self);
   }
 
@@ -381,8 +377,8 @@ public abstract class EnsemblSeqProxy extends EnsemblRestClient
    * @throws JalviewException
    * @throws IOException
    */
-  protected AlignmentI fetchSequences(List<String> ids, AlignmentI alignment)
-          throws JalviewException, IOException
+  protected AlignmentI fetchSequences(List<String> ids,
+          AlignmentI alignment) throws JalviewException, IOException
   {
     if (!isEnsemblAvailable())
     {
@@ -398,15 +394,15 @@ public abstract class EnsemblSeqProxy extends EnsemblRestClient
     FastaFile fr = new FastaFile(fp);
     if (fr.hasWarningMessage())
     {
-      System.out.println(String.format(
-              "Warning when retrieving %d ids %s\n%s", ids.size(),
-              ids.toString(), fr.getWarningMessage()));
+      System.out.println(
+              String.format("Warning when retrieving %d ids %s\n%s",
+                      ids.size(), ids.toString(), fr.getWarningMessage()));
     }
     else if (fr.getSeqs().size() != ids.size())
     {
       System.out.println(String.format(
-              "Only retrieved %d sequences for %d query strings", fr
-                      .getSeqs().size(), ids.size()));
+              "Only retrieved %d sequences for %d query strings",
+              fr.getSeqs().size(), ids.size()));
     }
 
     if (fr.getSeqs().size() == 1 && fr.getSeqs().get(0).getLength() == 0)
@@ -470,14 +466,11 @@ public abstract class EnsemblSeqProxy extends EnsemblRestClient
     urlstring.append("?type=").append(getSourceEnsemblType().getType());
     urlstring.append(("&Accept=text/x-fasta"));
 
-    Map<String, String> params = getAdditionalParameters();
-    if (params != null)
+    String objectType = getObjectType();
+    if (objectType != null)
     {
-      for (Entry<String, String> entry : params.entrySet())
-      {
-        urlstring.append("&").append(entry.getKey()).append("=")
-                .append(entry.getValue());
-      }
+      urlstring.append("&").append(OBJECT_TYPE).append("=")
+              .append(objectType);
     }
 
     URL url = new URL(urlstring.toString());
@@ -485,11 +478,11 @@ public abstract class EnsemblSeqProxy extends EnsemblRestClient
   }
 
   /**
-   * Override this method to add any additional x=y URL parameters needed
+   * Override this method to specify object_type request parameter
    * 
    * @return
    */
-  protected Map<String, String> getAdditionalParameters()
+  protected String getObjectType()
   {
     return null;
   }
@@ -558,7 +551,6 @@ public abstract class EnsemblSeqProxy extends EnsemblRestClient
   protected MapList getGenomicRangesFromFeatures(SequenceI sourceSequence,
           String accId, int start)
   {
-    // SequenceFeature[] sfs = sourceSequence.getSequenceFeatures();
     List<SequenceFeature> sfs = sourceSequence.getFeatures()
             .getPositionalFeatures();
     if (sfs.isEmpty())
@@ -570,7 +562,7 @@ public abstract class EnsemblSeqProxy extends EnsemblRestClient
      * generously initial size for number of cds regions
      * (worst case titin Q8WZ42 has c. 313 exons)
      */
-    List<int[]> regions = new ArrayList<int[]>(100);
+    List<int[]> regions = new ArrayList<>(100);
     int mappedLength = 0;
     int direction = 1; // forward
     boolean directionSet = false;
@@ -589,8 +581,8 @@ public abstract class EnsemblSeqProxy extends EnsemblRestClient
         if (directionSet && strand != direction)
         {
           // abort - mix of forward and backward
-          System.err.println("Error: forward and backward strand for "
-                  + accId);
+          System.err.println(
+                  "Error: forward and backward strand for " + accId);
           return null;
         }
         direction = strand;
@@ -634,8 +626,9 @@ public abstract class EnsemblSeqProxy extends EnsemblRestClient
     Collections.sort(regions, direction == 1 ? IntRangeComparator.ASCENDING
             : IntRangeComparator.DESCENDING);
 
-    List<int[]> to = Arrays.asList(new int[] { start,
-        start + mappedLength - 1 });
+    List<int[]> to = Arrays
+            .asList(new int[]
+            { start, start + mappedLength - 1 });
 
     return new MapList(regions, to, 1, 1);
   }
@@ -691,16 +684,15 @@ public abstract class EnsemblSeqProxy extends EnsemblRestClient
       int newBegin = Math.min(mappedRange[0], mappedRange[1]);
       int newEnd = Math.max(mappedRange[0], mappedRange[1]);
       SequenceFeature copy = new SequenceFeature(sf, newBegin, newEnd,
-              group);
+              group, sf.getScore());
       targetSequence.addSequenceFeature(copy);
 
       /*
        * for sequence_variant on reverse strand, have to convert the allele
        * values to their complements
        */
-      if (!forwardStrand
-              && SequenceOntologyFactory.getInstance().isA(sf.getType(),
-                      SequenceOntologyI.SEQUENCE_VARIANT))
+      if (!forwardStrand && SequenceOntologyFactory.getInstance()
+              .isA(sf.getType(), SequenceOntologyI.SEQUENCE_VARIANT))
       {
         reverseComplementAlleles(copy);
       }
@@ -790,8 +782,7 @@ public abstract class EnsemblSeqProxy extends EnsemblRestClient
       return false;
     }
 
-    long start = System.currentTimeMillis();
-    // SequenceFeature[] sfs = sourceSequence.getSequenceFeatures();
+//    long start = System.currentTimeMillis();
     List<SequenceFeature> sfs = sourceSequence.getFeatures()
             .getPositionalFeatures();
     MapList mapping = getGenomicRangesFromFeatures(sourceSequence,
@@ -803,10 +794,10 @@ public abstract class EnsemblSeqProxy extends EnsemblRestClient
 
     boolean result = transferFeatures(sfs, targetSequence, mapping,
             accessionId);
-    System.out.println("transferFeatures (" + (sfs.size()) + " --> "
-            + targetSequence.getFeatures().getFeatureCount(true) + ") to "
-            + targetSequence.getName() + " took "
-            + (System.currentTimeMillis() - start) + "ms");
+//    System.out.println("transferFeatures (" + (sfs.size()) + " --> "
+//            + targetSequence.getFeatures().getFeatureCount(true) + ") to "
+//            + targetSequence.getName() + " took "
+//            + (System.currentTimeMillis() - start) + "ms");
     return result;
   }
 
@@ -898,7 +889,7 @@ public abstract class EnsemblSeqProxy extends EnsemblRestClient
   protected List<SequenceFeature> findFeatures(SequenceI sequence,
           String term, String parentId)
   {
-    List<SequenceFeature> result = new ArrayList<SequenceFeature>();
+    List<SequenceFeature> result = new ArrayList<>();
 
     List<SequenceFeature> sfs = sequence.getFeatures()
             .getFeaturesByOntology(term);