JAL-2805 added getter in trees for retrieving all node sequences
[jalview.git] / src / jalview / ext / archaeopteryx / Tree.java
index 93091b7..76808e8 100644 (file)
@@ -1,8 +1,9 @@
 package jalview.ext.archaeopteryx;
 
-import jalview.ext.treeviewer.ExternalTreeFrame;
-import jalview.ext.treeviewer.ExternalTreeI;
-import jalview.ext.treeviewer.ExternalTreeNodeI;
+import jalview.datamodel.SequenceI;
+import jalview.ext.treeviewer.TreeFrameI;
+import jalview.ext.treeviewer.TreeI;
+import jalview.ext.treeviewer.TreeNodeI;
 
 import java.util.Iterator;
 
@@ -11,14 +12,19 @@ import org.forester.phylogeny.Phylogeny;
 import org.forester.phylogeny.PhylogenyMethods;
 import org.forester.phylogeny.PhylogenyNode;
 
-public class Tree implements ExternalTreeI
+public class Tree implements TreeI
 {
   private final Phylogeny tree;
 
+  // alternative to static maps in TreeNode
+  // private Map<PhylogenyNode, TreeNodeI> originalNodes = new HashMap<>(500);
+  // private Map<TreeNodeI, PhylogenyNode> wrappedNodes = new HashMap<>(500);
+
   public Tree()
   {
     tree = new Phylogeny();
   }
+
   public Tree(Phylogeny aptxTree)
   {
     tree = aptxTree;
@@ -32,16 +38,16 @@ public class Tree implements ExternalTreeI
             .iteratorPostorder(); iterator.hasNext();)
     {
       PhylogenyNode foresterNode = iterator.next();
-      ExternalTreeNodeI treeNode = TreeNode
+      TreeNodeI treeNode = TreeNode
               .getUniqueWrapper(foresterNode);
 
     }
   }
 
   @Override
-  public ExternalTreeNodeI getRoot()
+  public TreeNodeI getRoot()
   {
-    ExternalTreeNodeI root = TreeNode.getUniqueWrapper(tree.getRoot());
+    TreeNodeI root = TreeNode.getUniqueWrapper(tree.getRoot());
     return root;
   }
 
@@ -53,7 +59,7 @@ public class Tree implements ExternalTreeI
   }
 
   @Override
-  public ExternalTreeNodeI getNodeWithName(String name)
+  public TreeNodeI getNodeWithName(String name)
   {
     return TreeNode.getUniqueWrapper(tree.getNode(name));
 
@@ -92,7 +98,7 @@ public class Tree implements ExternalTreeI
   }
 
   @Override
-  public void setRoot(ExternalTreeNodeI rootNode)
+  public void setRoot(TreeNodeI rootNode)
   {
     PhylogenyNode treeRoot = TreeNode.unwrapNode(rootNode);
     tree.setRoot(treeRoot);
@@ -107,31 +113,31 @@ public class Tree implements ExternalTreeI
   }
 
   @Override
-  public Iterator<ExternalTreeNodeI> iterateInPreOrder()
+  public Iterator<TreeNodeI> iterateInPreOrder()
   {
-    Iterator<ExternalTreeNodeI> iter = new TreeIterator(
+    Iterator<TreeNodeI> iter = new TreeIterator(
             tree.iteratorPreorder());
     return iter;
   }
 
   @Override
-  public Iterator<ExternalTreeNodeI> iterateInLevelOrder()
+  public Iterator<TreeNodeI> iterateInLevelOrder()
   {
-    Iterator<ExternalTreeNodeI> iter = new TreeIterator(
+    Iterator<TreeNodeI> iter = new TreeIterator(
             tree.iteratorLevelOrder());
     return iter;
   }
 
   @Override
-  public Iterator<ExternalTreeNodeI> iterateInPostOrder()
+  public Iterator<TreeNodeI> iterateInPostOrder()
   {
-    Iterator<ExternalTreeNodeI> iter = new TreeIterator(
+    Iterator<TreeNodeI> iter = new TreeIterator(
             tree.iteratorPostorder());
     return iter;
   }
 
   @Override
-  public ExternalTreeNodeI getFurthestNode()
+  public TreeNodeI getFurthestNode()
   {
     PhylogenyNode furthestNode = PhylogenyMethods
             .calculateNodeWithMaxDistanceToRoot(tree);
@@ -139,12 +145,38 @@ public class Tree implements ExternalTreeI
   }
 
   @Override
-  public ExternalTreeFrame createTreeViewerFromTree(String instanceTitle)
+  public TreeFrameI createTreeViewerFromTree(String instanceTitle)
   {
     return new AptxFrame(Archaeopteryx.createApplication(tree,
             AptxInit.APTX_CONFIG,
             instanceTitle));
   }
 
+  @Override
+  public SequenceI[] getNodeSequences()
+  {
+    SequenceI[] treeSeqs = new SequenceI[tree.getNodeCount()];
+    Iterator<TreeNodeI> iter = iterateInPreOrder();
+    int i = 0;
+    while (iter.hasNext())
+    {
+      SequenceI nodeSeq = iter.next().getSequence();
+      treeSeqs[i++] = nodeSeq;
+    }
+    return treeSeqs;
+  }
+
+  @Override
+  public TreeNodeI[] getAllNodes()
+  {
+    TreeNodeI[] treeNodes = new TreeNodeI[tree.getNodeCount()];
+    Iterator<TreeNodeI> iter = iterateInPreOrder();
+    int i = 0;
+    while (iter.hasNext())
+    {
+      treeNodes[i++] = iter.next();
+    }
+    return treeNodes;
+  }
 
 }