KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > com > finalist > jaggenerator > modules > DatabaseManagerFrame


1 /* Copyright (C) 2003 Finalist IT Group
2  *
3  * This file is part of JAG - the Java J2EE Application Generator
4  *
5  * JAG is free software; you can redistribute it and/or modify
6  * it under the terms of the GNU General Public License as published by
7  * the Free Software Foundation; either version 2 of the License, or
8  * (at your option) any later version.
9  * JAG is distributed in the hope that it will be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12  * GNU General Public License for more details.
13  * You should have received a copy of the GNU General Public License
14  * along with JAG; if not, write to the Free Software
15  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
16  */

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 JavaDoc;
26 import javax.swing.event.TableModelListener JavaDoc;
27 import javax.swing.table.DefaultTableModel JavaDoc;
28 import javax.swing.table.TableColumn JavaDoc;
29 import javax.swing.table.TableModel JavaDoc;
30 import java.io.File JavaDoc;
31 import java.util.*;
32
33 /**
34  * The JFrame GUI behind the DatabaseManager.
35  *
36  * @author m.oconnor
37  */

38 public class DatabaseManagerFrame extends javax.swing.JFrame JavaDoc {
39    private static DatabaseManagerFrame ourInstance;
40    private static final List newDatabases = new ArrayList();
41    public static final String JavaDoc SELECT = "< select >";
42    private static final String JavaDoc DRIVER_IMPORT_FILECHOOSER = "import driver";
43    private static final String JavaDoc[] ACCEPTABLE_EXTENSIONS = new String JavaDoc[] {"class", "jar", "zip"};
44    private static final Vector COLUMN_NAMES = new Vector(Arrays.asList(new String JavaDoc[]{
45       "Database Type",
46       "Driver File",
47       "Driver Class",
48       "Type Mapping",
49    }));
50
51
52    /**
53     * Only one instance of the DatabaseManagerFrame is allowed - this method obtains the one and only instance.
54     * @return
55     */

56    public synchronized static DatabaseManagerFrame getInstance() {
57       if (ourInstance == null) {
58          ourInstance = new DatabaseManagerFrame();
59       }
60       return ourInstance;
61    }
62
63    /**
64     * Whenever the frame is shown, reinitialise the list.
65     */

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 JavaDoc(getData(), COLUMN_NAMES) {
86          //The middle two columns are not editable
87
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 JavaDoc typeMappingColumn = jTable1.getColumnModel().getColumn(3);
96       jTable1.getModel().addTableModelListener(new TableModelListener JavaDoc() {
97          //when the user selects a type mapping and hasn't yet set a DB name,
98
//make the DB name to the same value as the type mapping..
99
public void tableChanged(TableModelEvent JavaDoc e) {
100             int column = e.getColumn();
101             if (column != 3) return; //only interested in user selecting a typemapping
102

103             int row = e.getFirstRow();
104             TableModel JavaDoc model = (TableModel JavaDoc) e.getSource();
105             String JavaDoc dbName = (String JavaDoc) model.getValueAt(row, 0);
106             if (!Database.ENTER_DB_NAME.equals(dbName)) return;
107             String JavaDoc typeMapping = (String JavaDoc) model.getValueAt(row, column);
108             model.setValueAt(typeMapping, row, 0);
109          }
110       });
111
112       JComboBox comboBox = new JComboBox();
113       comboBox.addItem(SELECT);
114       String JavaDoc[] 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    /** This method is called from within the constructor to
143     * initialize the form.
144     * WARNING: Do NOT modify this code. The content of this method is
145     * always regenerated by the Form Editor.
146     */

147     private void initComponents() {//GEN-BEGIN:initComponents
148
jScrollPane1 = new javax.swing.JScrollPane JavaDoc();
149         jTable1 = new javax.swing.JTable JavaDoc();
150         jLabel1 = new javax.swing.JLabel JavaDoc();
151         jPanel1 = new javax.swing.JPanel JavaDoc();
152         addButtonPanel = new javax.swing.JPanel JavaDoc();
153         addButton = new javax.swing.JButton JavaDoc();
154         cancelButtonPanel = new javax.swing.JPanel JavaDoc();
155         CancelButton = new javax.swing.JButton JavaDoc();
156         saveButtonPanel = new javax.swing.JPanel JavaDoc();
157         OKButton = new javax.swing.JButton JavaDoc();
158
159         setTitle("JAG Database Driver Manager");
160         addWindowListener(new java.awt.event.WindowAdapter JavaDoc() {
161             public void windowClosing(java.awt.event.WindowEvent JavaDoc evt) {
162                 exitForm(evt);
163             }
164         });
165
166         jScrollPane1.setPreferredSize(new java.awt.Dimension JavaDoc(700, 300));
167         jTable1.setModel(new javax.swing.table.DefaultTableModel JavaDoc(
168             new Object JavaDoc [][] {
169                 {null, null, null, null},
170                 {null, null, null, null},
171                 {null, null, null, null},
172                 {null, null, null, null}
173             },
174             new String JavaDoc [] {
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 JavaDoc(149, 32));
185         jLabel1.setMinimumSize(new java.awt.Dimension JavaDoc(149, 32));
186         jLabel1.setPreferredSize(new java.awt.Dimension JavaDoc(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 JavaDoc());
191
192         addButton.setText("Add new JDBC driver..");
193         addButton.addActionListener(new java.awt.event.ActionListener JavaDoc() {
194             public void actionPerformed(java.awt.event.ActionEvent JavaDoc 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 JavaDoc() {
205             public void actionPerformed(java.awt.event.ActionEvent JavaDoc 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 JavaDoc() {
216             public void actionPerformed(java.awt.event.ActionEvent JavaDoc 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     }//GEN-END:initComponents
229

230     private void addButtonActionPerformed(java.awt.event.ActionEvent JavaDoc evt) {//GEN-FIRST:event_addButtonActionPerformed
231
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 JavaDoc 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     }//GEN-LAST:event_addButtonActionPerformed
249

250     private void CancelButtonActionPerformed(java.awt.event.ActionEvent JavaDoc evt) {//GEN-FIRST:event_CancelButtonActionPerformed
251
hide();
252     }//GEN-LAST:event_CancelButtonActionPerformed
253

254    private void OKButtonActionPerformed(java.awt.event.ActionEvent JavaDoc evt) {//GEN-FIRST:event_OKButtonActionPerformed
255
//We have to explicitly tell the table's cell editor to accept all 'partial' typed-in values
256
//(i.e. the value contained by the cell that was being edited when the OK button was pressed..
257
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 JavaDoc dbName = (String JavaDoc) jTable1.getModel().getValueAt(row, 0);
264          db.setDbName(dbName);
265          db.setFilename((String JavaDoc) jTable1.getModel().getValueAt(row, 1));
266          db.setDriverClass((String JavaDoc) jTable1.getModel().getValueAt(row, 2));
267
268          String JavaDoc mapping = (String JavaDoc) 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    }//GEN-LAST:event_OKButtonActionPerformed
284

285    /** Exit the Application */
286    private void exitForm(java.awt.event.WindowEvent JavaDoc evt) {//GEN-FIRST:event_exitForm
287
this.hide();
288    }//GEN-LAST:event_exitForm
289

290     // Variables declaration - do not modify//GEN-BEGIN:variables
291
private javax.swing.JButton JavaDoc CancelButton;
292     private javax.swing.JButton JavaDoc OKButton;
293     private javax.swing.JButton JavaDoc addButton;
294     private javax.swing.JPanel JavaDoc addButtonPanel;
295     private javax.swing.JPanel JavaDoc cancelButtonPanel;
296     private javax.swing.JLabel JavaDoc jLabel1;
297     private javax.swing.JPanel JavaDoc jPanel1;
298     private javax.swing.JScrollPane JavaDoc jScrollPane1;
299     private javax.swing.JTable JavaDoc jTable1;
300     private javax.swing.JPanel JavaDoc saveButtonPanel;
301     // End of variables declaration//GEN-END:variables
302

303 }
304
Popular Tags