package ch.ethz.syslab.telesto.console.gui;
import java.awt.BorderLayout;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.sql.Statement;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.DefaultTableModel;
import ch.ethz.syslab.telesto.server.db.Database;
public class Panel extends JPanel {
private static final long serialVersionUID = 1L;
private JTable table;
private String tableName;
public Panel(String tableName) {
super(new BorderLayout());
this.tableName = tableName;
table = new JTable();
table.setAutoCreateRowSorter(true);
add(new JScrollPane(table), BorderLayout.CENTER);
setPreferredSize(getMaximumSize());
}
public void refresh(Database database) throws SQLException {
Connection connection = database.getConnection();
Statement statement = connection.createStatement();
statement.execute("SELECT * FROM " + tableName); // We don't have to worry about escaping here
ResultSet results = statement.getResultSet();
ResultSetMetaData meta = results.getMetaData();
int columnCount = meta.getColumnCount();
String[] columnNames = new String[columnCount];
for (int i = 0; i < columnCount; i++) {
columnNames[i] = meta.getColumnName(i + 1);
}
DefaultTableModel model = new TableModel(new Object[0][], columnNames);
table.setModel(model);
while (results.next()) {
Object[] row = new Object[columnCount];
for (int i = 0; i < columnCount; i++) {
row[i] = results.getObject(i + 1);
}
model.addRow(row);
}
}
private static class TableModel extends DefaultTableModel {
public TableModel(Object[][] objects, String[] columnNames) {
super(objects, columnNames);
}
@Override
public boolean isCellEditable(int row, int column) {
return false;
}
}
}