1 17 package com.finalist.jaggenerator.modules; 18 19 import com.finalist.jaggenerator.Database; 20 import com.finalist.jaggenerator.DatabaseManager; 21 import com.finalist.jaggenerator.ExtensionsFileFilter; 22 import com.finalist.jaggenerator.JagGenerator; 23 24 import javax.swing.*; 25 import javax.swing.event.TableModelEvent ; 26 import javax.swing.event.TableModelListener ; 27 import javax.swing.table.DefaultTableModel ; 28 import javax.swing.table.TableColumn ; 29 import javax.swing.table.TableModel ; 30 import java.io.File ; 31 import java.util.*; 32 33 38 public class DatabaseManagerFrame extends javax.swing.JFrame { 39 private static DatabaseManagerFrame ourInstance; 40 private static final List newDatabases = new ArrayList(); 41 public static final String SELECT = "< select >"; 42 private static final String DRIVER_IMPORT_FILECHOOSER = "import driver"; 43 private static final String [] ACCEPTABLE_EXTENSIONS = new String [] {"class", "jar", "zip"}; 44 private static final Vector COLUMN_NAMES = new Vector(Arrays.asList(new String []{ 45 "Database Type", 46 "Driver File", 47 "Driver Class", 48 "Type Mapping", 49 })); 50 51 52 56 public synchronized static DatabaseManagerFrame getInstance() { 57 if (ourInstance == null) { 58 ourInstance = new DatabaseManagerFrame(); 59 } 60 return ourInstance; 61 } 62 63 66 public void show() { 67 newDatabases.clear(); 68 refreshModel(); 69 super.show(); 70 } 71 72 private DatabaseManagerFrame() { 73 initComponents(); 74 postInit(); 75 } 76 77 78 private void postInit() { 79 this.setLocationRelativeTo(JagGenerator.jagGenerator); 80 jTable1.setSurrendersFocusOnKeystroke(true); 81 refreshModel(); 82 } 83 84 private void refreshModel() { 85 jTable1.setModel(new DefaultTableModel (getData(), COLUMN_NAMES) { 86 public boolean isCellEditable(int row, int column) { 88 if (column == 1 || column == 2) { 89 return false; 90 } 91 return super.isCellEditable(row, column); 92 } 93 }); 94 95 TableColumn typeMappingColumn = jTable1.getColumnModel().getColumn(3); 96 jTable1.getModel().addTableModelListener(new TableModelListener () { 97 public void tableChanged(TableModelEvent e) { 100 int column = e.getColumn(); 101 if (column != 3) return; 103 int row = e.getFirstRow(); 104 TableModel model = (TableModel ) e.getSource(); 105 String dbName = (String ) model.getValueAt(row, 0); 106 if (!Database.ENTER_DB_NAME.equals(dbName)) return; 107 String typeMapping = (String ) model.getValueAt(row, column); 108 model.setValueAt(typeMapping, row, 0); 109 } 110 }); 111 112 JComboBox comboBox = new JComboBox(); 113 comboBox.addItem(SELECT); 114 String [] typeMappings = DatabaseManager.getInstance().getTypeMappings(); 115 for (int i = 0; i < typeMappings.length; i++) { 116 comboBox.addItem(typeMappings[i]); 117 } 118 119 typeMappingColumn.setCellEditor(new DefaultCellEditor(comboBox)); 120 } 121 122 private Vector getData() { 123 Vector data = new Vector(); 124 ArrayList temp = new ArrayList(); 125 temp.addAll(Arrays.asList(DatabaseManager.getInstance().getSupportedDatabases())); 126 temp.addAll(newDatabases); 127 Iterator dbs = temp.iterator(); 128 while (dbs.hasNext()) { 129 Database db = (Database) dbs.next(); 130 Vector vickie = new Vector(); 131 vickie.add(db.getDbName()); 132 vickie.add(db.getFilename()); 133 vickie.add(db.getDriverClass()); 134 vickie.add(db.getTypeMapping()); 135 data.add(vickie); 136 } 137 138 return data; 139 } 140 141 142 147 private void initComponents() { jScrollPane1 = new javax.swing.JScrollPane (); 149 jTable1 = new javax.swing.JTable (); 150 jLabel1 = new javax.swing.JLabel (); 151 jPanel1 = new javax.swing.JPanel (); 152 addButtonPanel = new javax.swing.JPanel (); 153 addButton = new javax.swing.JButton (); 154 cancelButtonPanel = new javax.swing.JPanel (); 155 CancelButton = new javax.swing.JButton (); 156 saveButtonPanel = new javax.swing.JPanel (); 157 OKButton = new javax.swing.JButton (); 158 159 setTitle("JAG Database Driver Manager"); 160 addWindowListener(new java.awt.event.WindowAdapter () { 161 public void windowClosing(java.awt.event.WindowEvent evt) { 162 exitForm(evt); 163 } 164 }); 165 166 jScrollPane1.setPreferredSize(new java.awt.Dimension (700, 300)); 167 jTable1.setModel(new javax.swing.table.DefaultTableModel ( 168 new Object [][] { 169 {null, null, null, null}, 170 {null, null, null, null}, 171 {null, null, null, null}, 172 {null, null, null, null} 173 }, 174 new String [] { 175 "Title 1", "Title 2", "Title 3", "Title 4" 176 } 177 )); 178 jScrollPane1.setViewportView(jTable1); 179 180 getContentPane().add(jScrollPane1, java.awt.BorderLayout.CENTER); 181 182 jLabel1.setHorizontalAlignment(javax.swing.SwingConstants.CENTER); 183 jLabel1.setText("JAG Supported Databases"); 184 jLabel1.setMaximumSize(new java.awt.Dimension (149, 32)); 185 jLabel1.setMinimumSize(new java.awt.Dimension (149, 32)); 186 jLabel1.setPreferredSize(new java.awt.Dimension (149, 32)); 187 jLabel1.setVerticalTextPosition(javax.swing.SwingConstants.TOP); 188 getContentPane().add(jLabel1, java.awt.BorderLayout.NORTH); 189 190 jPanel1.setLayout(new java.awt.BorderLayout ()); 191 192 addButton.setText("Add new JDBC driver.."); 193 addButton.addActionListener(new java.awt.event.ActionListener () { 194 public void actionPerformed(java.awt.event.ActionEvent evt) { 195 addButtonActionPerformed(evt); 196 } 197 }); 198 199 addButtonPanel.add(addButton); 200 201 jPanel1.add(addButtonPanel, java.awt.BorderLayout.CENTER); 202 203 CancelButton.setText("Cancel"); 204 CancelButton.addActionListener(new java.awt.event.ActionListener () { 205 public void actionPerformed(java.awt.event.ActionEvent evt) { 206 CancelButtonActionPerformed(evt); 207 } 208 }); 209 210 cancelButtonPanel.add(CancelButton); 211 212 jPanel1.add(cancelButtonPanel, java.awt.BorderLayout.WEST); 213 214 OKButton.setText("Save"); 215 OKButton.addActionListener(new java.awt.event.ActionListener () { 216 public void actionPerformed(java.awt.event.ActionEvent evt) { 217 OKButtonActionPerformed(evt); 218 } 219 }); 220 221 saveButtonPanel.add(OKButton); 222 223 jPanel1.add(saveButtonPanel, java.awt.BorderLayout.EAST); 224 225 getContentPane().add(jPanel1, java.awt.BorderLayout.SOUTH); 226 227 pack(); 228 } 230 private void addButtonActionPerformed(java.awt.event.ActionEvent evt) { JagGenerator.logToConsole("Importing new database driver(s). Please wait..."); 232 final JFileChooser fileChooser = 233 new JFileChooser(JagGenerator.getFileChooserStartDir(DRIVER_IMPORT_FILECHOOSER)); 234 ExtensionsFileFilter filter = new ExtensionsFileFilter(ACCEPTABLE_EXTENSIONS); 235 fileChooser.setDialogTitle("JDBC Driver Import: Choose a class / archive file.."); 236 fileChooser.setFileFilter(filter); 237 int fileChooserStatus = fileChooser.showOpenDialog(null); 238 if (fileChooserStatus == JFileChooser.APPROVE_OPTION) { 239 File driverFile = fileChooser.getSelectedFile(); 240 newDatabases.addAll(DatabaseManager.getInstance().addDrivers(driverFile)); 241 JagGenerator.logToConsole("...Driver import complete."); 242 JagGenerator.setFileChooserStartDir(DRIVER_IMPORT_FILECHOOSER, driverFile); 243 refreshModel(); 244 245 } else { 246 JagGenerator.logToConsole("...aborted!"); 247 } 248 } 250 private void CancelButtonActionPerformed(java.awt.event.ActionEvent evt) { hide(); 252 } 254 private void OKButtonActionPerformed(java.awt.event.ActionEvent evt) { if (jTable1.getCellEditor() != null) { 258 jTable1.getCellEditor().stopCellEditing(); 259 } 260 ArrayList databases = new ArrayList(); 261 for (int row = 0; row < jTable1.getRowCount(); row++) { 262 Database db = new Database(); 263 String dbName = (String ) jTable1.getModel().getValueAt(row, 0); 264 db.setDbName(dbName); 265 db.setFilename((String ) jTable1.getModel().getValueAt(row, 1)); 266 db.setDriverClass((String ) jTable1.getModel().getValueAt(row, 2)); 267 268 String mapping = (String ) jTable1.getModel().getValueAt(row, 3); 269 if (SELECT.equals(mapping)) { 270 JOptionPane.showMessageDialog(this, 271 "Please select a mapping for the new database driver from the drop-down list.", 272 "Missing Type Mapping!!", javax.swing.JOptionPane.ERROR_MESSAGE); 273 return; 274 } 275 276 db.setTypeMapping(mapping); 277 databases.add(db); 278 } 279 280 DatabaseManager.getInstance().setDatabases(databases); 281 hide(); 282 283 } 285 286 private void exitForm(java.awt.event.WindowEvent evt) { this.hide(); 288 } 290 private javax.swing.JButton CancelButton; 292 private javax.swing.JButton OKButton; 293 private javax.swing.JButton addButton; 294 private javax.swing.JPanel addButtonPanel; 295 private javax.swing.JPanel cancelButtonPanel; 296 private javax.swing.JLabel jLabel1; 297 private javax.swing.JPanel jPanel1; 298 private javax.swing.JScrollPane jScrollPane1; 299 private javax.swing.JTable jTable1; 300 private javax.swing.JPanel saveButtonPanel; 301 303 } 304 | Popular Tags |