1
package figtree.flutree;
3
import jebl.evolution.trees.Tree;
4
import jebl.evolution.io.NewickImporter;
5
import jebl.evolution.io.ImportException;
6
import jam.controlpalettes.ControlPalette;
7
import jam.panels.SearchPanel;
8
import jam.panels.SearchPanelListener;
9
import jam.panels.StatusBar;
10
import figtree.application.FigTreeNexusImporter;
11
import figtree.treeviewer.*;
12
import figtree.panel.SimpleTreeViewer;
13
import figtree.panel.FigTreePanel;
14
import figtree.panel.SimpleControlPalette;
21
import java.net.MalformedURLException;
24
* @author Andrew Rambaut
25
* @author Alexei Drummond
26
* @version $Id: FigTreeApplet.java,v 1.1 2007/08/14 15:50:41 rambaut Exp $
28
public class FluTreeApplet extends JApplet {
29
private ControlPalette controlPalette1;
30
private ControlPalette controlPalette2;
31
private FigTreePanel figTreePanel;
33
private StatusBar statusBar;
35
private SearchPanel filterPanel;
36
private JPopupMenu filterPopup;
38
private TreeViewer treeViewer;
41
FigTreePanel.Style style = FigTreePanel.Style.DEFAULT;
43
String styleParam = getParameter("style");
44
if (styleParam != null) {
45
style = FigTreePanel.Style.valueOf(styleParam.trim().toUpperCase());
48
treeViewer = new MultiPaneTreeViewer();
49
controlPalette1 = new SimpleControlPalette();
50
controlPalette2 = new SimpleControlPalette();
52
figTreePanel = new FigTreePanel(treeViewer, controlPalette1, controlPalette2, style);
54
filterPopup = new JPopupMenu();
55
for (TreeViewer.TextSearchType searchType : TreeViewer.TextSearchType.values()) {
56
filterPopup.add(searchType.toString());
58
filterPanel = new SearchPanel("Filter", filterPopup, true);
59
filterPanel.setOpaque(false);
60
filterPanel.addSearchPanelListener(new SearchPanelListener() {
63
* Called when the user requests a search by pressing return having
64
* typed a search string into the text field. If the continuousUpdate
65
* flag is true then this method is called when the user types into
68
* @param searchString the user's search string
70
public void searchStarted(String searchString) {
71
int index = filterPopup.getSelectionModel().getSelectedIndex();
72
if (index == -1) index = 0;
73
TreeViewer.TextSearchType searchType = TreeViewer.TextSearchType.values()[index];
74
treeViewer.selectTaxa("!name", searchType, searchString, false);
78
* Called when the user presses the cancel search button or presses
79
* escape while the search is in focus.
81
public void searchStopped() {
82
treeViewer.clearSelectedTaxa();
86
// statusBar = new StatusBar("");
87
// statusBar.setStatusProvider(treeViewer);
88
// statusBar.add(filterPanel, BorderLayout.EAST);
90
// if (style != FigTreePanel.Style.ICARUS_SMALL) {
91
// getContentPane().add(statusBar, BorderLayout.NORTH);
94
getContentPane().add(figTreePanel, BorderLayout.CENTER);
99
String tree = getParameter("tree");
100
String treefile = getParameter("treefile");
102
if (tree != null && tree.length() > 0) {
105
fileURL = new URL(tree);
107
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(fileURL.openStream()));
108
readData(bufferedReader, true);
109
} catch (MalformedURLException e) {
110
// treeViewer.setStatusText(e.getMessage());
111
} catch (IOException e) {
112
// treeViewer.setStatusText(e.getMessage());
114
} else if (treefile != null && treefile.length() > 0) {
116
BufferedReader bufferedReader = new BufferedReader(new StringReader(treefile));
117
readData(bufferedReader, true);
118
} catch (IOException e) {
119
// treeViewer.setStatusText(e.getMessage());
122
// treeViewer.setStatusText("Tree not specified");
129
protected boolean readData(Reader reader, boolean isNexus) throws IOException {
131
java.util.List<Tree> trees = new ArrayList<Tree>();
134
Map<String, Object> settings = new HashMap<String, Object>();
135
// First of all, fully populate the settings map so that
136
// all the settings have defaults
137
controlPalette1.getSettings(settings);
138
controlPalette2.getSettings(settings);
141
FigTreeNexusImporter importer = new FigTreeNexusImporter(reader);
142
while (importer.hasTree()) {
143
Tree tree = importer.importNextTree();
146
// Try to find a figtree block and if found, parse the settings
149
importer.findNextBlock();
150
if (importer.getNextBlockName().equalsIgnoreCase("FIGTREE")) {
151
importer.parseFigTreeBlock(settings);
153
} catch (EOFException ex) {
158
NewickImporter importer = new NewickImporter(reader, true);
159
while (importer.hasTree()) {
160
Tree tree = importer.importNextTree();
165
if (trees.size() == 0) {
166
throw new ImportException("This file contained no trees.");
168
treeViewer.setTrees(trees);
169
controlPalette1.setSettings(settings);
170
controlPalette2.setSettings(settings);
171
} catch (ImportException ie) {
172
JOptionPane.showMessageDialog(this, "Error reading tree file: " + ie,
174
JOptionPane.ERROR_MESSAGE);
b'\\ No newline at end of file'