1 package jalview.ext.archaeopteryx;
3 import jalview.ext.treeviewer.TreeFrameI;
4 import jalview.ext.treeviewer.TreeI;
5 import jalview.ext.treeviewer.TreeNodeI;
7 import java.util.Iterator;
9 import org.forester.archaeopteryx.Archaeopteryx;
10 import org.forester.phylogeny.Phylogeny;
11 import org.forester.phylogeny.PhylogenyMethods;
12 import org.forester.phylogeny.PhylogenyNode;
14 public class Tree implements TreeI
16 private final Phylogeny tree;
18 // alternative to static maps in TreeNode
19 // private Map<PhylogenyNode, TreeNodeI> originalNodes = new HashMap<>(500);
20 // private Map<TreeNodeI, PhylogenyNode> wrappedNodes = new HashMap<>(500);
24 tree = new Phylogeny();
26 public Tree(Phylogeny aptxTree)
33 private void wrapAllTreeNodes()
35 for (Iterator<PhylogenyNode> iterator = tree
36 .iteratorPostorder(); iterator.hasNext();)
38 PhylogenyNode foresterNode = iterator.next();
39 TreeNodeI treeNode = TreeNode
40 .getUniqueWrapper(foresterNode);
46 public TreeNodeI getRoot()
48 TreeNodeI root = TreeNode.getUniqueWrapper(tree.getRoot());
53 public void setTreeName(String name)
60 public TreeNodeI getNodeWithName(String name)
62 return TreeNode.getUniqueWrapper(tree.getNode(name));
67 public String[] getAllLeafNames()
69 return tree.getAllExternalNodeNames();
73 public void setRerootable(boolean b)
75 tree.setRerootable(b);
80 public void setRooted(boolean b)
87 public boolean isEmpty()
89 return tree.isEmpty();
93 public String getTreeName()
95 return tree.getName();
99 public void setRoot(TreeNodeI rootNode)
101 PhylogenyNode treeRoot = TreeNode.unwrapNode(rootNode);
102 tree.setRoot(treeRoot);
108 public double getHeight(boolean adjustForCollapsedSubtrees)
110 return tree.calculateHeight(adjustForCollapsedSubtrees);
114 public Iterator<TreeNodeI> iterateInPreOrder()
116 Iterator<TreeNodeI> iter = new TreeIterator(
117 tree.iteratorPreorder());
122 public Iterator<TreeNodeI> iterateInLevelOrder()
124 Iterator<TreeNodeI> iter = new TreeIterator(
125 tree.iteratorLevelOrder());
130 public Iterator<TreeNodeI> iterateInPostOrder()
132 Iterator<TreeNodeI> iter = new TreeIterator(
133 tree.iteratorPostorder());
138 public TreeNodeI getFurthestNode()
140 PhylogenyNode furthestNode = PhylogenyMethods
141 .calculateNodeWithMaxDistanceToRoot(tree);
142 return TreeNode.getUniqueWrapper(furthestNode);
146 public TreeFrameI createTreeViewerFromTree(String instanceTitle)
148 return new AptxFrame(Archaeopteryx.createApplication(tree,
149 AptxInit.APTX_CONFIG,