package thaw.plugins.index; import java.awt.BorderLayout; import java.awt.GridLayout; import java.util.Iterator; import java.util.Vector; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.JTextArea; import thaw.core.I18n; import thaw.core.Logger; import thaw.fcp.FreenetURIHelper; import thaw.plugins.Hsqldb; /** * Class helping to display a dialog allowing the user to choose an index. (For example, it's used when you want * to make a link to another index. * * <pre> * Window * *--------------------------------------* * | Local indexes | * | | | * | |-- Cat1 | * | | |-- Index1 | * | | |-- Index2 | * | ... | * | | * *--------------------------------------* * | Specific index key | * *-------------------*------------------* * | Cancel button | Ok button | * *-------------------*------------------* * </pre> */ public class IndexSelecter implements java.awt.event.ActionListener, java.util.Observer { private JFrame frame; private JPanel upPanel; private JPanel indexPanel; private IndexTree indexTree; private JPanel fieldPanel; private JTextArea keyArea; private JPanel downPanel; private JButton cancelButton; private JButton okButton; private boolean closeWin; private String[] selectedIndexKeys = null; private IndexBrowserPanel indexBrowser; public IndexSelecter(IndexBrowserPanel indexBrowser) { this.indexBrowser = indexBrowser; } /** * Returned null if canceled. Is blocking ! */ public String[] askForIndexURIs(final Hsqldb db) { frame = new JFrame(I18n.getMessage("thaw.plugin.index.selectIndex")); frame.setVisible(false); upPanel = new JPanel(); Logger.info(this, "indexes"); indexTree = new IndexTree(I18n.getMessage("thaw.plugin.index.yourIndexes"), true, null, indexBrowser, null); Logger.info(this, "plus indexes"); fieldPanel = new JPanel(); keyArea = new JTextArea(""); downPanel = new JPanel(); cancelButton = new JButton(I18n.getMessage("thaw.common.cancel")); okButton = new JButton(I18n.getMessage("thaw.common.ok")); upPanel.setLayout(new BorderLayout()); downPanel.setLayout(new GridLayout(1, 2)); fieldPanel.setLayout(new BorderLayout()); indexPanel = new JPanel(); indexPanel.setLayout(new GridLayout(1, 2)); indexPanel.add(indexTree.getPanel()); upPanel.add(indexPanel, BorderLayout.CENTER); JScrollPane sp = new JScrollPane(keyArea); keyArea.setSize(100, 100); sp.setSize(100, 100); sp.setPreferredSize(new java.awt.Dimension(100, 100)); fieldPanel.add(new JLabel(I18n.getMessage("thaw.plugin.index.indexKey")), BorderLayout.NORTH); fieldPanel.add(sp, BorderLayout.CENTER); upPanel.add(fieldPanel, BorderLayout.SOUTH); downPanel.add(okButton); downPanel.add(cancelButton); frame.getContentPane().setLayout(new BorderLayout(10, 10)); frame.getContentPane().add(upPanel, BorderLayout.CENTER); frame.getContentPane().add(downPanel, BorderLayout.SOUTH); frame.setSize(600, 600); keyArea.setSize(100, 100); sp.setSize(100, 100); sp.setPreferredSize(new java.awt.Dimension(100, 100)); selectedIndexKeys = null; cancelButton.addActionListener(this); okButton.addActionListener(this); indexTree.addObserver(this); frame.setVisible(true); for (closeWin = false ; !closeWin ; ) { try { Thread.sleep(500); } catch(final java.lang.InterruptedException e) { /* \_o< \_o< \_o< */ } } frame.setVisible(false); frame.dispose(); frame = null; upPanel = null; indexTree = null; fieldPanel = null; keyArea = null; downPanel = null; cancelButton = null; okButton = null; //return FreenetURIHelper.cleanURI(selectedIndexKey); return selectedIndexKeys; } public void update(final java.util.Observable o, final Object param) { if (param instanceof Vector) { keyArea.setText(""); for (Iterator it = ((Vector)param).iterator(); it.hasNext(); ) { IndexTreeNode node = (IndexTreeNode)it.next(); if (node instanceof Index) { final Index index = (Index)node; final String key = index.getPublicKey(); Logger.info(this, "Selected index key: "+key); keyArea.setText(keyArea.getText()+key+"\n"); } } } } public void actionPerformed(final java.awt.event.ActionEvent e) { if (e.getSource() == okButton) { if ((keyArea.getText() == null) || "".equals( keyArea.getText() )) selectedIndexKeys = null; else { selectedIndexKeys = keyArea.getText().trim().split("\n"); for (int i = 0 ; i < selectedIndexKeys.length ; i++) { selectedIndexKeys[i] = FreenetURIHelper.cleanURI(selectedIndexKeys[i]); } } closeWin = true; } if (e.getSource() == cancelButton) { selectedIndexKeys = null; closeWin = true; } indexTree.deleteObserver(this); } }