JAL-4308 reduce number of refs to 5, always have canonical reference first.
[jalview.git] / src / jalview / io / gff / Gff3Helper.java
index 594040a..646900d 100644 (file)
@@ -39,6 +39,8 @@ import java.util.Map;
  */
 public class Gff3Helper extends GffHelperBase
 {
+  public static final String ALLELES = "alleles";
+
   protected static final String TARGET = "Target";
 
   protected static final String ID = "ID";
@@ -152,7 +154,7 @@ public class Gff3Helper extends GffHelperBase
      */
     if ("-".equals(strand))
     {
-      System.err.println(
+      jalview.bin.Console.errPrintln(
               "Skipping mapping from reverse complement as not yet supported");
       return null;
     }
@@ -160,7 +162,7 @@ public class Gff3Helper extends GffHelperBase
     List<String> targets = attributes.get(TARGET);
     if (targets == null)
     {
-      System.err.println("'Target' missing in GFF");
+      jalview.bin.Console.errPrintln("'Target' missing in GFF");
       return null;
     }
 
@@ -176,7 +178,7 @@ public class Gff3Helper extends GffHelperBase
       String[] tokens = target.split(" ");
       if (tokens.length < 3)
       {
-        System.err.println("Incomplete Target: " + target);
+        jalview.bin.Console.errPrintln("Incomplete Target: " + target);
         continue;
       }
 
@@ -223,7 +225,7 @@ public class Gff3Helper extends GffHelperBase
         }
       } catch (NumberFormatException nfe)
       {
-        System.err.println("Invalid start or end in Target " + target);
+        jalview.bin.Console.errPrintln("Invalid start or end in Target " + target);
       }
     }
 
@@ -311,10 +313,9 @@ public class Gff3Helper extends GffHelperBase
          * give the mapped sequence a copy of the sequence feature, with 
          * start/end range adjusted 
          */
-        SequenceFeature sf2 = new SequenceFeature(sf);
-        sf2.setBegin(1);
         int sequenceFeatureLength = 1 + sf.getEnd() - sf.getBegin();
-        sf2.setEnd(sequenceFeatureLength);
+        SequenceFeature sf2 = new SequenceFeature(sf, 1,
+                sequenceFeatureLength, sf.getFeatureGroup(), sf.getScore());
         mappedSequence.addSequenceFeature(sf2);
 
         /*
@@ -349,23 +350,16 @@ public class Gff3Helper extends GffHelperBase
   }
 
   /**
-   * Return '=' as the name-value separator used in column 9 attributes.
-   */
-  @Override
-  protected char getNameValueSeparator()
-  {
-    return '=';
-  }
-
-  /**
    * Modifies the default SequenceFeature in order to set the Target sequence id
    * as the description
    */
   @Override
   protected SequenceFeature buildSequenceFeature(String[] gff,
+          int typeColumn, String group,
           Map<String, List<String>> attributes)
   {
-    SequenceFeature sf = super.buildSequenceFeature(gff, attributes);
+    SequenceFeature sf = super.buildSequenceFeature(gff, typeColumn, group,
+            attributes);
     String desc = getDescription(sf, attributes);
     if (desc != null)
     {
@@ -398,7 +392,7 @@ public class Gff3Helper extends GffHelperBase
       /*
        * Ensembl returns dna variants as 'alleles'
        */
-      desc = StringUtils.listToDelimitedString(attributes.get("alleles"),
+      desc = StringUtils.listToDelimitedString(attributes.get(ALLELES),
               ",");
     }
 
@@ -421,6 +415,11 @@ public class Gff3Helper extends GffHelperBase
       desc = (String) sf.getValue(ID);
     }
 
+    /*
+     * and decode comma, equals, semi-colon as required by GFF3 spec
+     */
+    desc = StringUtils.urlDecode(desc, GFF_ENCODABLE);
+
     return desc;
   }
 }