Merge branch 'Release_2_9_0b1_Branch'
[jalview.git] / src / jalview / datamodel / xdb / embl / EmblEntry.java
index 3f890ba..27aee24 100644 (file)
@@ -1,6 +1,6 @@
 /*
- * Jalview - A Sequence Alignment Editor and Viewer ($$Version-Rel$$)
- * Copyright (C) $$Year-Rel$$ The Jalview Authors
+ * Jalview - A Sequence Alignment Editor and Viewer (Version 2.9.0b1)
+ * Copyright (C) 2015 The Jalview Authors
  * 
  * This file is part of Jalview.
  * 
  */
 package jalview.datamodel.xdb.embl;
 
-import java.util.Enumeration;
-import java.util.Hashtable;
-import java.util.Iterator;
-import java.util.Vector;
-
 import jalview.datamodel.DBRefEntry;
 import jalview.datamodel.DBRefSource;
 import jalview.datamodel.FeatureProperties;
@@ -33,6 +28,10 @@ import jalview.datamodel.Sequence;
 import jalview.datamodel.SequenceFeature;
 import jalview.datamodel.SequenceI;
 
+import java.util.Hashtable;
+import java.util.Map.Entry;
+import java.util.Vector;
+
 /**
  * Data model for one entry returned from an EMBL query, as marshalled by a
  * Castor binding file
@@ -397,7 +396,7 @@ public class EmblEntry
           boolean noPeptide, String sourceDb)
   { // TODO: ensure emblEntry.getSequences behaves correctly for returning all
     // cases of noNa and noPeptide
-    Vector seqs = new Vector();
+    Vector<SequenceI> seqs = new Vector<SequenceI>();
     Sequence dna = null;
     if (!noNa)
     {
@@ -409,32 +408,29 @@ public class EmblEntry
       dna.addDBRef(retrievedref);
       // add map to indicate the sequence is a valid coordinate frame for the
       // dbref
-      retrievedref.setMap(new Mapping(null, new int[]
-      { 1, dna.getLength() }, new int[]
-      { 1, dna.getLength() }, 1, 1));
+      retrievedref.setMap(new Mapping(null,
+              new int[] { 1, dna.getLength() }, new int[] { 1,
+                  dna.getLength() }, 1, 1));
       // TODO: transform EMBL Database refs to canonical form
       if (dbRefs != null)
       {
-        for (Iterator i = dbRefs.iterator(); i.hasNext(); dna
-                .addDBRef((DBRefEntry) i.next()))
+        for (DBRefEntry dbref : dbRefs)
         {
-          ;
+          dna.addDBRef(dbref);
         }
       }
     }
     try
     {
-      for (Iterator i = features.iterator(); i.hasNext();)
+      for (EmblFeature feature : features)
       {
-        EmblFeature feature = (EmblFeature) i.next();
         if (!noNa)
         {
-          if (feature.dbRefs != null && feature.dbRefs.size() > 0)
+          if (feature.dbRefs != null)
           {
-            for (Iterator dbr = feature.dbRefs.iterator(); dbr.hasNext(); dna
-                    .addDBRef((DBRefEntry) dbr.next()))
+            for (DBRefEntry dbref : feature.dbRefs)
             {
-              ;
+              dna.addDBRef(dbref);
             }
           }
         }
@@ -445,14 +441,14 @@ public class EmblEntry
         else
         {
           // General feature type.
+          // TODO this is just duplicated code ??
           if (!noNa)
           {
-            if (feature.dbRefs != null && feature.dbRefs.size() > 0)
+            if (feature.dbRefs != null)
             {
-              for (Iterator dbr = feature.dbRefs.iterator(); dbr.hasNext(); dna
-                      .addDBRef((DBRefEntry) dbr.next()))
+              for (DBRefEntry dbref : feature.dbRefs)
               {
-                ;
+                dna.addDBRef(dbref);
               }
             }
           }
@@ -474,7 +470,7 @@ public class EmblEntry
     SequenceI[] sqs = new SequenceI[seqs.size()];
     for (int i = 0, j = seqs.size(); i < j; i++)
     {
-      sqs[i] = (SequenceI) seqs.elementAt(i);
+      sqs[i] = seqs.elementAt(i);
       seqs.set(i, null);
     }
     return sqs;
@@ -496,19 +492,16 @@ public class EmblEntry
    *          flag for generation of Peptide sequence objects
    */
   private void parseCodingFeature(EmblFeature feature, String sourceDb,
-          Vector seqs, Sequence dna, boolean noPeptide)
+          Vector<SequenceI> seqs, Sequence dna, boolean noPeptide)
   {
     boolean isEmblCdna = sourceDb.equals(DBRefSource.EMBLCDS);
     // extract coding region(s)
     jalview.datamodel.Mapping map = null;
     int[] exon = null;
-    if (feature.locations != null && feature.locations.size() > 0)
+    if (feature.locations != null)
     {
-      for (Enumeration locs = feature.locations.elements(); locs
-              .hasMoreElements();)
+      for (EmblFeatureLocations loc : feature.locations)
       {
-        EmblFeatureLocations loc = (EmblFeatureLocations) locs
-                .nextElement();
         int[] se = loc.getElementRanges(accession);
         if (exon == null)
         {
@@ -526,19 +519,17 @@ public class EmblEntry
     String prseq = null;
     String prname = new String();
     String prid = null;
-    Hashtable vals = new Hashtable();
+    Hashtable<String, String> vals = new Hashtable<String, String>();
     int prstart = 1;
     // get qualifiers
-    if (feature.getQualifiers() != null
-            && feature.getQualifiers().size() > 0)
+    if (feature.getQualifiers() != null)
     {
-      for (Iterator quals = feature.getQualifiers().iterator(); quals
-              .hasNext();)
+      for (Qualifier q : feature.getQualifiers())
       {
-        Qualifier q = (Qualifier) quals.next();
-        if (q.getName().equals("translation"))
+        String qname = q.getName();
+        if (qname.equals("translation"))
         {
-          StringBuffer prsq = new StringBuffer(q.getValues()[0]);
+          StringBuilder prsq = new StringBuilder(q.getValues()[0]);
           int p = prsq.indexOf(" ");
           while (p > -1)
           {
@@ -549,15 +540,15 @@ public class EmblEntry
           prsq = null;
 
         }
-        else if (q.getName().equals("protein_id"))
+        else if (qname.equals("protein_id"))
         {
           prid = q.getValues()[0];
         }
-        else if (q.getName().equals("codon_start"))
+        else if (qname.equals("codon_start"))
         {
           prstart = Integer.parseInt(q.getValues()[0]);
         }
-        else if (q.getName().equals("product"))
+        else if (qname.equals("product"))
         {
           prname = q.getValues()[0];
         }
@@ -565,7 +556,7 @@ public class EmblEntry
         {
           // throw anything else into the additional properties hash
           String[] s = q.getValues();
-          StringBuffer sb = new StringBuffer();
+          StringBuilder sb = new StringBuilder();
           if (s != null)
           {
             for (int i = 0; i < s.length; i++)
@@ -574,15 +565,15 @@ public class EmblEntry
               sb.append("\n");
             }
           }
-          vals.put(q.getName(), sb.toString());
+          vals.put(qname, sb.toString());
         }
       }
     }
     Sequence product = null;
     DBRefEntry protEMBLCDS = null;
     exon = adjustForPrStart(prstart, exon);
-    boolean noProteinDbref=true;
-    
+    boolean noProteinDbref = true;
+
     if (prseq != null && prname != null && prid != null)
     {
       // extract proteins.
@@ -608,19 +599,18 @@ public class EmblEntry
                   .println("Not allowing for additional stop codon at end of cDNA fragment... !");
           // this might occur for CDS sequences where no features are
           // marked.
-          exon = new int[]
-          { dna.getStart() + (prstart - 1), dna.getEnd() };
-          map = new jalview.datamodel.Mapping(product, exon, new int[]
-          { 1, prseq.length() }, 3, 1);
+          exon = new int[] { dna.getStart() + (prstart - 1), dna.getEnd() };
+          map = new jalview.datamodel.Mapping(product, exon, new int[] { 1,
+              prseq.length() }, 3, 1);
         }
         if ((prseq.length() + 1) * 3 == (1 - prstart + dna.getSequence().length))
         {
           System.err
                   .println("Allowing for additional stop codon at end of cDNA fragment... will probably cause an error in VAMSAs!");
-          exon = new int[]
-          { dna.getStart() + (prstart - 1), dna.getEnd() - 3 };
-          map = new jalview.datamodel.Mapping(product, exon, new int[]
-          { 1, prseq.length() }, 3, 1);
+          exon = new int[] { dna.getStart() + (prstart - 1),
+              dna.getEnd() - 3 };
+          map = new jalview.datamodel.Mapping(product, exon, new int[] { 1,
+              prseq.length() }, 3, 1);
         }
       }
       else
@@ -641,8 +631,8 @@ public class EmblEntry
           // final product length trunctation check
 
           map = new jalview.datamodel.Mapping(product,
-                  adjustForProteinLength(prseq.length(), exon), new int[]
-                  { 1, prseq.length() }, 3, 1);
+                  adjustForProteinLength(prseq.length(), exon), new int[] {
+                      1, prseq.length() }, 3, 1);
           // reconstruct the EMBLCDS entry
           // TODO: this is only necessary when there codon annotation is
           // complete (I think JBPNote)
@@ -650,9 +640,9 @@ public class EmblEntry
           pcdnaref.setAccessionId(prid);
           pcdnaref.setSource(DBRefSource.EMBLCDS);
           pcdnaref.setVersion(getVersion()); // same as parent EMBL version.
-          jalview.util.MapList mp = new jalview.util.MapList(new int[]
-          { 1, prseq.length() }, new int[]
-          { 1 + (prstart - 1), (prstart - 1) + 3 * prseq.length() }, 1, 3);
+          jalview.util.MapList mp = new jalview.util.MapList(new int[] { 1,
+              prseq.length() }, new int[] { 1 + (prstart - 1),
+              (prstart - 1) + 3 * prseq.length() }, 1, 3);
           // { 1 + (prstart - 1) * 3,
           // 1 + (prstart - 1) * 3 + prseq.length() * 3 - 1 }, new int[]
           // { 1prstart, prstart + prseq.length() - 1 }, 3, 1);
@@ -663,9 +653,9 @@ public class EmblEntry
             protEMBLCDS = new DBRefEntry(pcdnaref);
             protEMBLCDS.setSource(DBRefSource.EMBLCDSProduct);
             product.addDBRef(protEMBLCDS);
-            
-          }     
-          
+
+          }
+
         }
       }
       // add cds feature to dna seq - this may include the stop codon
@@ -676,31 +666,25 @@ public class EmblEntry
         sf.setEnd(exon[xint + 1]);
         sf.setType(feature.getName());
         sf.setFeatureGroup(sourceDb);
-        sf.setDescription("Exon " + (1 + xint / 2)
-                + " for protein '" + prname + "' EMBLCDS:" + prid);
+        sf.setDescription("Exon " + (1 + xint / 2) + " for protein '"
+                + prname + "' EMBLCDS:" + prid);
         sf.setValue(FeatureProperties.EXONPOS, new Integer(1 + xint));
         sf.setValue(FeatureProperties.EXONPRODUCT, prname);
-        if (vals != null && vals.size() > 0)
+        if (vals != null)
         {
-          Enumeration kv = vals.keys();
-          while (kv.hasMoreElements())
+          for (Entry<String, String> val : vals.entrySet())
           {
-            Object key = kv.nextElement();
-            if (key != null)
-            {
-              sf.setValue(key.toString(), vals.get(key));
-            }
+            sf.setValue(val.getKey(), val.getValue());
           }
         }
         dna.addSequenceFeature(sf);
       }
     }
     // add dbRefs to sequence
-    if (feature.dbRefs != null && feature.dbRefs.size() > 0)
+    if (feature.dbRefs != null)
     {
-      for (Iterator dbr = feature.dbRefs.iterator(); dbr.hasNext();)
+      for (DBRefEntry ref : feature.dbRefs)
       {
-        DBRefEntry ref = (DBRefEntry) dbr.next();
         ref.setSource(jalview.util.DBRefUtils.getCanonicalName(ref
                 .getSource()));
         // Hard code the kind of protein product accessions that EMBL cite
@@ -755,7 +739,7 @@ public class EmblEntry
                   .setMap(new Mapping(product, map.getMap().getInverse()));
         }
         product.addDBRef(protEMBLCDS);
-          
+
         // Add converse mapping reference
         if (map != null)
         {