+ public void setTaxonomyExtraction( final TAXONOMY_EXTRACTION taxonomy_extraction ) {
+ _taxonomy_extraction = taxonomy_extraction;
+ }
+
+ private void createPhylogeny( final String name,
+ final StringBuilder nhx,
+ final boolean rooted_info_present,
+ final boolean is_rooted ) throws IOException {
+ final PhylogenyFactory factory = ParserBasedPhylogenyFactory.getInstance();
+ final NHXParser pars = new NHXParser();
+ if ( ( getTaxlabels().size() < 1 ) && ( getTranslateMap().size() < 1 ) ) {
+ pars.setTaxonomyExtraction( getTaxonomyExtraction() );
+ pars.setReplaceUnderscores( isReplaceUnderscores() );
+ pars.setIgnoreQuotes( isIgnoreQuotes() );
+ }
+ else {
+ pars.setTaxonomyExtraction( TAXONOMY_EXTRACTION.NO );
+ pars.setReplaceUnderscores( false );
+ pars.setIgnoreQuotes( false );
+ }
+ if ( rooted_info_present ) {
+ pars.setGuessRootedness( false );
+ }
+ final Phylogeny p = factory.create( nhx, pars )[ 0 ];
+ p.setName( name );
+ if ( rooted_info_present ) {
+ p.setRooted( is_rooted );
+ }
+ if ( ( getTaxlabels().size() > 0 ) || ( getTranslateMap().size() > 0 ) ) {
+ final PhylogenyNodeIterator it = p.iteratorExternalForward();
+ while ( it.hasNext() ) {
+ final PhylogenyNode node = it.next();
+ if ( ( getTranslateMap().size() > 0 ) && getTranslateMap().containsKey( node.getName() ) ) {
+ node.setName( getTranslateMap().get( node.getName() ).replaceAll( "['\"]+", "" ) );
+ }
+ else if ( getTaxlabels().size() > 0 ) {
+ int i = -1;
+ try {
+ i = Integer.parseInt( node.getName() );
+ }
+ catch ( final NumberFormatException e ) {
+ // Ignore.
+ }
+ if ( i > 0 ) {
+ node.setName( getTaxlabels().get( i - 1 ).replaceAll( "['\"]+", "" ) );
+ }
+ }
+ if ( !isReplaceUnderscores() && ( ( getTaxonomyExtraction() != TAXONOMY_EXTRACTION.NO ) ) ) {
+ ParserUtils.extractTaxonomyDataFromNodeName( node, getTaxonomyExtraction() );
+ // final String tax = ParserUtils.extractTaxonomyCodeFromNodeName( node.getName(),
+ // getTaxonomyExtraction() );
+ // if ( !ForesterUtil.isEmpty( tax ) ) {
+ // if ( !node.getNodeData().isHasTaxonomy() ) {
+ // node.getNodeData().setTaxonomy( new Taxonomy() );
+ // }
+ // node.getNodeData().getTaxonomy().setTaxonomyCode( tax );
+ // }
+ }
+ }
+ }
+ getPhylogenies().add( p );
+ }
+
+ private Object getNexusSource() {
+ return _nexus_source;
+ }
+
+ private List<Phylogeny> getPhylogenies() {
+ return _phylogenies;
+ }
+
+ private Phylogeny[] getPhylogeniesAsArray() {
+ final Phylogeny[] p = new Phylogeny[ getPhylogenies().size() ];
+ for( int i = 0; i < getPhylogenies().size(); ++i ) {
+ p[ i ] = getPhylogenies().get( i );
+ }
+ return p;
+ }
+
+ private List<String> getTaxlabels() {
+ return _taxlabels;
+ }
+
+ private TAXONOMY_EXTRACTION getTaxonomyExtraction() {
+ return _taxonomy_extraction;
+ }
+
+ private Map<String, String> getTranslateMap() {
+ return _translate_map;
+ }
+
+ private boolean isIgnoreQuotes() {
+ return _ignore_quotes_in_nh_data;
+ }
+
+ private boolean isReplaceUnderscores() {
+ return _replace_underscores;
+ }
+
+ private void reset() {
+ setPhylogenies( new ArrayList<Phylogeny>() );
+ setTaxlabels( new ArrayList<String>() );
+ setTranslateMap( new HashMap<String, String>() );
+ }
+
+ private void setPhylogenies( final ArrayList<Phylogeny> phylogenies ) {
+ _phylogenies = phylogenies;
+ }
+