X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=forester%2Fjava%2Fsrc%2Forg%2Fforester%2Fphylogeny%2FPhylogenyNode.java;h=7bf60ef16e3fe3a6024587366e3610ee42755a98;hb=038c34792757a86f24296de5683e722fab3f9307;hp=5ef3b5fff544d8ed96d4f5c8042fad57b673abca;hpb=9e7512a2c885b4f1e58e310225235087f5ea3738;p=jalview.git diff --git a/forester/java/src/org/forester/phylogeny/PhylogenyNode.java b/forester/java/src/org/forester/phylogeny/PhylogenyNode.java index 5ef3b5f..7bf60ef 100644 --- a/forester/java/src/org/forester/phylogeny/PhylogenyNode.java +++ b/forester/java/src/org/forester/phylogeny/PhylogenyNode.java @@ -27,17 +27,13 @@ package org.forester.phylogeny; -import java.io.IOException; import java.util.ArrayList; import java.util.List; -import org.forester.archaeopteryx.Archaeopteryx; import org.forester.io.parsers.nhx.NHXFormatException; import org.forester.io.parsers.nhx.NHXParser; import org.forester.phylogeny.data.BranchData; import org.forester.phylogeny.data.NodeData; -import org.forester.phylogeny.factories.ParserBasedPhylogenyFactory; -import org.forester.phylogeny.factories.PhylogenyFactory; import org.forester.phylogeny.iterators.ChildNodeIteratorForward; import org.forester.phylogeny.iterators.PhylogenyNodeIterator; import org.forester.phylogeny.iterators.PreorderTreeIterator; @@ -420,7 +416,23 @@ public class PhylogenyNode implements PhylogenyNodeI, Comparable if ( isInternal() && !isCollapse() ) { throw new UnsupportedOperationException( "attempt to get next external node of an uncollapsed internal node" ); } - else if ( isLastExternalNode() ) { + 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(); @@ -431,148 +443,17 @@ public class PhylogenyNode implements PhylogenyNodeI, Comparable .isLastChildNode() ) ) { index = current_node.getChildNodeIndex(); previous_node = current_node; - System.out.println(" " + previous_node.getName()); current_node = current_node.getParent(); } - // if ( !current_node.isCollapse() ) { - current_node = current_node.getChildNode( index + 1 ); - //} + 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 static void main( final String[] args ) { - try { - final PhylogenyFactory factory = ParserBasedPhylogenyFactory.getInstance(); - PhylogenyNode n; - List ext = new ArrayList(); -// final StringBuffer sb0 = new StringBuffer( -// "((a,b)ab,(((c,d)cd,e)cde,(f,(g,h))fgh)cdefgh)abcdefgh" ); -// final Phylogeny t0 = factory.create( sb0, new NHXParser() )[ 0 ]; -// -// t0.getNode( "cd" ).setCollapse( true ); -// t0.getNode( "cde" ).setCollapse( true ); - // n = t0.getFirstExternalNode(); - -// while ( n != null ) { -// System.out.println( n.getName() ); -// ext.add( n ); -// n = n.getNextExternalNodeWhileTakingIntoAccountCollapsedNodes(); -// } -// -// // Archaeopteryx.createApplication( t ); -// if ( !ext.get( 0 ).getName().equals( "a" ) ) { -// System.out.println( "0 fail" ); -// } -// if ( !ext.get( 1 ).getName().equals( "b" ) ) { -// System.out.println( "1 fail" ); -// } -// if ( !ext.get( 2 ).getName().equals( "cde" ) ) { -// System.out.println( "2 fail" ); -// } -// if ( !ext.get( 3 ).getName().equals( "f" ) ) { -// System.out.println( "3 fail" ); -// } -// if ( !ext.get( 4 ).getName().equals( "g" ) ) { -// System.out.println( "4 fail" ); -// } -// if ( !ext.get( 5 ).getName().equals( "h" ) ) { -// System.out.println( "5 fail" ); -// } - // if ( !ext.get( 6 ).getName().equals( "a" ) ) { - // System.out.println( "6 fail" ); - // } - // if ( !ext.get( 7 ).getName().equals( "a" ) ) { - // System.out.println( "7 fail" ); - // } - - - final StringBuffer sb1 = new StringBuffer( - "((a,b)ab,(((c,d)cd,e)cde,(f,(g,h))fgh)cdefgh)abcdefgh" ); - final Phylogeny t1 = factory.create( sb1, new NHXParser() )[ 0 ]; - - t1.getNode( "ab" ).setCollapse( true ); - t1.getNode( "cd" ).setCollapse( true ); - t1.getNode( "cde" ).setCollapse( true ); - // n = t1.getFirstExternalNode(); - n = t1.getNode( "ab" ); - ext = new ArrayList(); - while ( n != null ) { - System.out.println( n.getName() ); - ext.add( n ); - n = n.getNextExternalNodeWhileTakingIntoAccountCollapsedNodes(); - } - - // Archaeopteryx.createApplication( t1 ); - if ( !ext.get( 0 ).getName().equals( "ab" ) ) { - System.out.println( "0 fail" ); - } - - if ( !ext.get( 1 ).getName().equals( "cde" ) ) { - System.out.println( "1 fail" ); - } - if ( !ext.get( 2 ).getName().equals( "f" ) ) { - System.out.println( "2 fail" ); - } - if ( !ext.get( 3 ).getName().equals( "g" ) ) { - System.out.println( "3 fail" ); - } - if ( !ext.get( 4 ).getName().equals( "h" ) ) { - System.out.println( "4 fail" ); - } - - // - // - final StringBuffer sb2 = new StringBuffer( - "((a,b)ab,(((c,d)cd,e)cde,(f,(g,h)gh)fgh)cdefgh)abcdefgh" ); - final Phylogeny t2 = factory.create( sb2, new NHXParser() )[ 0 ]; - - t2.getNode( "ab" ).setCollapse( true ); - t2.getNode( "cd" ).setCollapse( true ); - t2.getNode( "cde" ).setCollapse( true ); - t2.getNode( "c" ).setCollapse( true ); - t2.getNode( "d" ).setCollapse( true ); - t2.getNode( "e" ).setCollapse( true ); - t2.getNode( "gh" ).setCollapse( true ); - // t2.getNode( "h" ).setCollapse( true ); - // n = t1.getFirstExternalNode(); - n = t2.getNode( "ab" ); - ext = new ArrayList(); - while ( n != null ) { - System.out.println( n.getName() ); - ext.add( n ); - n = n.getNextExternalNodeWhileTakingIntoAccountCollapsedNodes(); - } - - // Archaeopteryx.createApplication( t1 ); - if ( !ext.get( 0 ).getName().equals( "ab" ) ) { - System.out.println( "0 fail" ); - } - - if ( !ext.get( 1 ).getName().equals( "cde" ) ) { - System.out.println( "1 fail" ); - } - if ( !ext.get( 2 ).getName().equals( "f" ) ) { - System.out.println( "2 fail" ); - } - if ( !ext.get( 3 ).getName().equals( "g" ) ) { - System.out.println( "3 fail" ); - } - if ( !ext.get( 4 ).getName().equals( "h" ) ) { - System.out.println( "4 fail" ); - } - - - } - catch ( IOException e ) { - // TODO Auto-generated catch block - e.printStackTrace(); - } - } - - + public final NodeData getNodeData() { if ( _node_data == null ) { _node_data = new NodeData(); @@ -1168,24 +1049,24 @@ public class PhylogenyNode implements PhylogenyNodeI, Comparable } 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 );