Mercurial > hg > ltpda
view src/ConnectionManager/src/connectionmanager/DatabaseDialog.java @ 39:11e3ed9d2115 database-connection-manager
Implement databases listing in database connection dialog
author | Daniele Nicolodi <nicolodi@science.unitn.it> |
---|---|
date | Mon, 05 Dec 2011 16:20:06 +0100 |
parents | 960fe1aa1c10 |
children |
line wrap: on
line source
package connectionmanager; import java.util.HashSet; import java.util.ArrayList; import javax.swing.DefaultComboBoxModel; import javax.swing.table.TableModel; public class DatabaseDialog extends javax.swing.JDialog { public boolean cancelled = true; public String hostname; public String database; private TableModel model; public DatabaseDialog(javax.swing.JDialog parent, TableModel model) { super(parent, true); this.model = model; initComponents(); initHostnameCombo(); initDatabaseCombo(); super.setLocationRelativeTo(parent); super.getRootPane().setDefaultButton(okButton); if (hostnameCombo.getModel().getSize() == 1) { databaseCombo.requestFocus(); } } @SuppressWarnings("unchecked") // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents private void initComponents() { jLabel10 = new javax.swing.JLabel(); jLabel9 = new javax.swing.JLabel(); databaseCombo = new javax.swing.JComboBox(); okButton = new javax.swing.JButton(); cancelButton = new javax.swing.JButton(); hostnameCombo = new javax.swing.JComboBox(); listButton = new javax.swing.JButton(); setTitle("Database connection"); setLocationByPlatform(true); setModal(true); setResizable(false); jLabel10.setHorizontalAlignment(javax.swing.SwingConstants.RIGHT); jLabel10.setText("Database:"); jLabel9.setHorizontalAlignment(javax.swing.SwingConstants.RIGHT); jLabel9.setText("Hostname:"); databaseCombo.setEditable(true); okButton.setText("Ok"); okButton.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { okButtonActionPerformed(evt); } }); cancelButton.setText("Cancel"); cancelButton.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { cancelButtonActionPerformed(evt); } }); hostnameCombo.setEditable(true); hostnameCombo.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { hostnameComboActionPerformed(evt); } }); listButton.setText("List databases"); listButton.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { listButtonActionPerformed(evt); } }); org.jdesktop.layout.GroupLayout layout = new org.jdesktop.layout.GroupLayout(getContentPane()); getContentPane().setLayout(layout); layout.setHorizontalGroup( layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) .add(layout.createSequentialGroup() .addContainerGap() .add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) .add(layout.createSequentialGroup() .add(jLabel9) .add(18, 18, 18) .add(hostnameCombo, 0, 240, Short.MAX_VALUE)) .add(org.jdesktop.layout.GroupLayout.TRAILING, layout.createSequentialGroup() .add(jLabel10) .add(21, 21, 21) .add(databaseCombo, 0, 240, Short.MAX_VALUE)) .add(org.jdesktop.layout.GroupLayout.TRAILING, layout.createSequentialGroup() .add(listButton) .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED, 134, Short.MAX_VALUE) .add(cancelButton) .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED) .add(okButton))) .addContainerGap()) ); layout.setVerticalGroup( layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) .add(layout.createSequentialGroup() .addContainerGap() .add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.BASELINE) .add(hostnameCombo, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE) .add(jLabel9)) .addPreferredGap(org.jdesktop.layout.LayoutStyle.UNRELATED) .add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.BASELINE) .add(databaseCombo, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE) .add(jLabel10)) .add(30, 30, 30) .add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.TRAILING) .add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.BASELINE) .add(okButton) .add(cancelButton)) .add(listButton)) .addContainerGap()) ); pack(); }// </editor-fold>//GEN-END:initComponents private void cancelButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_cancelButtonActionPerformed cancelled = true; doClose(); }//GEN-LAST:event_cancelButtonActionPerformed private void okButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_okButtonActionPerformed cancelled = false; hostname = (String) hostnameCombo.getSelectedItem(); database = (String) databaseCombo.getSelectedItem(); doClose(); }//GEN-LAST:event_okButtonActionPerformed private void hostnameComboActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_hostnameComboActionPerformed initDatabaseCombo(); }//GEN-LAST:event_hostnameComboActionPerformed private void listButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_listButtonActionPerformed // selected hostname hostname = (String) hostnameCombo.getSelectedItem(); // users for given hostname HashSet<String> usernames = new HashSet<String>(); int rows = model.getRowCount(); for (int i = 0; i < rows; i++) { if (model.getValueAt(i, 0).equals(hostname)) { String username = (String) model.getValueAt(i, 2); if (username != null) { usernames.add(username); } } } // credentials dialog String[] users = new String[usernames.size()]; usernames.toArray(users); java.util.Arrays.sort(users); CredentialsDialog dialog = new CredentialsDialog(this, hostname, users); dialog.setVisible(true); try { // connect to database Class.forName("com.mysql.jdbc.Driver"); String url = String.format("jdbc:mysql://%s/", hostname); java.sql.Connection conn = java.sql.DriverManager.getConnection(url, dialog.username, dialog.password); // list databases java.sql.Statement stmt = conn.createStatement(); java.sql.ResultSet rs = stmt.executeQuery("SHOW DATABASES"); ArrayList<String> databases = new ArrayList<String>(); while (rs.next()) { String db = rs.getString(1); if (! db.equals("information_schema")) { databases.add(db); } } // add to combo box databaseCombo.setModel(new DefaultComboBoxModel(databases.toArray())); // show list databaseCombo.setPopupVisible(true); // give focus to list databaseCombo.getEditor().getEditorComponent().requestFocus(); } catch (Exception ex) { } }//GEN-LAST:event_listButtonActionPerformed private void initHostnameCombo() { HashSet<String> hostnames = new HashSet<String>(); int rows = model.getRowCount(); for (int i = 0; i < rows; i++) { hostnames.add((String) model.getValueAt(i, 0)); } hostnameCombo.setModel(new DefaultComboBoxModel(hostnames.toArray())); } private void initDatabaseCombo() { HashSet<String> databases = new HashSet<String>(); hostname = (String) hostnameCombo.getSelectedItem(); int rows = model.getRowCount(); for (int i = 0; i < rows; i++) { if (hostname.equals((String) model.getValueAt(i, 0))) { databases.add((String) model.getValueAt(i, 1)); } } databaseCombo.setModel(new DefaultComboBoxModel(databases.toArray())); } private void doClose() { setVisible(false); dispose(); } // Variables declaration - do not modify//GEN-BEGIN:variables private javax.swing.JButton cancelButton; private javax.swing.JComboBox databaseCombo; private javax.swing.JComboBox hostnameCombo; private javax.swing.JLabel jLabel10; private javax.swing.JLabel jLabel9; private javax.swing.JButton listButton; private javax.swing.JButton okButton; // End of variables declaration//GEN-END:variables }