import org.forester.util.ForesterUtil;
/**
- * Warning. Implementation of method 'compareTo' only looks at
+ * Warning. Implementation of method 'compareTo' only looks at
* node name. Thus, use of this class in SortedSets might lead
* to unexpected behavior.
*
private PhylogenyNode( final String nhx,
final NHXParser.TAXONOMY_EXTRACTION taxonomy_extraction,
final boolean replace_underscores ) throws NHXFormatException, PhyloXmlDataFormatException {
- NHXParser.parseNHX( nhx, this, taxonomy_extraction, replace_underscores, false, false );
+ NHXParser.parseNHX( nhx, this, taxonomy_extraction, replace_underscores, false, false, false );
+ setId( PhylogenyNode.getNodeCount() );
+ PhylogenyNode.increaseNodeCount();
+ setSumExtNodes( 1 ); // For ext node, this number is 1 (not 0!!).
+ }
+
+ private PhylogenyNode( final String nhx,
+ final NHXParser.TAXONOMY_EXTRACTION taxonomy_extraction,
+ final boolean replace_underscores,
+ final boolean parse_extended_tags ) throws NHXFormatException, PhyloXmlDataFormatException {
+ NHXParser.parseNHX( nhx,
+ this,
+ taxonomy_extraction,
+ replace_underscores,
+ false,
+ false,
+ parse_extended_tags );
setId( PhylogenyNode.getNodeCount() );
PhylogenyNode.increaseNodeCount();
setSumExtNodes( 1 ); // For ext node, this number is 1 (not 0!!).
/**
* Adds PhylogenyNode n to the list of child nodes and sets the _parent of n
* to this.
- *
+ *
* @param n
* the PhylogenyNode to add
*/
* Returns a new PhylogenyNode which has its data copied from this
* PhylogenyNode. Links to the other Nodes in the same Phylogeny are NOT
* copied (e.g. _link to _parent). Field "_link" IS copied.
- *
- * @see #getLink()
+ *
+ * @see #getLink()
*/
final public PhylogenyNode copyNodeData() {
final PhylogenyNode node = new PhylogenyNode();
* Returns a new PhylogenyNode which has the same data as this
* PhylogenyNode. Links to the other Nodes in the same Phylogeny are NOT
* copied (e.g. _link to _parent). Field "_link" IS copied.
- *
- * @see #getLink()
+ *
+ * @see #getLink()
*/
final public PhylogenyNode copyNodeDataShallow() {
final PhylogenyNode node = new PhylogenyNode();
@Override
/**
* Based on node name, sequence, and taxonomy.
- *
- *
+ *
+ *
*/
final public boolean equals( final Object o ) {
if ( this == o ) {
/**
* Returns a List containing references to all external children of this
* PhylogenyNode.
- *
+ *
* @return List of references to external Nodes
*/
final public List<PhylogenyNode> getAllExternalDescendants() {
/**
* Returns a List containing references to all names of the external
* children of this PhylogenyNode.
- *
+ *
* @return List of references to names of external Nodes
*/
final public List<String> getAllExternalDescendantsNames() {
/**
* This return child node n of this node.
- *
+ *
* @param n
* the index of the child to get
* @return the child node with index n
/**
* This gets the child node index of this node.
* <p>
- *
+ *
* @return the child node index of this node
* @throws UnsupportedOperationException
* if this node is a root node
* parent
* <p>
* [last modified Aug 14, 2006 by CMZ]
- *
+ *
* @return the child node index of this node
* @throws UnsupportedOperationException
* if this node is a root node
* Convenience method. Returns the first child node of this node.
* <p>
* [last modified May 18, 2005 by CMZ]
- *
+ *
* @return the first child node of this node
*/
public final PhylogenyNode getFirstChildNode() {
* Convenience method. Returns the last child node of this node.
* <p>
* [last modified May 18, 2005 by CMZ]
- *
+ *
* @return the last child node of this node
*/
public final PhylogenyNode getLastChildNode() {
/**
* Checks whether this PhylogenyNode is external (tip).
- *
+ *
* @return true if this PhylogenyNode is external, false otherwise
*/
final public boolean isExternal() {
/**
* Checks whether this PhylogenyNode is internal (tip).
- *
+ *
* @return true if this PhylogenyNode is external, false otherwise
*/
final public boolean isInternal() {
* Returns true if this node is the last child node of its _parent.
* <p>
* [last modified June 01, 2005 by CMZ]
- *
+ *
* @return true if this node is the last child node of its _parent, false
* otherwise
*/
/**
* Checks whether this PhylogenyNode is a root.
- *
+ *
* @return true if this PhylogenyNode is the root, false otherwise
*/
final public boolean isRoot() {
* child nodes. This does not allow null slots in the list of child nodes:
* If i is larger than the number of child nodes, n is just added to the
* list, not place at index i.
- *
+ *
* @param i
* the index of position where to add the child
* @param n
}
if ( getNumberOfDescendants() != 2 ) {
throw new RuntimeException( "attempt to swap descendants of node with " + getNumberOfDescendants()
- + " descendants" );
+ + " descendants" );
}
final PhylogenyNode a = getChildNode( 0 );
final PhylogenyNode b = getChildNode( 1 );
// ---------------------------------------------------------
final public String toNewHampshire( final boolean write_distance_to_parent,
final NH_CONVERSION_SUPPORT_VALUE_STYLE svs ) {
- final StringBuilder sb = new StringBuilder();
String data = "";
if ( ( svs == NH_CONVERSION_SUPPORT_VALUE_STYLE.AS_INTERNAL_NODE_NAMES ) && !isExternal() ) {
if ( getBranchData().isHasConfidences()
&& ( getBranchData().getConfidence( 0 ).getValue() != Confidence.CONFIDENCE_DEFAULT_VALUE ) ) {
data = Confidence.FORMATTER.format( ForesterUtil
- .round( getBranchData().getConfidence( 0 ).getValue(),
- PhyloXmlUtil.ROUNDING_DIGITS_FOR_PHYLOXML_DOUBLE_OUTPUT ) );
+ .round( getBranchData().getConfidence( 0 ).getValue(),
+ PhyloXmlUtil.ROUNDING_DIGITS_FOR_PHYLOXML_DOUBLE_OUTPUT ) );
}
}
else if ( !ForesterUtil.isEmpty( getName() ) ) {
else if ( !ForesterUtil.isEmpty( getNodeData().getTaxonomy().getCommonName() ) ) {
data = getNodeData().getTaxonomy().getCommonName();
}
- else if ( getNodeData().getTaxonomy().getTaxonomyCode() != null ) {
- data = getNodeData().getTaxonomy().getTaxonomyCode();
- }
}
else if ( getNodeData().isHasSequence() ) {
if ( !ForesterUtil.isEmpty( getNodeData().getSequence().getName() ) ) {
data = getNodeData().getSequence().getName();
}
- }
- data = data.trim();
- if ( data.length() > 0 ) {
- data = data.replaceAll( "'", "_" );
- if ( ForesterUtil.isContainsParanthesesableNhCharacter( data ) ) {
- sb.append( '\'' );
- sb.append( data );
- sb.append( '\'' );
+ else if ( !ForesterUtil.isEmpty( getNodeData().getSequence().getSymbol() ) ) {
+ data = getNodeData().getSequence().getSymbol();
}
- else {
- sb.append( data );
+ else if ( !ForesterUtil.isEmpty( getNodeData().getSequence().getGeneName() ) ) {
+ data = getNodeData().getSequence().getGeneName();
}
}
+ final StringBuilder sb = ForesterUtil.santitizeStringForNH( data );
if ( write_distance_to_parent && ( getDistanceToParent() != PhylogenyDataUtil.BRANCH_LENGTH_DEFAULT ) ) {
sb.append( ":" );
sb.append( getDistanceToParent() );
&& ( getBranchData().getConfidence( 0 ).getValue() != Confidence.CONFIDENCE_DEFAULT_VALUE ) ) {
sb.append( "[" );
sb.append( Confidence.FORMATTER.format( ForesterUtil
- .round( getBranchData().getConfidence( 0 ).getValue(),
- PhyloXmlUtil.ROUNDING_DIGITS_FOR_PHYLOXML_DOUBLE_OUTPUT ) ) );
+ .round( getBranchData().getConfidence( 0 ).getValue(),
+ PhyloXmlUtil.ROUNDING_DIGITS_FOR_PHYLOXML_DOUBLE_OUTPUT ) ) );
sb.append( "]" );
}
return sb.toString();
* representation.
*/
final public String toNewHampshireX() {
- final StringBuffer sb = new StringBuffer();
+ final StringBuilder sb = new StringBuilder();
final StringBuffer s_nhx = new StringBuffer();
if ( !ForesterUtil.isEmpty( getName() ) ) {
- //final String name = ForesterUtil.replaceIllegalNhCharacters( getName() );
- final String name = getName().trim();
- if ( ForesterUtil.isContainsParanthesesableNhCharacter( name ) ) {
- sb.append( '\'' );
- sb.append( name );
- sb.append( '\'' );
- }
- else {
- sb.append( name );
- }
+ sb.append( ForesterUtil.santitizeStringForNH( getName() ) );
}
if ( getDistanceToParent() != PhylogenyDataUtil.BRANCH_LENGTH_DEFAULT ) {
sb.append( ":" );
@Override
final public String toString() {
final StringBuilder sb = new StringBuilder();
+ if ( !ForesterUtil.isEmpty( getName() ) ) {
+ sb.append( getName() );
+ sb.append( " " );
+ }
if ( getNodeData().isHasTaxonomy() ) {
if ( !ForesterUtil.isEmpty( getNodeData().getTaxonomy().getScientificName() ) ) {
sb.append( getNodeData().getTaxonomy().getScientificName() );
sb.append( getNodeData().getSequence().getAccession().toString() );
sb.append( " " );
}
- }
- if ( ( sb.length() <= 1 ) && !ForesterUtil.isEmpty( getName() ) ) {
- sb.append( getName() );
- sb.append( " " );
+ if ( !ForesterUtil.isEmpty( getNodeData().getSequence().getMolecularSequence() ) ) {
+ sb.append( getNodeData().getSequence().getMolecularSequence() );
+ sb.append( " " );
+ }
}
if ( sb.length() <= 1 ) {
sb.append( "[" );
/**
* Adds PhylogenyNode n to the list of child nodes. But does NOT set the
* _parent of n to this.
- *
+ *
* @see addAsChild( PhylogenyNode n )
* @param n
* the PhylogenyNode to add
}
public static PhylogenyNode createInstanceFromNhxString( final String nhx ) throws NHXFormatException,
- PhyloXmlDataFormatException {
+ PhyloXmlDataFormatException {
return new PhylogenyNode( nhx, NHXParser.TAXONOMY_EXTRACTION.NO, false );
}
public static PhylogenyNode createInstanceFromNhxString( final String nhx,
final NHXParser.TAXONOMY_EXTRACTION taxonomy_extraction )
- throws NHXFormatException, PhyloXmlDataFormatException {
+ throws NHXFormatException, PhyloXmlDataFormatException {
return new PhylogenyNode( nhx, taxonomy_extraction, false );
}
public static PhylogenyNode createInstanceFromNhxString( final String nhx,
final NHXParser.TAXONOMY_EXTRACTION taxonomy_extraction,
final boolean replace_underscores )
- throws NHXFormatException, PhyloXmlDataFormatException {
+ throws NHXFormatException, PhyloXmlDataFormatException {
return new PhylogenyNode( nhx, taxonomy_extraction, replace_underscores );
}
+
+ public static PhylogenyNode createInstanceFromNhxString( final String nhx,
+ final NHXParser.TAXONOMY_EXTRACTION taxonomy_extraction,
+ final boolean replace_underscores,
+ final boolean parse_extended_tags )
+ throws NHXFormatException, PhyloXmlDataFormatException {
+ return new PhylogenyNode( nhx, taxonomy_extraction, replace_underscores, parse_extended_tags );
+ }
/**
* Returns the total number of all Nodes created so far.
- *
+ *
* @return total number of Nodes (long)
*/
synchronized final public static long getNodeCount() {