X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=forester%2Fjava%2Fsrc%2Forg%2Fforester%2Fanalysis%2FTaxonomyDataManager.java;h=d78720cf4dcfc660171f46c48fe6f24b43089c4b;hb=06b38f91bc061d8ab1dfea3b6238c94c95a30d26;hp=79ab713b954667b908f58128c7b5f9a8b2043757;hpb=5fa5ccc8d3c9a6f68d3b1078c40113d8b316c6dc;p=jalview.git diff --git a/forester/java/src/org/forester/analysis/TaxonomyDataManager.java b/forester/java/src/org/forester/analysis/TaxonomyDataManager.java index 79ab713..d78720c 100644 --- a/forester/java/src/org/forester/analysis/TaxonomyDataManager.java +++ b/forester/java/src/org/forester/analysis/TaxonomyDataManager.java @@ -33,6 +33,7 @@ import java.util.HashMap; import java.util.List; import java.util.SortedSet; import java.util.TreeSet; +import java.util.regex.Matcher; import javax.swing.JOptionPane; @@ -40,13 +41,16 @@ import org.forester.archaeopteryx.MainFrameApplication; import org.forester.archaeopteryx.TreePanel; import org.forester.archaeopteryx.tools.AncestralTaxonomyInferrer; import org.forester.archaeopteryx.tools.RunnableProcess; +import org.forester.io.parsers.nhx.NHXParser; import org.forester.io.parsers.phyloxml.PhyloXmlDataFormatException; +import org.forester.io.parsers.util.ParserUtils; import org.forester.phylogeny.Phylogeny; import org.forester.phylogeny.PhylogenyNode; import org.forester.phylogeny.data.Identifier; import org.forester.phylogeny.data.Taxonomy; import org.forester.phylogeny.iterators.PhylogenyNodeIterator; import org.forester.util.ForesterUtil; +import org.forester.util.TaxonomyUtil; import org.forester.ws.seqdb.SequenceDbWsTools; import org.forester.ws.seqdb.UniProtTaxonomy; @@ -56,7 +60,7 @@ public final class TaxonomyDataManager extends RunnableProcess { CODE, SN, CN, ID, LIN; } private static final int MAX_CACHE_SIZE = 100000; - private static final int MAX_TAXONOMIES_TO_RETURN = 10; + private static final int MAX_TAXONOMIES_TO_RETURN = 2000; private static final HashMap _sn_up_cache_map = new HashMap(); private static final HashMap _lineage_up_cache_map = new HashMap(); private static final HashMap _code_up_cache_map = new HashMap(); @@ -184,20 +188,24 @@ public final class TaxonomyDataManager extends RunnableProcess { } private final static List getTaxonomiesFromScientificName( final String query ) throws IOException { - if ( query.equalsIgnoreCase( UniProtTaxonomy.BACTERIA ) || - query.equalsIgnoreCase( UniProtTaxonomy.ARCHAEA ) || - query.equalsIgnoreCase( UniProtTaxonomy.VIRUSES ) || - query.equalsIgnoreCase( UniProtTaxonomy.EUKARYOTA ) - ) { + if ( query.equalsIgnoreCase( UniProtTaxonomy.BACTERIA ) || query.equalsIgnoreCase( UniProtTaxonomy.ARCHAEA ) + || query.equalsIgnoreCase( UniProtTaxonomy.VIRUSES ) + || query.equalsIgnoreCase( UniProtTaxonomy.EUKARYOTA ) || query.equalsIgnoreCase( UniProtTaxonomy.X ) ) { final List l = new ArrayList(); l.add( UniProtTaxonomy.createSpecialFromScientificName( query ) ); return l; } - return SequenceDbWsTools.getTaxonomiesFromScientificNameStrict( query, MAX_TAXONOMIES_TO_RETURN ); } private final static List getTaxonomiesFromTaxonomyCode( final String query ) throws IOException { + //FIXME fix "SPHAR" issue + if ( ( ( query.indexOf( "XX" ) == 3 ) && TaxonomyUtil.isHasTaxIdFromFakeTaxCode( query ) ) + || query.equals( "SPHAR" ) /* TODO remove me, is same as Sphingomonas aromaticivorans */ + ) { + final int id = TaxonomyUtil.getTaxIdFromFakeTaxCode( query ); + return SequenceDbWsTools.getTaxonomiesFromId( String.valueOf( id ), MAX_TAXONOMIES_TO_RETURN ); + } return SequenceDbWsTools.getTaxonomiesFromTaxonomyCode( query, MAX_TAXONOMIES_TO_RETURN ); } @@ -243,7 +251,10 @@ public final class TaxonomyDataManager extends RunnableProcess { if ( ( ( tax != null ) && ( isHasAppropriateId( tax ) || !ForesterUtil.isEmpty( tax.getScientificName() ) || !ForesterUtil.isEmpty( tax.getTaxonomyCode() ) || !ForesterUtil.isEmpty( tax.getCommonName() ) ) ) || ( allow_to_use_basic_node_names && !ForesterUtil.isEmpty( node.getName() ) ) ) { - if ( tax != null ) { + if ( ( ( tax != null ) && ( isHasAppropriateId( tax ) + || !ForesterUtil.isEmpty( tax.getScientificName() ) + || !ForesterUtil.isEmpty( tax.getTaxonomyCode() ) || !ForesterUtil + .isEmpty( tax.getCommonName() ) ) ) ) { uniprot_tax = obtainUniProtTaxonomy( tax, null, qt ); } else { @@ -253,7 +264,6 @@ public final class TaxonomyDataManager extends RunnableProcess { if ( tax == null ) { tax = new Taxonomy(); node.getNodeData().addTaxonomy( tax ); - node.setName( "" ); } updateTaxonomy( qt, node, tax, uniprot_tax ); } @@ -320,15 +330,39 @@ public final class TaxonomyDataManager extends RunnableProcess { if ( ForesterUtil.isEmpty( simple_name ) ) { throw new IllegalArgumentException( "illegal attempt to use empty simple name" ); } - qt = QUERY_TYPE.SN; - UniProtTaxonomy ut = obtainTaxonomy( TaxonomyDataManager.getSnTaxCacheMap(), simple_name, qt ); - if ( ut == null ) { + UniProtTaxonomy ut = null; + final String code = ParserUtils.extractTaxonomyCodeFromNodeName( simple_name, + NHXParser.TAXONOMY_EXTRACTION.AGGRESSIVE ); + if ( !ForesterUtil.isEmpty( code ) ) { qt = QUERY_TYPE.CODE; - ut = obtainTaxonomy( TaxonomyDataManager.getCodeTaxCacheMap(), simple_name, qt ); + ut = obtainTaxonomy( TaxonomyDataManager.getCodeTaxCacheMap(), code, qt ); } if ( ut == null ) { - qt = QUERY_TYPE.CN; - ut = obtainTaxonomy( TaxonomyDataManager.getCnTaxCacheMap(), simple_name, qt ); + final String sn = ParserUtils.extractScientificNameFromNodeName( simple_name ); + if ( !ForesterUtil.isEmpty( sn ) ) { + qt = QUERY_TYPE.SN; + ut = obtainTaxonomy( TaxonomyDataManager.getSnTaxCacheMap(), sn, qt ); + } + } + if ( ut == null ) { + final String id = ParserUtils + .extractUniprotTaxonomyIdFromNodeName( simple_name, + NHXParser.TAXONOMY_EXTRACTION.PFAM_STYLE_RELAXED ); + if ( !ForesterUtil.isEmpty( id ) ) { + qt = QUERY_TYPE.ID; + ut = obtainTaxonomy( TaxonomyDataManager.getIdTaxCacheMap(), id, qt ); + } + } + if ( ut == null ) { + String sn = ""; + final Matcher m = ParserUtils.TAXOMONY_SN_PATTERN_GENUS.matcher( simple_name ); + if ( m.matches() ) { + sn = m.group( 1 ); + } + if ( !ForesterUtil.isEmpty( sn ) ) { + qt = QUERY_TYPE.SN; + ut = obtainTaxonomy( TaxonomyDataManager.getSnTaxCacheMap(), sn, qt ); + } } return ut; }