3 import jalview.bin.Cache;
4 import jalview.ws.seqfetcher.DbSourceProxy;
6 import java.awt.BorderLayout;
7 import java.awt.Component;
8 import java.awt.Container;
9 import java.awt.Dimension;
10 import java.awt.FlowLayout;
11 import java.awt.event.ActionEvent;
12 import java.awt.event.ActionListener;
13 import java.util.ArrayList;
14 import java.util.Hashtable;
15 import java.util.List;
16 import java.util.Vector;
18 import javax.swing.JButton;
19 import javax.swing.JFrame;
20 import javax.swing.JLabel;
21 import javax.swing.JPanel;
22 import javax.swing.JScrollPane;
23 import javax.swing.JTree;
24 import javax.swing.JViewport;
25 import javax.swing.tree.DefaultMutableTreeNode;
26 import javax.swing.tree.DefaultTreeCellRenderer;
27 import javax.swing.tree.DefaultTreeModel;
28 import javax.swing.tree.MutableTreeNode;
29 import javax.swing.tree.TreeCellRenderer;
30 import javax.swing.tree.TreeModel;
31 import javax.swing.tree.TreePath;
32 import javax.swing.tree.TreeSelectionModel;
34 import com.sun.java.help.search.DBPartParameters;
36 public class JDatabaseTree extends JalviewDialog
38 JButton getDatabaseSelectorButton()
40 final JButton viewdbs = new JButton("--- Select Database ---");
41 viewdbs.addActionListener(new ActionListener()
45 public void actionPerformed(ActionEvent arg0)
57 private jalview.ws.SequenceFetcher sfetcher;
59 public JDatabaseTree(jalview.ws.SequenceFetcher sfetch)
63 * Dynamically generated database list will need a translation function from
64 * internal source to externally distinct names. UNIPROT and UP_NAME are
65 * identical DB sources, and should be collapsed.
67 DefaultMutableTreeNode tn = null, root = new DefaultMutableTreeNode();
68 Hashtable<DbSourceProxy, DefaultMutableTreeNode> tns = new Hashtable<DbSourceProxy, DefaultMutableTreeNode>();
69 Hashtable<String, DefaultMutableTreeNode> source = new Hashtable<String, DefaultMutableTreeNode>();
71 String dbs[] = sfetch.getSupportedDb();
72 Hashtable ht = new Hashtable();
73 for (int i = 0; i < dbs.length; i++)
75 tn = source.get(dbs[i]);
76 List<DbSourceProxy> srcs = sfetch.getSourceProxy(dbs[i]);
79 source.put(dbs[i], tn = new DefaultMutableTreeNode(dbs[i], true));
81 for (DbSourceProxy dbp : srcs)
83 if (ht.get(dbp.getDbName()) == null)
85 tn.add(new DefaultMutableTreeNode(dbp, false));
86 ht.put(dbp.getDbName(), dbp.getDbName());
88 System.err.println("dupe ig for : "+dbs[i]+" \t"+dbp.getDbName());
92 for (int i = 0; i < dbs.length; i++)
94 tn = source.get(dbs[i]);
99 if (tn.getChildCount() == 1)
101 // remove nodes with only one child
102 source.put(dbs[i], tn = (DefaultMutableTreeNode) tn.getChildAt(0));
106 initDialogFrame(this, true, false, "Select Database Retrieval Source",
108 svp = new JScrollPane();
109 //svp.setAutoscrolls(true);
110 dbviews = new JTree(new DefaultTreeModel(root, false));
111 dbviews.setCellRenderer(new DbTreeRenderer(this));
113 dbviews.getSelectionModel().setSelectionMode(
114 TreeSelectionModel.SINGLE_TREE_SELECTION);
115 svp.getViewport().setView(dbviews);
116 svp.getViewport().setMinimumSize(new Dimension(300,250));
117 //svp.setSize(300,250);
118 // JPanel panel=new JPanel();
119 // panel.setSize(new Dimension(350,220));
122 add(svp, BorderLayout.NORTH);
123 JPanel j = new JPanel(new FlowLayout());
124 j.setPreferredSize(new Dimension(300,50));
127 add(j, BorderLayout.CENTER);
131 private class DbTreeRenderer extends DefaultTreeCellRenderer implements
136 public DbTreeRenderer(JDatabaseTree me)
141 private Component returnLabel(String txt)
143 JLabel jl = new JLabel(txt);
144 jl.setFont(JvSwingUtils.getLabelFont());
149 public Component getTreeCellRendererComponent(JTree tree, Object value,
150 boolean selected, boolean expanded, boolean leaf, int row,
154 if (value != null && value instanceof DefaultMutableTreeNode)
156 DefaultMutableTreeNode vl = (DefaultMutableTreeNode) value;
157 value = vl.getUserObject();
158 if (value instanceof DbSourceProxy)
160 val = (((DbSourceProxy) value).getDbName());
164 if (value instanceof String)
166 val = ((String) value);
174 return super.getTreeCellRendererComponent(tree, val, selected,
175 expanded, leaf, row, hasFocus);
180 List<DbSourceProxy> selection = null;
183 protected void raiseClosed()
185 for (ActionListener al : lstners)
187 al.actionPerformed(null);
192 protected void okPressed()
194 _setSelectionState();
199 protected void cancelPressed()
204 private void showDialog(Container parent)
210 public boolean hasSelection()
212 return selection == null ? false : selection.size() == 0 ? false : true;
215 public List<DbSourceProxy> getSelectedSources()
220 private void _setSelectionState()
222 if (dbviews.getSelectionCount() == 0)
226 List<DbSourceProxy> srcs = new ArrayList<DbSourceProxy>();
227 for (TreePath tp : dbviews.getSelectionPaths())
229 DefaultMutableTreeNode dmt = (DefaultMutableTreeNode) tp
230 .getLastPathComponent();
231 if (dmt.getUserObject() != null)
233 if (dmt.getUserObject() instanceof DbSourceProxy)
235 srcs.add((DbSourceProxy) dmt.getUserObject());
239 srcs.addAll(sfetcher.getSourceProxy((String) dmt.getUserObject()));
246 public String getSelectedItem()
250 return getSelectedSources().get(0).getDbName();
255 public String getExampleQueries()
261 StringBuffer sb = new StringBuffer();
262 for (DbSourceProxy dbs : getSelectedSources())
268 sb.append(dbs.getTestQuery());
270 return sb.toString();
273 List<ActionListener> lstners = new Vector<ActionListener>();
275 public void addActionListener(ActionListener actionListener)
277 lstners.add(actionListener);
280 public void removeActionListener(ActionListener actionListener)
282 lstners.remove(actionListener);
285 public static void main(String args[])
287 Cache.getDasSourceRegistry();
288 JDatabaseTree jdt = new JDatabaseTree(new jalview.ws.SequenceFetcher());
289 JFrame foo = new JFrame();
290 foo.setLayout(new BorderLayout());
291 foo.add(jdt.getDatabaseSelectorButton(), BorderLayout.CENTER);
293 foo.setVisible(true);
295 final Thread us = Thread.currentThread();
296 jdt.addActionListener(new ActionListener()
300 public void actionPerformed(ActionEvent e)
310 } catch (InterruptedException x)
313 if (!jdt.hasSelection())
315 System.out.println("No Selection");
319 System.out.println("Selection: " + jdt.getSelectedItem());
321 for (DbSourceProxy pr : jdt.getSelectedSources())
323 System.out.println("Source " + s++ + ": " + pr.getDbName()
324 + " (" + pr.getDbSource() + ") Version "
325 + pr.getDbVersion() + ". Test:\t" + pr.getTestQuery());
327 System.out.println("Test queries: " + jdt.getExampleQueries());
330 } while (nultimes > 0 && foo.isVisible());
331 foo.setVisible(false);