~ubuntu-branches/ubuntu/utopic/figtree/utopic

« back to all changes in this revision

Viewing changes to src/figtree/flutree/FluTreeApplet.java

  • Committer: Bazaar Package Importer
  • Author(s): Andreas Tille
  • Date: 2011-02-21 08:17:38 UTC
  • Revision ID: james.westby@ubuntu.com-20110221081738-80pe2ulo8rg7up10
Tags: upstream-1.3.1
ImportĀ upstreamĀ versionĀ 1.3.1

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
package figtree.flutree;
 
2
 
 
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;
 
15
 
 
16
import javax.swing.*;
 
17
import java.awt.*;
 
18
import java.io.*;
 
19
import java.util.*;
 
20
import java.net.URL;
 
21
import java.net.MalformedURLException;
 
22
 
 
23
/**
 
24
 * @author Andrew Rambaut
 
25
 * @author Alexei Drummond
 
26
 * @version $Id: FigTreeApplet.java,v 1.1 2007/08/14 15:50:41 rambaut Exp $
 
27
 */
 
28
public class FluTreeApplet extends JApplet {
 
29
    private ControlPalette controlPalette1;
 
30
    private ControlPalette controlPalette2;
 
31
    private FigTreePanel figTreePanel;
 
32
 
 
33
    private StatusBar statusBar;
 
34
 
 
35
    private SearchPanel filterPanel;
 
36
    private JPopupMenu filterPopup;
 
37
 
 
38
    private TreeViewer treeViewer;
 
39
 
 
40
    public void init() {
 
41
        FigTreePanel.Style style = FigTreePanel.Style.DEFAULT;
 
42
 
 
43
        String styleParam = getParameter("style");
 
44
        if (styleParam != null) {
 
45
            style = FigTreePanel.Style.valueOf(styleParam.trim().toUpperCase());
 
46
        }
 
47
 
 
48
        treeViewer = new MultiPaneTreeViewer();
 
49
        controlPalette1 = new SimpleControlPalette();
 
50
        controlPalette2 = new SimpleControlPalette();
 
51
 
 
52
        figTreePanel = new FigTreePanel(treeViewer, controlPalette1, controlPalette2, style);
 
53
 
 
54
        filterPopup = new JPopupMenu();
 
55
        for (TreeViewer.TextSearchType searchType : TreeViewer.TextSearchType.values()) {
 
56
            filterPopup.add(searchType.toString());
 
57
        }
 
58
        filterPanel = new SearchPanel("Filter", filterPopup, true);
 
59
        filterPanel.setOpaque(false);
 
60
        filterPanel.addSearchPanelListener(new SearchPanelListener() {
 
61
 
 
62
            /**
 
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
 
66
             * the text field.
 
67
             *
 
68
             * @param searchString the user's search string
 
69
             */
 
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);
 
75
            }
 
76
 
 
77
            /**
 
78
             * Called when the user presses the cancel search button or presses
 
79
             * escape while the search is in focus.
 
80
             */
 
81
            public void searchStopped() {
 
82
                treeViewer.clearSelectedTaxa();
 
83
            }
 
84
        });
 
85
 
 
86
//              statusBar = new StatusBar("");
 
87
//              statusBar.setStatusProvider(treeViewer);
 
88
//              statusBar.add(filterPanel, BorderLayout.EAST);
 
89
 
 
90
//              if (style != FigTreePanel.Style.ICARUS_SMALL) {
 
91
//                      getContentPane().add(statusBar, BorderLayout.NORTH);
 
92
//              }
 
93
 
 
94
        getContentPane().add(figTreePanel, BorderLayout.CENTER);
 
95
 
 
96
    }
 
97
 
 
98
    public void start() {
 
99
        String tree = getParameter("tree");
 
100
        String treefile = getParameter("treefile");
 
101
 
 
102
        if (tree != null && tree.length() > 0) {
 
103
            URL fileURL = null;
 
104
            try {
 
105
                fileURL = new URL(tree);
 
106
 
 
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());
 
113
            }
 
114
        } else if (treefile != null && treefile.length() > 0) {
 
115
            try {
 
116
                BufferedReader bufferedReader = new BufferedReader(new StringReader(treefile));
 
117
                readData(bufferedReader, true);
 
118
            } catch (IOException e) {
 
119
//                              treeViewer.setStatusText(e.getMessage());
 
120
            }
 
121
        } else {
 
122
//                      treeViewer.setStatusText("Tree not specified");
 
123
        }
 
124
    }
 
125
 
 
126
    public void stop() {
 
127
    }
 
128
 
 
129
    protected boolean readData(Reader reader, boolean isNexus) throws IOException {
 
130
 
 
131
        java.util.List<Tree> trees = new ArrayList<Tree>();
 
132
 
 
133
        try {
 
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);
 
139
 
 
140
            if (isNexus) {
 
141
                FigTreeNexusImporter importer = new FigTreeNexusImporter(reader);
 
142
                while (importer.hasTree()) {
 
143
                    Tree tree = importer.importNextTree();
 
144
                    trees.add(tree);
 
145
                }
 
146
                // Try to find a figtree block and if found, parse the settings
 
147
                while (true) {
 
148
                    try {
 
149
                        importer.findNextBlock();
 
150
                        if (importer.getNextBlockName().equalsIgnoreCase("FIGTREE")) {
 
151
                            importer.parseFigTreeBlock(settings);
 
152
                        }
 
153
                    } catch (EOFException ex) {
 
154
                        break;
 
155
                    }
 
156
                }
 
157
            } else {
 
158
                NewickImporter importer = new NewickImporter(reader, true);
 
159
                while (importer.hasTree()) {
 
160
                    Tree tree = importer.importNextTree();
 
161
                    trees.add(tree);
 
162
                }
 
163
            }
 
164
 
 
165
            if (trees.size() == 0) {
 
166
                throw new ImportException("This file contained no trees.");
 
167
            }
 
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,
 
173
                    "Import Error",
 
174
                    JOptionPane.ERROR_MESSAGE);
 
175
            return false;
 
176
        }
 
177
 
 
178
        return true;
 
179
    }
 
180
 
 
181
 
 
182
}
 
 
b'\\ No newline at end of file'