JAL-2805 reorganized code, tree building goes through AptxInit for now
[jalview.git] / src / jalview / ext / archaeopteryx / AptxInit.java
1 package jalview.ext.archaeopteryx;
2
3 import jalview.analysis.TreeBuilder;
4 import jalview.datamodel.SequenceI;
5 import jalview.ext.treeviewer.ExternalTreeBuilderI;
6 import jalview.ext.treeviewer.ExternalTreeViewerBindingI;
7 import jalview.gui.Desktop;
8 import jalview.viewmodel.AlignmentViewport;
9
10 import java.awt.Dimension;
11 import java.util.Map;
12
13 import org.forester.archaeopteryx.Archaeopteryx;
14 import org.forester.archaeopteryx.MainFrame;
15 import org.forester.phylogeny.Phylogeny;
16 import org.forester.phylogeny.PhylogenyNode;
17
18 /**
19  * Static class for creating Archaeopteryx tree viewer instances from calculated
20  * trees and letting them be bound to Jalview.
21  * 
22  * @author kjvanderheide
23  *
24  */
25 public final class AptxInit
26 {
27   /**
28    * Test method, should generally not be used as it does not bind the tree to
29    * its alignment
30    * 
31    * @param aptxTrees
32    * @return
33    */
34   public static MainFrame createUnboundInstance(final Phylogeny aptxTree)
35   {
36     Phylogeny[] aptxTrees = { aptxTree };
37     return createAptxFrame(aptxTrees);
38   }
39
40   // public static MainFrame createInstance(final Phylogeny[] aptxTrees,
41   // AlignmentViewport jalviewAlignmentView)
42   // {
43   // return createAptxFrameInJalview(aptxTrees);
44   //
45   // }
46   //
47   // public static MainFrame createInstance(final Phylogeny aptxTree,
48   // final AlignmentViewport jalviewAlignmentView)
49   // {
50   // Phylogeny[] aptxTrees = { aptxTree }; // future possibility to load in
51   // // several trees simultaneously
52   // return createAptxFrameInJalview(aptxTrees);
53   //
54   // }
55
56   public static MainFrame createInstance(
57           final TreeBuilder calculatedTree) // very dense method, to be split up
58   {
59     ExternalTreeBuilderI<Phylogeny, PhylogenyNode> aptxTreeBuilder = new AptxTreeBuilder(
60             calculatedTree);
61
62     Phylogeny aptxTree = aptxTreeBuilder.buildTree();
63     Phylogeny[] aptxTrees = { aptxTree }; // future possibility to load in
64                                           // several trees simultaneously
65
66     MainFrame aptxApp = createAptxFrame(aptxTrees);
67             
68     bindNodesToJalviewSequences(aptxApp, calculatedTree.getAvport(),
69             aptxTreeBuilder.getAlignmentBoundNodes(),
70             aptxTreeBuilder.getNodesBoundAlignment());
71
72     return bindFrameToJalview(aptxApp);
73
74   }
75
76   public static MainFrame createInstanceFromFile(String filePath,
77           AlignmentViewport viewport)
78   {
79     String[] AptxArgs = new String[] { "-c",
80         "_aptx_jalview_configuration_file", filePath };
81     MainFrame aptxApp = Archaeopteryx.main(AptxArgs);
82
83     LoadedTreeAssociation bindAptxNodes = new LoadedTreeAssociation(
84             viewport.getAlignment().getSequencesArray(),
85             aptxApp.getMainPanel().getCurrentTreePanel().getPhylogeny());
86
87     bindAptxNodes.associateLeavesToSequences();
88
89     bindNodesToJalviewSequences(aptxApp, viewport,
90             bindAptxNodes.getAlignmentWithNodes(),
91             bindAptxNodes.getNodesWithAlignment());
92
93     return bindFrameToJalview(aptxApp);
94   }
95
96
97
98   public static MainFrame createAptxFrame(
99           final Phylogeny[] aptxTrees)
100   {
101     MainFrame aptxApp = Archaeopteryx.createApplication(aptxTrees,
102             "_aptx_jalview_configuration_file", null);
103     return aptxApp;
104   }
105
106
107   public static ExternalTreeViewerBindingI<?> bindNodesToJalviewSequences(
108           final MainFrame aptxApp,
109           final AlignmentViewport jalviewAlignViewport,
110           final Map<SequenceI, PhylogenyNode> alignMappedToNodes,
111           final Map<PhylogenyNode, SequenceI> nodesMappedToAlign)
112   {
113     return new JalviewBinding(aptxApp, jalviewAlignViewport,
114             alignMappedToNodes, nodesMappedToAlign);
115   }
116
117
118   public static MainFrame bindFrameToJalview(final MainFrame aptxApp)
119   {
120     int width = 400;
121     int height = 550;
122     aptxApp.setMinimumSize(new Dimension(width, height));
123     // aptxApp.setFont(Desktop.instance.getFont());
124     // aptxApp.getMainPanel().setFont(Desktop.instance.getFont());
125
126     Desktop.addInternalFrame(aptxApp, "Archaeopteryx Tree View", true,
127             width, height, true, true);
128
129     return aptxApp;
130
131   }
132
133
134 }