From: cmzmasek@gmail.com Date: Tue, 5 Jul 2011 07:03:00 +0000 (+0000) Subject: working on issue of collapsed nodes in circular display X-Git-Url: http://source.jalview.org/gitweb/?a=commitdiff_plain;h=9e7512a2c885b4f1e58e310225235087f5ea3738;p=jalview.git working on issue of collapsed nodes in circular display --- diff --git a/forester/java/src/org/forester/phylogeny/PhylogenyNode.java b/forester/java/src/org/forester/phylogeny/PhylogenyNode.java index c341108..5ef3b5f 100644 --- a/forester/java/src/org/forester/phylogeny/PhylogenyNode.java +++ b/forester/java/src/org/forester/phylogeny/PhylogenyNode.java @@ -27,13 +27,17 @@ 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; @@ -413,8 +417,8 @@ public class PhylogenyNode implements PhylogenyNodeI, Comparable public final PhylogenyNode getNextExternalNodeWhileTakingIntoAccountCollapsedNodes() { //TODO work on me ~~ - if ( isInternal() ) { - throw new UnsupportedOperationException( "attempt to get next external node of an internal node" ); + if ( isInternal() && !isCollapse() ) { + throw new UnsupportedOperationException( "attempt to get next external node of an uncollapsed internal node" ); } else if ( isLastExternalNode() ) { return null; @@ -423,18 +427,152 @@ public class PhylogenyNode implements PhylogenyNodeI, Comparable PhylogenyNode previous_node = this; PhylogenyNode current_node = getParent(); while ( !current_node.isRoot() - && ( ( current_node.getNumberOfDescendants() == 1 ) || previous_node.isLastChildNode() ) ) { + && ( current_node.isCollapse() || ( current_node.getNumberOfDescendants() == 1 ) || previous_node + .isLastChildNode() ) ) { index = current_node.getChildNodeIndex(); previous_node = current_node; + System.out.println(" " + previous_node.getName()); current_node = current_node.getParent(); } - current_node = current_node.getChildNode( index + 1 ); - while ( current_node.isInternal() ) { + // if ( !current_node.isCollapse() ) { + 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();