X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=forester%2Fjava%2Fsrc%2Forg%2Fforester%2Fphylogeny%2FPhylogenyNode.java;h=8dedcd20a9989d54049799d8a266d78fa12a6725;hb=e37b8c622b4d0a46d3dd170e3cd130bca39ee468;hp=c7a1caf0ee6e28d075102f4bcb0b74ffbb85c801;hpb=5c10c6e6d65f086e4a021d358314f377bb97342d;p=jalview.git diff --git a/forester/java/src/org/forester/phylogeny/PhylogenyNode.java b/forester/java/src/org/forester/phylogeny/PhylogenyNode.java index c7a1caf..8dedcd2 100644 --- a/forester/java/src/org/forester/phylogeny/PhylogenyNode.java +++ b/forester/java/src/org/forester/phylogeny/PhylogenyNode.java @@ -42,15 +42,15 @@ import org.forester.phylogeny.iterators.PhylogenyNodeIterator; import org.forester.phylogeny.iterators.PreorderTreeIterator; import org.forester.util.ForesterUtil; -public class PhylogenyNode implements PhylogenyNodeI, Comparable { +public final class PhylogenyNode implements PhylogenyNodeI, Comparable { - private static int _node_count = 0; + private static int _node_count = 0; private byte _indicator; private int _id; private int _sum_ext_nodes; private float _x; private float _y; - private double _distance_parent; + private double _distance_parent = PhylogenyDataUtil.BRANCH_LENGTH_DEFAULT; private boolean _collapse; private PhylogenyNode _parent; private PhylogenyNode _link; @@ -64,12 +64,20 @@ public class PhylogenyNode implements PhylogenyNodeI, Comparable * Default constructor for PhylogenyNode. */ public PhylogenyNode() { - init(); + // init(); setId( PhylogenyNode.getNodeCount() ); PhylogenyNode.increaseNodeCount(); setSumExtNodes( 1 ); // For ext node, this number is 1 (not 0!!) } + public void reset() { + _parent = null; + _link = null; + _descendants = null; + _node_data = null; + _branch_data = null; + } + /** * Adds PhylogenyNode n to the list of child nodes and sets the _parent of n * to this. @@ -334,6 +342,9 @@ public class PhylogenyNode implements PhylogenyNodeI, Comparable } final public List getDescendants() { + if ( _descendants == null ) { + _descendants = new ArrayList(); + } return _descendants; } @@ -486,6 +497,9 @@ public class PhylogenyNode implements PhylogenyNodeI, Comparable } final public int getNumberOfDescendants() { + if ( _descendants == null ) { + return 0; + } return _descendants.size(); } @@ -577,13 +591,12 @@ public class PhylogenyNode implements PhylogenyNodeI, Comparable return result; } - final private void init() { - _descendants = new ArrayList(); - _parent = null; - _id = 0; - initializeData(); - } - + // final private void init() { + //_descendants = new ArrayList(); + // _parent = null; //TODO not needed? + // _id = 0; //TODO not needed? + //initializeData(); //TODO not needed? + //} /** * Deletes data of this PhylogenyNode. Links to the other Nodes in the * Phylogeny, the ID and the sum of external nodes are NOT deleted. Field @@ -591,18 +604,17 @@ public class PhylogenyNode implements PhylogenyNodeI, Comparable * * @see #getLink() (Last modified: 12/20/03) */ - final public void initializeData() { - _indicator = 0; - _x = 0; - _y = 0; - //_node_name = ""; - _distance_parent = PhylogenyDataUtil.BRANCH_LENGTH_DEFAULT; - _collapse = false; - _link = null; - _branch_data = null; - _node_data = null; - } - + // final private void initializeData() { + // _indicator = 0; + // _x = 0; + // _y = 0; + // //_node_name = ""; + // _distance_parent = PhylogenyDataUtil.BRANCH_LENGTH_DEFAULT; + // _collapse = false; + // _link = null; + // _branch_data = null; + // _node_data = null; + // } /** * Returns whether this PhylogenyNode should be drawn as collapsed. */ @@ -624,6 +636,9 @@ public class PhylogenyNode implements PhylogenyNodeI, Comparable * @return true if this PhylogenyNode is external, false otherwise */ final public boolean isExternal() { + if ( _descendants == null ) { + return true; + } return ( getNumberOfDescendants() < 1 ); } @@ -992,7 +1007,7 @@ public class PhylogenyNode implements PhylogenyNodeI, Comparable /** * Swaps the the two childern of a PhylogenyNode node of this Phylogeny. */ - public void swapChildren() throws RuntimeException { + public final void swapChildren() throws RuntimeException { if ( isExternal() ) { throw new RuntimeException( "attempt to swap descendants of external node" ); } @@ -1044,15 +1059,45 @@ public class PhylogenyNode implements PhylogenyNodeI, Comparable @Override final public String toString() { - final StringBuilder sb = new StringBuilder(); - if ( !ForesterUtil.isEmpty( getName() ) ) { + StringBuilder sb = new StringBuilder(); + if ( ForesterUtil.isEmpty( getName() ) ) { sb.append( getName() ); sb.append( " " ); } - sb.append( "[" ); - sb.append( getId() ); - sb.append( "]" ); - return sb.toString(); + if ( getNodeData().isHasTaxonomy() ) { + if ( !ForesterUtil.isEmpty( getNodeData().getTaxonomy().getScientificName() ) ) { + sb.append( getNodeData().getTaxonomy().getScientificName() ); + sb.append( " " ); + } + else if ( !ForesterUtil.isEmpty( getNodeData().getTaxonomy().getTaxonomyCode() ) ) { + sb.append( getNodeData().getTaxonomy().getTaxonomyCode() ); + sb.append( " " ); + } + else if ( getNodeData().getTaxonomy().getIdentifier() != null ) { + sb.append( getNodeData().getTaxonomy().getIdentifier().toString() ); + sb.append( " " ); + } + } + if ( getNodeData().isHasSequence() ) { + if ( !ForesterUtil.isEmpty( getNodeData().getSequence().getName() ) ) { + sb.append( getNodeData().getSequence().getName() ); + sb.append( " " ); + } + else if ( !ForesterUtil.isEmpty( getNodeData().getSequence().getSymbol() ) ) { + sb.append( getNodeData().getSequence().getSymbol() ); + sb.append( " " ); + } + else if ( getNodeData().getSequence().getAccession() != null ) { + sb.append( getNodeData().getTaxonomy().getIdentifier().toString() ); + sb.append( " " ); + } + } + if ( sb.length() <= 1 ) { + sb.append( "[" ); + sb.append( getId() ); + sb.append( "]" ); + } + return sb.toString().trim(); } /** @@ -1105,7 +1150,7 @@ public class PhylogenyNode implements PhylogenyNodeI, Comparable private PhylogenyNode( final String nhx, final PhylogenyMethods.TAXONOMY_EXTRACTION taxonomy_extraction, final boolean replace_underscores ) throws NHXFormatException { - init(); + // init(); NHXParser.parseNHX( nhx, this, taxonomy_extraction, replace_underscores ); setId( PhylogenyNode.getNodeCount() ); PhylogenyNode.increaseNodeCount();