return current_node;
}
+ public final PhylogenyNode getNextExternalNodeWhileTakingIntoAccountCollapsedNodes() {
+ //TODO work on me ~~
+ if ( isInternal() && !isCollapse() ) {
+ throw new UnsupportedOperationException( "attempt to get next external node of an uncollapsed internal node" );
+ }
+ if ( isRoot() ) {
+ return null;
+ }
+ if ( getParent().isCollapse() ) {
+ throw new UnsupportedOperationException( "attempt to get next external node of node with a collapsed parent" );
+ }
+ // This checks if last node.
+ PhylogenyNode n = this;
+ boolean last = true;
+ while ( !n.isRoot() ) {
+ if ( !n.isLastChildNode() ) {
+ last = false;
+ break;
+ }
+ n = n.getParent();
+ }
+ if ( last ) {
+ return null;
+ }
+ int index = getChildNodeIndex();
+ PhylogenyNode previous_node = this;
+ PhylogenyNode current_node = getParent();
+ while ( !current_node.isRoot()
+ && ( current_node.isCollapse() || ( current_node.getNumberOfDescendants() == 1 ) || previous_node
+ .isLastChildNode() ) ) {
+ index = current_node.getChildNodeIndex();
+ previous_node = current_node;
+ current_node = current_node.getParent();
+ }
+ if ( index < current_node.getNumberOfDescendants() - 1 ) {
+ current_node = current_node.getChildNode( index + 1 );
+ }
+ while ( current_node.isInternal() && !current_node.isCollapse() ) {
+ current_node = current_node.getFirstChildNode();
+ }
+ return current_node;
+ }
+
public final NodeData getNodeData() {
if ( _node_data == null ) {
_node_data = new NodeData();
}
public static PhylogenyNode createInstanceFromNhxString( final String nhx ) throws NHXFormatException {
- return new PhylogenyNode( nhx, ForesterUtil.TAXONOMY_EXTRACTION.NO, false );
+ return new PhylogenyNode( nhx, PhylogenyMethods.TAXONOMY_EXTRACTION.NO, false );
}
public static PhylogenyNode createInstanceFromNhxString( final String nhx,
- final ForesterUtil.TAXONOMY_EXTRACTION taxonomy_extraction )
+ final PhylogenyMethods.TAXONOMY_EXTRACTION taxonomy_extraction )
throws NHXFormatException {
return new PhylogenyNode( nhx, taxonomy_extraction, false );
}
public static PhylogenyNode createInstanceFromNhxString( final String nhx,
- final ForesterUtil.TAXONOMY_EXTRACTION taxonomy_extraction,
+ final PhylogenyMethods.TAXONOMY_EXTRACTION taxonomy_extraction,
final boolean replace_underscores )
throws NHXFormatException {
return new PhylogenyNode( nhx, taxonomy_extraction, replace_underscores );
}
private PhylogenyNode( final String nhx,
- final ForesterUtil.TAXONOMY_EXTRACTION taxonomy_extraction,
+ final PhylogenyMethods.TAXONOMY_EXTRACTION taxonomy_extraction,
final boolean replace_underscores ) throws NHXFormatException {
init();
NHXParser.parseNHX( nhx, this, taxonomy_extraction, replace_underscores );