+/*
+ * Jalview - A Sequence Alignment Editor and Viewer ($$Version-Rel$$)
+ * Copyright (C) $$Year-Rel$$ The Jalview Authors
+ *
+ * This file is part of Jalview.
+ *
+ * Jalview is free software: you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation, either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * Jalview is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty
+ * of MERCHANTABILITY or FITNESS FOR A PARTICULAR
+ * PURPOSE. See the GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with Jalview. If not, see <http://www.gnu.org/licenses/>.
+ * The Jalview Authors are detailed in the 'AUTHORS' file.
+ */
package jalview.io;
import java.io.IOException;
import java.util.Map.Entry;
import java.util.TreeMap;
-import jalview.bin.Cache;
+import jalview.bin.Console;
import jalview.datamodel.DBRefEntry;
import jalview.datamodel.DBRefSource;
import jalview.datamodel.FeatureProperties;
/**
* 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
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;
}
* when true, interpret the mol_type 'source' feature attribute
* and generate an RNA sequence from the DNA record
*/
- protected boolean produceRna=true;
-
+ protected boolean produceRna = true;
/*
* values parsed from the data file
protected List<DBRefEntry> dbrefs;
- protected boolean sequenceStringIsRNA=false;
+ protected boolean sequenceStringIsRNA = false;
protected String sequenceString;
* using TreeMap gives CDS sequences in alphabetical, so readable, order
*/
cds = new TreeMap<>(String.CASE_INSENSITIVE_ORDER);
-
+
parse();
}
/**
- * process attributes for 'source' until the next FT feature entry
- * only interested in 'mol_type'
+ * process attributes for 'source' until the next FT feature entry only
+ * interested in 'mol_type'
+ *
* @param tokens
* @return
* @throws IOException
int p = line.indexOf("\\mol_type");
int qs = line.indexOf("\"", p);
int qe = line.indexOf("\"", qs + 1);
- String qualifier=line.substring(qs,qe).toLowerCase(Locale.ROOT);
+ String qualifier = line.substring(qs, qe).toLowerCase(Locale.ROOT);
if (qualifier.indexOf("rna") > -1)
{
sequenceStringIsRNA = true;
{
sequenceStringIsRNA = false;
}
- line=parseFeatureQualifier(sb, false);
+ line = parseFeatureQualifier(sb, false);
}
return line;
}
-
/**
* Parses one (GenBank or EMBL format) CDS feature, saves the parsed data, and
* returns the next line
int slashPos = line.indexOf('/');
if (slashPos == -1)
{
- Cache.error("Unexpected EMBL line ignored: " + line);
+ Console.error("Unexpected EMBL line ignored: " + line);
line = nextLine();
continue;
}
data.codonStart = Integer.parseInt(featureValue.trim());
} catch (NumberFormatException e)
{
- Cache.error("Invalid codon_start in XML for " + this.accession
+ Console.error("Invalid codon_start in XML for " + this.accession
+ ": " + e.getMessage());
}
}
}
else
{
- Cache.error("Ignoring CDS feature with no protein_id for "
+ Console.error("Ignoring CDS feature with no protein_id for "
+ sourceDb + ":" + accession);
}
{
if (this.accession == null || this.sequenceString == null)
{
- Cache.error("Failed to parse data from EMBL");
+ Console.error("Failed to parse data from EMBL");
return;
}
* workaround until we handle all 'location' formats fully
* e.g. X53828.1:60..1058 or <123..>289
*/
- Cache.error(String.format(
+ Console.error(String.format(
"Implementation Notice: EMBLCDS location '%s'not properly supported yet"
+ " - Making up the CDNA region of (%s:%s)... may be incorrect",
data.cdsLocation, sourceDb, this.accession));
if (peptideLength * 3 == completeCodonsLength)
{
// this might occur for CDS sequences where no features are marked
- Cache.warn("Assuming no stop codon at end of cDNA fragment");
+ Console.warn("Assuming no stop codon at end of cDNA fragment");
mappedDnaEnd = dna.getEnd();
}
else if ((peptideLength + 1) * 3 == completeCodonsLength)
{
- Cache.warn("Assuming stop codon at end of cDNA fragment");
+ Console.warn("Assuming stop codon at end of cDNA fragment");
mappedDnaEnd = dna.getEnd() - 3;
}
return MappingUtils.rangeListToArray(ranges);
} catch (ParseException e)
{
- Cache.warn(
+ Console.warn(
String.format("Not parsing inexact CDS location %s in ENA %s",
location, accession));
return new int[] {};
String[] tokens = line.split(WHITESPACE);
if (tokens.length < 2)
{
- Cache.error("Ignoring bad EMBL line for " + this.accession
- + ": " + line);
+ Console.error("Ignoring bad EMBL line for " + this.accession + ": "
+ + line);
break;
}
if (tokens[1].startsWith("/"))
protected String parseFeature(String line) throws IOException
{
String[] tokens = line.trim().split(WHITESPACE);
- if (tokens.length < 2 || (!"CDS".equals(tokens[0]) && (!"source".equals(tokens[0]))))
+ if (tokens.length < 2
+ || (!"CDS".equals(tokens[0]) && (!"source".equals(tokens[0]))))
{
return nextLine();
}