JAL-1953 start work on storing nodes in a map per tree object instead of
[jalview.git] / src / jalview / ext / archaeopteryx / Tree.java
1 package jalview.ext.archaeopteryx;
2
3 import jalview.ext.treeviewer.TreeFrameI;
4 import jalview.ext.treeviewer.TreeI;
5 import jalview.ext.treeviewer.TreeNodeI;
6
7 import java.util.Iterator;
8
9 import org.forester.archaeopteryx.Archaeopteryx;
10 import org.forester.phylogeny.Phylogeny;
11 import org.forester.phylogeny.PhylogenyMethods;
12 import org.forester.phylogeny.PhylogenyNode;
13
14 public class Tree implements TreeI
15 {
16   private final Phylogeny tree;
17
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);
21
22   public Tree()
23   {
24     tree = new Phylogeny();
25   }
26   public Tree(Phylogeny aptxTree)
27   {
28     tree = aptxTree;
29     wrapAllTreeNodes();
30
31   }
32
33   private void wrapAllTreeNodes()
34   {
35     for (Iterator<PhylogenyNode> iterator = tree
36             .iteratorPostorder(); iterator.hasNext();)
37     {
38       PhylogenyNode foresterNode = iterator.next();
39       TreeNodeI treeNode = TreeNode
40               .getUniqueWrapper(foresterNode);
41
42     }
43   }
44
45   @Override
46   public TreeNodeI getRoot()
47   {
48     TreeNodeI root = TreeNode.getUniqueWrapper(tree.getRoot());
49     return root;
50   }
51
52   @Override
53   public void setTreeName(String name)
54   {
55     tree.setName(name);
56
57   }
58
59   @Override
60   public TreeNodeI getNodeWithName(String name)
61   {
62     return TreeNode.getUniqueWrapper(tree.getNode(name));
63
64   }
65
66   @Override
67   public String[] getAllLeafNames()
68   {
69     return tree.getAllExternalNodeNames();
70   }
71
72   @Override
73   public void setRerootable(boolean b)
74   {
75     tree.setRerootable(b);
76
77   }
78
79   @Override
80   public void setRooted(boolean b)
81   {
82     tree.setRooted(b);
83
84   }
85
86   @Override
87   public boolean isEmpty()
88   {
89     return tree.isEmpty();
90   }
91
92   @Override
93   public String getTreeName()
94   {
95     return tree.getName();
96   }
97
98   @Override
99   public void setRoot(TreeNodeI rootNode)
100   {
101     PhylogenyNode treeRoot = TreeNode.unwrapNode(rootNode);
102     tree.setRoot(treeRoot);
103     wrapAllTreeNodes();
104
105   }
106
107   @Override
108   public double getHeight(boolean adjustForCollapsedSubtrees)
109   {
110     return tree.calculateHeight(adjustForCollapsedSubtrees);
111   }
112
113   @Override
114   public Iterator<TreeNodeI> iterateInPreOrder()
115   {
116     Iterator<TreeNodeI> iter = new TreeIterator(
117             tree.iteratorPreorder());
118     return iter;
119   }
120
121   @Override
122   public Iterator<TreeNodeI> iterateInLevelOrder()
123   {
124     Iterator<TreeNodeI> iter = new TreeIterator(
125             tree.iteratorLevelOrder());
126     return iter;
127   }
128
129   @Override
130   public Iterator<TreeNodeI> iterateInPostOrder()
131   {
132     Iterator<TreeNodeI> iter = new TreeIterator(
133             tree.iteratorPostorder());
134     return iter;
135   }
136
137   @Override
138   public TreeNodeI getFurthestNode()
139   {
140     PhylogenyNode furthestNode = PhylogenyMethods
141             .calculateNodeWithMaxDistanceToRoot(tree);
142     return TreeNode.getUniqueWrapper(furthestNode);
143   }
144
145   @Override
146   public TreeFrameI createTreeViewerFromTree(String instanceTitle)
147   {
148     return new AptxFrame(Archaeopteryx.createApplication(tree,
149             AptxInit.APTX_CONFIG,
150             instanceTitle));
151   }
152
153
154 }