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