X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;ds=sidebyside;f=src%2Fjalview%2Fio%2Fgff%2FGff3Helper.java;h=646900d5c1d88e49372dae8dd5244c673bbeb21d;hb=b19880049cdb11882e68c75d7960465be4aa8665;hp=594040ac88449f1da5b327e4080559f54d8459b8;hpb=3d0101179759ef157b088ea135423cd909512d9f;p=jalview.git diff --git a/src/jalview/io/gff/Gff3Helper.java b/src/jalview/io/gff/Gff3Helper.java index 594040a..646900d 100644 --- a/src/jalview/io/gff/Gff3Helper.java +++ b/src/jalview/io/gff/Gff3Helper.java @@ -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 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> 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; } }