3 import jalview.ws.seqfetcher.DbSourceProxy;
5 import java.awt.BorderLayout;
6 import java.awt.Component;
7 import java.awt.Container;
8 import java.awt.FlowLayout;
9 import java.awt.event.ActionEvent;
10 import java.awt.event.ActionListener;
11 import java.util.ArrayList;
12 import java.util.Hashtable;
13 import java.util.List;
14 import java.util.Vector;
16 import javax.swing.JButton;
17 import javax.swing.JFrame;
18 import javax.swing.JLabel;
19 import javax.swing.JPanel;
20 import javax.swing.JScrollPane;
21 import javax.swing.JTree;
22 import javax.swing.JViewport;
23 import javax.swing.tree.DefaultMutableTreeNode;
24 import javax.swing.tree.DefaultTreeCellRenderer;
25 import javax.swing.tree.DefaultTreeModel;
26 import javax.swing.tree.MutableTreeNode;
27 import javax.swing.tree.TreeCellRenderer;
28 import javax.swing.tree.TreeModel;
29 import javax.swing.tree.TreePath;
30 import javax.swing.tree.TreeSelectionModel;
32 import com.sun.java.help.search.DBPartParameters;
34 public class JDatabaseTree extends JalviewDialog
36 JButton getDatabaseSelectorButton()
38 final JButton viewdbs = new JButton("--- Select Database ---");
39 viewdbs.addActionListener(new ActionListener()
43 public void actionPerformed(ActionEvent arg0)
51 JScrollPane svp = new JScrollPane();
55 private jalview.ws.SequenceFetcher sfetcher;
57 public JDatabaseTree(jalview.ws.SequenceFetcher sfetch)
61 * Dynamically generated database list will need a translation function from
62 * internal source to externally distinct names. UNIPROT and UP_NAME are
63 * identical DB sources, and should be collapsed.
65 DefaultMutableTreeNode tn = null, root = new DefaultMutableTreeNode();
66 Hashtable<DbSourceProxy, DefaultMutableTreeNode> tns = new Hashtable<DbSourceProxy, DefaultMutableTreeNode>();
67 Hashtable<String, DefaultMutableTreeNode> source = new Hashtable<String, DefaultMutableTreeNode>();
69 String dbs[] = sfetch.getOrderedSupportedSources();
70 for (int i = 0; i < dbs.length; i++)
72 tn = source.get(dbs[i]);
73 List<DbSourceProxy> srcs = sfetch.getSourceProxy(dbs[i]);
76 source.put(dbs[i], tn = new DefaultMutableTreeNode(dbs[i], true));
79 for (DbSourceProxy dbp : srcs)
81 tn.add(new DefaultMutableTreeNode(dbp, false));
85 for (int i = 0; i < dbs.length; i++)
87 tn = source.get(dbs[i]);
88 if (tn.getChildCount() == 1)
90 // remove nodes with only one child
91 source.put(dbs[i], tn = (DefaultMutableTreeNode) tn.getChildAt(0));
95 initDialogFrame(this, true, false, "Select Database Retrieval Source",
98 dbviews = new JTree(new DefaultTreeModel(root, false));
99 dbviews.setCellRenderer(new DbTreeRenderer(this));
101 dbviews.getSelectionModel().setSelectionMode(TreeSelectionModel.SINGLE_TREE_SELECTION);
102 add(svp, BorderLayout.CENTER);
103 JPanel j=new JPanel(new FlowLayout());
106 add(j,BorderLayout.SOUTH);
107 svp.getViewport().setView(dbviews);
110 private class DbTreeRenderer extends DefaultTreeCellRenderer implements TreeCellRenderer
114 public DbTreeRenderer(JDatabaseTree me)
119 private Component returnLabel(String txt)
121 JLabel jl = new JLabel(txt);
122 jl.setFont(JvSwingUtils.getLabelFont());
127 public Component getTreeCellRendererComponent(JTree tree, Object value,
128 boolean selected, boolean expanded, boolean leaf, int row,
132 if (value != null && value instanceof DefaultMutableTreeNode)
134 DefaultMutableTreeNode vl = (DefaultMutableTreeNode) value;
135 value = vl.getUserObject();
136 if (value instanceof DbSourceProxy)
138 val=(((DbSourceProxy) value).getDbName());
142 if (value instanceof String)
144 val=((String) value);
152 return super.getTreeCellRendererComponent(tree, val, selected, expanded, leaf, row, hasFocus);
157 List<DbSourceProxy> selection = null;
160 protected void raiseClosed()
162 for (ActionListener al : lstners)
164 al.actionPerformed(null);
169 protected void okPressed()
171 _setSelectionState();
176 protected void cancelPressed()
181 private void showDialog(Container parent)
186 public boolean hasSelection()
188 return selection == null ? false : selection.size() == 0 ? false : true;
191 public List<DbSourceProxy> getSelectedSources()
196 private void _setSelectionState()
198 if (dbviews.getSelectionCount() == 0)
202 List<DbSourceProxy> srcs = new ArrayList<DbSourceProxy>();
203 for (TreePath tp : dbviews.getSelectionPaths())
205 DefaultMutableTreeNode dmt = (DefaultMutableTreeNode) tp
206 .getLastPathComponent();
207 if (dmt.getUserObject()!=null) {
208 if (dmt.getUserObject() instanceof DbSourceProxy) {
209 srcs.add((DbSourceProxy) dmt.getUserObject());
213 srcs.addAll(sfetcher.getSourceProxy((String) dmt.getUserObject()));
220 public String getSelectedItem()
224 return getSelectedSources().get(0).getDbName();
229 public String getExampleQueries()
235 StringBuffer sb = new StringBuffer();
236 for (DbSourceProxy dbs : getSelectedSources())
242 sb.append(dbs.getTestQuery());
244 return sb.toString();
247 List<ActionListener> lstners = new Vector<ActionListener>();
249 public void addActionListener(ActionListener actionListener)
251 lstners.add(actionListener);
254 public void removeActionListener(ActionListener actionListener)
256 lstners.remove(actionListener);
259 public static void main(String args[])
261 JDatabaseTree jdt = new JDatabaseTree(new jalview.ws.SequenceFetcher());
262 JFrame foo = new JFrame();
263 foo.setLayout(new BorderLayout());
264 foo.add(jdt.getDatabaseSelectorButton(), BorderLayout.CENTER);
266 foo.setVisible(true);
268 final Thread us = Thread.currentThread();
269 jdt.addActionListener(new ActionListener()
273 public void actionPerformed(ActionEvent e)
283 } catch (InterruptedException x)
286 if (!jdt.hasSelection())
288 System.out.println("No Selection");
292 System.out.println("Selection: " + jdt.getSelectedItem());
294 for (DbSourceProxy pr : jdt.getSelectedSources())
296 System.out.println("Source " + s++ + ": " + pr.getDbName()
297 + " (" + pr.getDbSource() + ") Version "
298 + pr.getDbVersion() + ". Test:\t" + pr.getTestQuery());
300 System.out.println("Test queries: " + jdt.getExampleQueries());
303 } while (nultimes > 0 && foo.isVisible());
304 foo.setVisible(false);