package ctagsinterface.index;
import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.util.HashMap;
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.JTable;
import javax.swing.JTextField;
import javax.swing.table.DefaultTableModel;
import org.apache.lucene.document.Document;
import org.apache.lucene.document.Fieldable;
import ctagsinterface.index.TagIndex.DocHandler;
import ctagsinterface.main.CtagsInterfacePlugin;
@SuppressWarnings("serial")
public class QueryDialog extends JFrame {
private JTextField query;
private DefaultTableModel model;
private JTable table;
public QueryDialog(JFrame parent)
{
setTitle("Query Dialog");
setLayout(new BorderLayout());
JPanel p = new JPanel();
add(p, BorderLayout.NORTH);
p.setLayout(new BorderLayout());
p.add(new JLabel("Query:"), BorderLayout.WEST);
query = new JTextField();
p.add(query, BorderLayout.CENTER);
model = new DefaultTableModel();
table = new JTable(model);
add(new JScrollPane(table), BorderLayout.CENTER);
table.setAutoCreateRowSorter(true);
final JButton go = new JButton("Search");
p.add(go, BorderLayout.EAST);
go.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
performQuery();
}
});
query.addKeyListener(new KeyAdapter() {
@Override
public void keyPressed(KeyEvent e) {
if (e.getKeyCode() == KeyEvent.VK_ENTER)
go.doClick();
}
});
pack();
setVisible(true);
}
void performQuery()
{
model.setRowCount(0);
final Vector<String> columns = new Vector<String>();
final Vector<HashMap<String, String>> data = new Vector<HashMap<String, String>>();
CtagsInterfacePlugin.getIndex().runQuery(query.getText(),
1000000, new DocHandler()
{
public void handle(Document doc)
{
HashMap<String, String> values = new HashMap<String, String>();
data.add(values);
for (Fieldable f: doc.getFields())
{
String name = f.name();
String value = f.stringValue();
if (! columns.contains(name))
columns.add(name);
values.put(name, value);
}
}
});
model.setColumnIdentifiers(columns);
HashMap<String, Integer> columnIndex = new HashMap<String, Integer>();
int index = 0;
for (String col: columns)
columnIndex.put(col, Integer.valueOf(index++));
for (HashMap<String, String> row: data)
{
String [] values = new String[columns.size()];
for (String name: row.keySet())
values[columnIndex.get(name).intValue()] = row.get(name);
model.addRow(values);
}
}
}