JAL-2794 comments comments comments
[jalview.git] / src / jalview / ext / archaeopteryx / ArchaeopteryxInit.java
1 package jalview.ext.archaeopteryx;
2
3 import jalview.analysis.TreeBuilder;
4 import jalview.datamodel.SequenceI;
5 import jalview.gui.Desktop;
6 import jalview.viewmodel.AlignmentViewport;
7
8 import java.awt.Dimension;
9 import java.util.Map;
10
11 import org.forester.archaeopteryx.Archaeopteryx;
12 import org.forester.archaeopteryx.MainFrame;
13 import org.forester.phylogeny.Phylogeny;
14 import org.forester.phylogeny.PhylogenyNode;
15
16 /**
17  * Static class for creating Archaeopteryx tree viewer instances from calculated
18  * trees and letting them be bound to Jalview.
19  * 
20  * @author kjvanderheide
21  *
22  */
23 public final class ArchaeopteryxInit
24 {
25   /**
26    * Test method, should generally not be used as it does not bind the tree to
27    * its alignment
28    * 
29    * @param aptxTrees
30    * @return
31    */
32   public static MainFrame createUnboundInstance(final Phylogeny aptxTree)
33   {
34     Phylogeny[] aptxTrees = { aptxTree };
35     return createBoundAptxFrame(aptxTrees, null);
36   }
37
38   public static MainFrame createInstance(final Phylogeny[] aptxTrees,
39           AlignmentViewport jalviewAlignmentView)
40   {
41     return createBoundAptxFrame(aptxTrees, jalviewAlignmentView);
42
43   }
44
45   public static MainFrame createInstance(final Phylogeny aptxTree,
46           final AlignmentViewport jalviewAlignmentView)
47   {
48     Phylogeny[] aptxTrees = { aptxTree }; // future possibility to load in
49     // several trees simultaneously
50     return createBoundAptxFrame(aptxTrees, jalviewAlignmentView);
51
52   }
53
54   public static MainFrame createInstance(
55           final TreeBuilder calculatedTree) // very dense method, to be split up
56   {
57     ArchaeopteryxTreeConverter aptxTreeBuilder = new ArchaeopteryxTreeConverter(
58             calculatedTree);
59
60     Phylogeny aptxTree = aptxTreeBuilder.buildAptxTree();
61     Phylogeny[] aptxTrees = { aptxTree }; // future possibility to load in
62                                           // several trees simultaneously
63
64     MainFrame aptxApp = createBoundAptxFrame(aptxTrees,
65             calculatedTree.getAvport());
66     bindNodesToJalviewSequences(aptxApp, calculatedTree.getAvport(),
67             aptxTreeBuilder.getAlignmentBoundNodes(),
68             aptxTreeBuilder.getNodesBoundAlignment());
69     return bindFrameToJalview(aptxApp);
70
71   }
72
73
74
75
76   private static MainFrame createBoundAptxFrame(final Phylogeny[] aptxTrees,
77           final AlignmentViewport jalviewAlignmentView)
78   {
79     MainFrame aptxApp = Archaeopteryx.createApplication(aptxTrees,
80             "_aptx_jalview_configuration_file", null);
81
82     return aptxApp;
83   }
84
85   private static void bindNodesToJalviewSequences(final MainFrame aptxApp,
86           final AlignmentViewport jalviewAlignViewport,
87           final Map<SequenceI, PhylogenyNode> alignMappedToNodes,
88           final Map<PhylogenyNode, SequenceI> nodesMappedToAlign)
89   {
90     new JalviewAptxBinding(aptxApp, jalviewAlignViewport,
91             alignMappedToNodes, nodesMappedToAlign);
92   }
93
94
95   private static MainFrame bindFrameToJalview(final MainFrame aptxApp)
96   {
97     int width = 400;
98     int height = 550;
99     aptxApp.setMinimumSize(new Dimension(width, height));
100
101     Desktop.addInternalFrame(aptxApp, "Archaeopteryx Tree View", true,
102             width, height, true, true);
103
104     return aptxApp;
105
106   }
107
108
109 }