Merge branch 'develop' into releases/Release_2_11_3_Branch
[jalview.git] / src / jalview / ws / dbsources / EmblXmlSource.java
index c2d661b..92a0151 100644 (file)
@@ -20,8 +20,6 @@
  */
 package jalview.ws.dbsources;
 
-import java.util.Locale;
-
 import java.io.File;
 import java.io.FileInputStream;
 import java.io.InputStream;
@@ -30,6 +28,7 @@ import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Hashtable;
 import java.util.List;
+import java.util.Locale;
 import java.util.Map;
 import java.util.Map.Entry;
 
@@ -44,7 +43,7 @@ import javax.xml.stream.XMLStreamReader;
 import com.stevesoft.pat.Regex;
 
 import jalview.analysis.SequenceIdMatcher;
-import jalview.bin.Cache;
+import jalview.bin.Console;
 import jalview.datamodel.Alignment;
 import jalview.datamodel.AlignmentI;
 import jalview.datamodel.DBRefEntry;
@@ -65,12 +64,6 @@ import jalview.xml.binding.embl.EntryType.Feature.Qualifier;
 import jalview.xml.binding.embl.ROOT;
 import jalview.xml.binding.embl.XrefType;
 
-/**
- * Provides XML binding and parsing of EMBL or EMBLCDS records retrieved from
- * (e.g.) {@code https://www.ebi.ac.uk/ena/data/view/x53828&display=xml}.
- * 
- * @deprecated endpoint withdrawn August 2020 (JAL-3692), use EmblFlatfileSource
- */
 public abstract class EmblXmlSource extends EbiFileRetrievedProxy
 {
   private static final Regex ACCESSION_REGEX = new Regex("^[A-Z]+[0-9]+");
@@ -104,8 +97,8 @@ public abstract class EmblXmlSource extends EbiFileRetrievedProxy
     try
     {
       reply = dbFetch.fetchDataAsFile(
-              emprefx.toLowerCase(Locale.ROOT) + ":" + query.trim(), "display=xml",
-              "xml");
+              emprefx.toLowerCase(Locale.ROOT) + ":" + query.trim(),
+              "display=xml", "xml");
     } catch (Exception e)
     {
       stopQuery();
@@ -168,7 +161,7 @@ public abstract class EmblXmlSource extends EbiFileRetrievedProxy
       }
       else
       {
-        System.out.println(
+        jalview.bin.Console.outPrintln(
                 "No record found for '" + emprefx + ":" + query + "'");
       }
     }
@@ -290,11 +283,12 @@ public abstract class EmblXmlSource extends EbiFileRetrievedProxy
       }
     } catch (Exception e)
     {
-      System.err.println("EMBL Record Features parsing error!");
+      jalview.bin.Console.errPrintln("EMBL Record Features parsing error!");
       System.err
               .println("Please report the following to help@jalview.org :");
-      System.err.println("EMBL Record " + accession);
-      System.err.println("Resulted in exception: " + e.getMessage());
+      jalview.bin.Console.errPrintln("EMBL Record " + accession);
+      jalview.bin.Console
+              .errPrintln("Resulted in exception: " + e.getMessage());
       e.printStackTrace(System.err);
     }
 
@@ -361,7 +355,7 @@ public abstract class EmblXmlSource extends EbiFileRetrievedProxy
             codonStart = Integer.parseInt(value.trim());
           } catch (NumberFormatException e)
           {
-            System.err.println("Invalid codon_start in XML for "
+            jalview.bin.Console.errPrintln("Invalid codon_start in XML for "
                     + entry.getAccession() + ": " + e.getMessage());
           }
         }
@@ -413,13 +407,13 @@ public abstract class EmblXmlSource extends EbiFileRetrievedProxy
          * workaround until we handle dna location for CDS sequence
          * e.g. location="X53828.1:60..1058" correctly
          */
-        System.err.println(
+        jalview.bin.Console.errPrintln(
                 "Implementation Notice: EMBLCDS records not properly supported yet - Making up the CDNA region of this sequence... may be incorrect ("
                         + sourceDb + ":" + entry.getAccession() + ")");
         int dnaLength = dna.getLength();
         if (translationLength * 3 == (1 - codonStart + dnaLength))
         {
-          System.err.println(
+          jalview.bin.Console.errPrintln(
                   "Not allowing for additional stop codon at end of cDNA fragment... !");
           // this might occur for CDS sequences where no features are marked
           exons = new int[] { dna.getStart() + (codonStart - 1),
@@ -430,7 +424,7 @@ public abstract class EmblXmlSource extends EbiFileRetrievedProxy
         }
         if ((translationLength + 1) * 3 == (1 - codonStart + dnaLength))
         {
-          System.err.println(
+          jalview.bin.Console.errPrintln(
                   "Allowing for additional stop codon at end of cDNA fragment... will probably cause an error in VAMSAs!");
           exons = new int[] { dna.getStart() + (codonStart - 1),
               dna.getEnd() - 3 };
@@ -455,9 +449,8 @@ public abstract class EmblXmlSource extends EbiFileRetrievedProxy
         else
         {
           // final product length truncation check
-          int[] cdsRanges = adjustForProteinLength(translationLength,
-                  exons);
-          dnaToProteinMapping = new Mapping(product, cdsRanges,
+          int[] exons2 = adjustForProteinLength(translationLength, exons);
+          dnaToProteinMapping = new Mapping(product, exons2,
                   new int[]
                   { 1, translationLength }, 3, 1);
           if (product != null)
@@ -666,7 +659,7 @@ public abstract class EmblXmlSource extends EbiFileRetrievedProxy
       return listToArray(ranges);
     } catch (ParseException e)
     {
-      Cache.log.warn(
+      Console.warn(
               String.format("Not parsing inexact CDS location %s in ENA %s",
                       location, accession));
       return new int[] {};
@@ -759,8 +752,7 @@ public abstract class EmblXmlSource extends EbiFileRetrievedProxy
 
   /**
    * Truncates (if necessary) the exon intervals to match 3 times the length of
-   * the protein; also accepts 3 bases longer (for stop codon not included in
-   * protein)
+   * the protein (including truncation for stop codon included in exon)
    * 
    * @param proteinLength
    * @param exon
@@ -777,11 +769,9 @@ public abstract class EmblXmlSource extends EbiFileRetrievedProxy
     int exonLength = MappingUtils.getLength(Arrays.asList(exon));
 
     /*
-     * if exon length matches protein, or is shorter, or longer by the 
-     * length of a stop codon (3 bases), then leave it unchanged
+     * if exon length matches protein, or is shorter, then leave it unchanged
      */
-    if (expectedCdsLength >= exonLength
-            || expectedCdsLength == exonLength - 3)
+    if (expectedCdsLength >= exonLength)
     {
       return exon;
     }