KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > netbeans > modules > dbschema > jdbcimpl > wizard > DBSchemaTablesPanel


1 /*
2  * The contents of this file are subject to the terms of the Common Development
3  * and Distribution License (the License). You may not use this file except in
4  * compliance with the License.
5  *
6  * You can obtain a copy of the License at http://www.netbeans.org/cddl.html
7  * or http://www.netbeans.org/cddl.txt.
8  *
9  * When distributing Covered Code, include this CDDL Header Notice in each file
10  * and include the License file at http://www.netbeans.org/cddl.txt.
11  * If applicable, add the following below the CDDL Header, with the fields
12  * enclosed by brackets [] replaced by your own identifying information:
13  * "Portions Copyrighted [year] [name of copyright owner]"
14  *
15  * The Original Software is NetBeans. The Initial Developer of the Original
16  * Software is Sun Microsystems, Inc. Portions Copyright 1997-2006 Sun
17  * Microsystems, Inc. All Rights Reserved.
18  */

19
20 package org.netbeans.modules.dbschema.jdbcimpl.wizard;
21
22 import java.awt.event.ActionEvent JavaDoc;
23 import java.awt.event.ActionListener JavaDoc;
24 import java.awt.event.KeyEvent JavaDoc;
25 import java.sql.Connection JavaDoc;
26 import java.sql.ResultSet JavaDoc;
27 import java.sql.SQLException JavaDoc;
28 import java.util.ArrayList JavaDoc;
29 import java.util.LinkedList JavaDoc;
30 import java.util.List JavaDoc;
31 import java.util.ResourceBundle JavaDoc;
32
33 import javax.swing.*;
34 import javax.swing.event.*;
35 import org.netbeans.api.db.explorer.ConnectionManager;
36 import org.netbeans.api.db.explorer.DatabaseConnection;
37 import org.netbeans.api.progress.ProgressHandle;
38 import org.netbeans.api.progress.ProgressHandleFactory;
39 import org.openide.util.NbBundle;
40
41 import org.netbeans.modules.dbschema.jdbcimpl.DDLBridge;
42 import org.netbeans.modules.dbschema.jdbcimpl.ConnectionProvider;
43 import org.openide.ErrorManager;
44 import org.openide.util.Mutex;
45 import org.openide.util.RequestProcessor;
46
47 public class DBSchemaTablesPanel extends JPanel implements ListDataListener {
48     
49     private static final ErrorManager LOGGER = ErrorManager.getDefault().getInstance("org.netbeans.modules.dbschema.jdbcimpl.wizard"); // NOI18N
50
private static final boolean LOG = LOGGER.isLoggable(ErrorManager.INFORMATIONAL);
51
52     private final ResourceBundle JavaDoc bundle = NbBundle.getBundle("org.netbeans.modules.dbschema.jdbcimpl.resources.Bundle"); //NOI18N
53

54     private LinkedList JavaDoc tables;
55     private LinkedList JavaDoc views;
56     private ConnectionProvider cp;
57     private String JavaDoc schema;
58     private String JavaDoc driver;
59
60     private DatabaseConnection dbconnOld;
61     private Connection JavaDoc conn;
62
63     private DBSchemaWizardData data;
64
65     private int tablesCount;
66
67     private ArrayList JavaDoc list;
68
69     /** Creates new form DBSchemaTablesPanel */
70     public DBSchemaTablesPanel(DBSchemaWizardData data, ArrayList JavaDoc list) {
71         this.list = list;
72         this.data = data;
73         tables = new LinkedList JavaDoc();
74         views = new LinkedList JavaDoc();
75         cp = null;
76
77         putClientProperty("WizardPanel_contentSelectedIndex", new Integer JavaDoc(2)); //NOI18N
78
setName(bundle.getString("TablesChooser")); //NOI18N
79

80         initComponents();
81         initAccessibility();
82
83         jListAvailableTables.registerKeyboardAction(new ActionListener JavaDoc() {
84                 public void actionPerformed(ActionEvent JavaDoc e) {
85                     jListAvailableTables.requestFocus();
86                 }
87             }, KeyStroke.getKeyStroke(KeyEvent.VK_T, KeyEvent.ALT_MASK), JComponent.WHEN_IN_FOCUSED_WINDOW);
88         jListSelectedTables.registerKeyboardAction(new ActionListener JavaDoc() {
89                 public void actionPerformed(ActionEvent JavaDoc e) {
90                     jListSelectedTables.requestFocus();
91                 }
92             }, KeyStroke.getKeyStroke(KeyEvent.VK_S, KeyEvent.ALT_MASK), JComponent.WHEN_IN_FOCUSED_WINDOW);
93
94         jListSelectedTables.getModel().addListDataListener(this);
95
96         (jListAvailableTables.getSelectionModel()).addListSelectionListener(new ListSelectionListener() {
97                 public void valueChanged(ListSelectionEvent e) {
98                     jButtonAdd.setEnabled(jListAvailableTables.getSelectedIndex() == -1 ? false : true);
99                 }
100             });
101         (jListSelectedTables.getSelectionModel()).addListSelectionListener(new ListSelectionListener() {
102                 public void valueChanged(ListSelectionEvent e) {
103                     jButtonRemove.setEnabled(jListSelectedTables.getSelectedIndex() == -1 ? false : true);
104                 }
105             });
106     }
107
108     protected boolean init() {
109         
110         List JavaDoc handlers = new ArrayList JavaDoc();
111         Parameters params = new Parameters();
112         
113         boolean init = true;
114
115         if (data.getConnectionProvider() != null) {
116             if (data.getDatabaseConnection() == dbconnOld)
117                 init = false;
118
119             if (init) {
120                 cp = data.getConnectionProvider();
121                 handlers.add(new Handler() {
122                     public void handle(Parameters params) {
123                         uninit();
124                     }
125                     public String JavaDoc getMessage() {
126                         return NbBundle.getMessage(DBSchemaTablesPanel.class, "MSG_ClosingPrevious");
127                     }
128                 });
129             }
130         }
131
132         if (!init) {
133             updateButtons();
134             return true;
135         }
136         
137         data.setConnected(false);
138         if (!data.isExistingConn()) {
139             return false;
140         }
141         
142         // the init starts here
143

144         final DatabaseConnection dbconn = data.getDatabaseConnection();
145         conn = dbconn.getJDBCConnection();
146
147         //fix for bug #4746507 - if the connection was broken outside of the IDE, set the connection to null and try to reconnect
148
if (conn != null) {
149             handlers.add(new Handler() {
150                 public void handle(Parameters params) {
151                     try {
152                         conn.getCatalog(); //test if the connection is alive - if it is alive, it should return something
153
} catch (SQLException JavaDoc exc) {
154                         conn = null;
155                     }
156                 }
157                 public String JavaDoc getMessage() {
158                     return NbBundle.getMessage(DBSchemaTablesPanel.class, "MSG_CheckingExisting");
159                 }
160             });
161         }
162         
163         handlers.add(new Handler() {
164             public void handle(Parameters params) {
165                 ConnectionManager.getDefault().showConnectionDialog(dbconn);
166                 conn = dbconn.getJDBCConnection();
167             }
168             public boolean getRunInEDT() {
169                 return true;
170             }
171             public boolean isRunnable() {
172                 return conn == null;
173             }
174         });
175         
176         handlers.add(new Handler() {
177             public void handle(Parameters params) {
178                 
179                 //fix for bug #4746507 - if the connection was broken outside of the IDE, set the connection to null and try to reconnect
180
if (conn != null) {
181                     try {
182                         conn.getCatalog(); //test if the connection is alive - if it is alive, it should return something
183
} catch (SQLException JavaDoc exc) {
184                         conn = null;
185                         data.setConnected(false);
186                         params.setResult(false);
187                         return;
188                     }
189                 }
190
191                 data.setConnected(true);
192                 
193                 schema = dbconn.getSchema();
194                 driver = dbconn.getDriverClass();
195
196                 dbconnOld = dbconn;
197
198                 try {
199                     if (conn == null) {
200                         params.setResult(false);
201                         return;
202                     }
203
204                     cp = new ConnectionProvider(conn, driver);
205                     cp.setSchema(schema);
206                 } catch (SQLException JavaDoc exc) {
207                     //PENDING
208
}
209
210                 data.setConnectionProvider(cp);
211
212                 tables.clear();
213                 views.clear();
214
215                 try {
216                     DDLBridge bridge = new DDLBridge(cp.getConnection(), cp.getSchema(), cp.getDatabaseMetaData());
217
218                     ResultSet JavaDoc rs;
219                     bridge.getDriverSpecification().getTables("%", new String JavaDoc[] {"TABLE"}); //NOI18N
220
rs = bridge.getDriverSpecification().getResultSet();
221                     if (rs != null) {
222                         while (rs.next())
223                             tables.add(rs.getString("TABLE_NAME").trim()); //NOI18N
224
rs.close();
225                     }
226
227                     rs = null;
228                     if (bridge.getDriverSpecification().areViewsSupported()) {
229                         bridge.getDriverSpecification().getTables("%", new String JavaDoc[] {"VIEW"}); //NOI18N
230
rs = bridge.getDriverSpecification().getResultSet();
231                     }
232                     if (rs != null) {
233                         while (rs.next())
234                             views.add(rs.getString("TABLE_NAME").trim()); //NOI18N
235
rs.close();
236                     }
237                 } catch (SQLException JavaDoc exc) {
238                     org.openide.ErrorManager.getDefault().notify(exc);
239                 }
240
241                 ((SortedListModel) jListAvailableTables.getModel()).clear();
242                 ((SortedListModel) jListSelectedTables.getModel()).clear();
243
244                 tablesCount = tables.size();
245
246                 for (int i = 0; i < tables.size(); i++)
247                     ((SortedListModel) jListAvailableTables.getModel()).add(bundle.getString("TablePrefix") + " " + tables.get(i).toString()); //NOI18N
248

249                 for (int i = 0; i < views.size(); i++)
250                     ((SortedListModel) jListAvailableTables.getModel()).add(bundle.getString("ViewPrefix") + " " + views.get(i).toString()); //NOI18N
251
if (jListAvailableTables.getModel().getSize() > 0)
252                     jListAvailableTables.setSelectedIndex(0);
253                 tables.clear();
254                 views.clear();
255                 
256                 params.setResult(true);
257             }
258             
259             public String JavaDoc getMessage() {
260                 return NbBundle.getMessage(DBSchemaTablesPanel.class, "MSG_RetrievingTables");
261             }
262             
263             public boolean isRunnable() {
264                 return conn != null;
265             }
266         });
267
268         invokeHandlers(handlers, params);
269         
270         updateButtons();
271
272         return params.getResult();
273     }
274
275     private void invokeHandlers(final List JavaDoc/*<Handler>*/ handlers, final Parameters params) {
276         final ProgressPanel progressPanel = new ProgressPanel();
277         
278         ProgressHandle progressHandle = ProgressHandleFactory.createHandle(null);
279         JComponent progressComponent = ProgressHandleFactory.createProgressComponent(progressHandle);
280         
281         progressHandle.start();
282         progressHandle.switchToIndeterminate();
283         
284         final int[] index = new int[1];
285         
286         try {
287             RequestProcessor.Task task = RequestProcessor.getDefault().create(new Runnable JavaDoc() {
288                 public void run() {
289                     index[0] = invokeHandlers(handlers, index[0], params, progressPanel);
290                     SwingUtilities.invokeLater(new Runnable JavaDoc() {
291                         public void run() {
292                             progressPanel.close();
293                         }
294                     });
295                 }
296             });
297             
298             while (index[0] < handlers.size()) {
299                 index[0] = invokeHandlers(handlers, index[0], params, null);
300                 if (index[0] < handlers.size()) {
301                     task.schedule(0);
302                     progressPanel.open(progressComponent);
303                 }
304             }
305         } finally {
306             progressHandle.finish();
307         }
308     }
309     
310     private int invokeHandlers(List JavaDoc/*<Handler>*/ handlers, int start, Parameters params, final ProgressPanel progressPanel) {
311         boolean isEDT = SwingUtilities.isEventDispatchThread();
312         int i;
313         
314         for (i = start; i < handlers.size(); i++) {
315             Handler h = (Handler)handlers.get(i);
316             if (!h.isRunnable()) {
317                 if (LOG) {
318                     LOGGER.log("Skipping " + h); // NOI18N
319
}
320                 continue;
321             }
322             if (h.getRunInEDT() != isEDT) {
323                 break;
324             }
325             if (LOG) {
326                 LOGGER.log("Invoking " + h); // NOI18N
327
}
328             if (progressPanel != null) {
329                 final String JavaDoc message = h.getMessage();
330                 if (message != null) {
331                     Mutex.EVENT.readAccess(new Runnable JavaDoc() {
332                         public void run() {
333                             progressPanel.setText(message);
334                         }
335                     });
336                 }
337             }
338             h.handle(params);
339         }
340         
341         return i;
342     }
343
344     public void uninit() {
345         try {
346             if (cp != null)
347                 if (data.isConnected())
348                     if (data.isExistingConn())
349                         ConnectionManager.getDefault().disconnect(dbconnOld);
350                     else
351                         if (dbconnOld.getJDBCConnection() != null)
352                             ConnectionManager.getDefault().disconnect(dbconnOld);
353                         else
354                             cp.closeConnection();
355         } catch (Exception JavaDoc exc) {
356             //unable to disconnect
357
}
358     }
359
360     private void initAccessibility() {
361         this.getAccessibleContext().setAccessibleDescription(bundle.getString("ACS_TablesPanelA11yDesc")); // NOI18N
362
jLabelAvailableTables.getAccessibleContext().setAccessibleDescription(bundle.getString("ACS_AvailableTablesA11yDesc")); // NOI18N
363
jListAvailableTables.getAccessibleContext().setAccessibleName(bundle.getString("ACS_AvailableTablesListA11yName")); // NOI18N
364
jLabelSelectedTables.getAccessibleContext().setAccessibleDescription(bundle.getString("ACS_SelectedTablesA11yDesc")); // NOI18N
365
jListSelectedTables.getAccessibleContext().setAccessibleName(bundle.getString("ACS_SelectedTablesListA11yName")); // NOI18N
366
jLabelNote.getAccessibleContext().setAccessibleDescription(bundle.getString("ACS_FKReferenceNoteA11yDesc")); // NOI18N
367
}
368
369     /** This method is called from within the constructor to
370      * initialize the form.
371      * WARNING: Do NOT modify this code. The content of this method is
372      * always regenerated by the Form Editor.
373      */

374     // <editor-fold defaultstate="collapsed" desc=" Generated Code ">//GEN-BEGIN:initComponents
375
private void initComponents() {
376         java.awt.GridBagConstraints JavaDoc gridBagConstraints;
377
378         jLabelAvailableTables = new javax.swing.JLabel JavaDoc();
379         jScrollPaneAvailableTables = new javax.swing.JScrollPane JavaDoc();
380         jListAvailableTables = new javax.swing.JList JavaDoc();
381         jPanelButtons = new javax.swing.JPanel JavaDoc();
382         jButtonAdd = new javax.swing.JButton JavaDoc();
383         jButtonRemove = new javax.swing.JButton JavaDoc();
384         jButtonAddAll = new javax.swing.JButton JavaDoc();
385         jButtonRemoveAll = new javax.swing.JButton JavaDoc();
386         jLabelSelectedTables = new javax.swing.JLabel JavaDoc();
387         jScrollPaneSelectedTables = new javax.swing.JScrollPane JavaDoc();
388         jListSelectedTables = new javax.swing.JList JavaDoc();
389         jLabelNote = new javax.swing.JLabel JavaDoc();
390
391         FormListener formListener = new FormListener();
392
393         setPreferredSize(new java.awt.Dimension JavaDoc(400, 199));
394         setLayout(new java.awt.GridBagLayout JavaDoc());
395
396         jLabelAvailableTables.setLabelFor(jListAvailableTables);
397         org.openide.awt.Mnemonics.setLocalizedText(jLabelAvailableTables, bundle.getString("AvailableTables")); // NOI18N
398
gridBagConstraints = new java.awt.GridBagConstraints JavaDoc();
399         gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
400         gridBagConstraints.insets = new java.awt.Insets JavaDoc(12, 12, 0, 0);
401         add(jLabelAvailableTables, gridBagConstraints);
402
403         jListAvailableTables.setToolTipText(bundle.getString("ACS_AvailableTablesListA11yDesc")); // NOI18N
404
jListAvailableTables.setModel(new SortedListModel());
405         jScrollPaneAvailableTables.setViewportView(jListAvailableTables);
406
407         gridBagConstraints = new java.awt.GridBagConstraints JavaDoc();
408         gridBagConstraints.gridx = 0;
409         gridBagConstraints.gridy = 1;
410         gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH;
411         gridBagConstraints.weightx = 1.0;
412         gridBagConstraints.weighty = 1.0;
413         gridBagConstraints.insets = new java.awt.Insets JavaDoc(11, 12, 0, 0);
414         add(jScrollPaneAvailableTables, gridBagConstraints);
415
416         jPanelButtons.setLayout(new java.awt.GridBagLayout JavaDoc());
417
418         org.openide.awt.Mnemonics.setLocalizedText(jButtonAdd, bundle.getString("AddButton")); // NOI18N
419
jButtonAdd.setToolTipText(bundle.getString("ACS_AddButtonA11yDesc")); // NOI18N
420
jButtonAdd.addActionListener(formListener);
421         gridBagConstraints = new java.awt.GridBagConstraints JavaDoc();
422         gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
423         jPanelButtons.add(jButtonAdd, gridBagConstraints);
424
425         jButtonRemove.setToolTipText(bundle.getString("ACS_RemoveButtonA11yDesc")); // NOI18N
426
org.openide.awt.Mnemonics.setLocalizedText(jButtonRemove, bundle.getString("RemoveButton")); // NOI18N
427
jButtonRemove.addActionListener(formListener);
428         gridBagConstraints = new java.awt.GridBagConstraints JavaDoc();
429         gridBagConstraints.gridx = 0;
430         gridBagConstraints.gridy = 1;
431         gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
432         gridBagConstraints.insets = new java.awt.Insets JavaDoc(5, 0, 0, 0);
433         jPanelButtons.add(jButtonRemove, gridBagConstraints);
434
435         jButtonAddAll.setToolTipText(bundle.getString("ACS_AddAllButtonA11yDesc")); // NOI18N
436
org.openide.awt.Mnemonics.setLocalizedText(jButtonAddAll, bundle.getString("AddAllButton")); // NOI18N
437
jButtonAddAll.addActionListener(formListener);
438         gridBagConstraints = new java.awt.GridBagConstraints JavaDoc();
439         gridBagConstraints.gridx = 0;
440         gridBagConstraints.gridy = 2;
441         gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
442         gridBagConstraints.insets = new java.awt.Insets JavaDoc(17, 0, 0, 0);
443         jPanelButtons.add(jButtonAddAll, gridBagConstraints);
444
445         jButtonRemoveAll.setToolTipText(bundle.getString("ACS_RemoveAllButtonA11yDesc")); // NOI18N
446
org.openide.awt.Mnemonics.setLocalizedText(jButtonRemoveAll, bundle.getString("RemoveAllButton")); // NOI18N
447
jButtonRemoveAll.addActionListener(formListener);
448         gridBagConstraints = new java.awt.GridBagConstraints JavaDoc();
449         gridBagConstraints.gridx = 0;
450         gridBagConstraints.gridy = 3;
451         gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
452         gridBagConstraints.insets = new java.awt.Insets JavaDoc(5, 0, 0, 0);
453         jPanelButtons.add(jButtonRemoveAll, gridBagConstraints);
454
455         gridBagConstraints = new java.awt.GridBagConstraints JavaDoc();
456         gridBagConstraints.gridx = 1;
457         gridBagConstraints.gridy = 0;
458         gridBagConstraints.gridheight = 2;
459         gridBagConstraints.insets = new java.awt.Insets JavaDoc(12, 11, 0, 11);
460         add(jPanelButtons, gridBagConstraints);
461
462         jLabelSelectedTables.setLabelFor(jListSelectedTables);
463         org.openide.awt.Mnemonics.setLocalizedText(jLabelSelectedTables, bundle.getString("SelectedTables")); // NOI18N
464
gridBagConstraints = new java.awt.GridBagConstraints JavaDoc();
465         gridBagConstraints.gridx = 2;
466         gridBagConstraints.gridy = 0;
467         gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
468         gridBagConstraints.insets = new java.awt.Insets JavaDoc(12, 0, 0, 11);
469         add(jLabelSelectedTables, gridBagConstraints);
470
471         jListSelectedTables.setModel(new SortedListModel());
472         jListSelectedTables.setToolTipText(bundle.getString("ACS_SelectedTablesListA11yDesc")); // NOI18N
473
jScrollPaneSelectedTables.setViewportView(jListSelectedTables);
474
475         gridBagConstraints = new java.awt.GridBagConstraints JavaDoc();
476         gridBagConstraints.gridx = 2;
477         gridBagConstraints.gridy = 1;
478         gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH;
479         gridBagConstraints.weightx = 1.0;
480         gridBagConstraints.weighty = 1.0;
481         gridBagConstraints.insets = new java.awt.Insets JavaDoc(11, 0, 0, 11);
482         add(jScrollPaneSelectedTables, gridBagConstraints);
483
484         org.openide.awt.Mnemonics.setLocalizedText(jLabelNote, bundle.getString("FKReferenceNote")); // NOI18N
485
gridBagConstraints = new java.awt.GridBagConstraints JavaDoc();
486         gridBagConstraints.gridx = 0;
487         gridBagConstraints.gridy = 2;
488         gridBagConstraints.gridwidth = 3;
489         gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
490         gridBagConstraints.insets = new java.awt.Insets JavaDoc(11, 12, 0, 11);
491         add(jLabelNote, gridBagConstraints);
492     }
493
494     // Code for dispatching events from components to event handlers.
495

496     private class FormListener implements java.awt.event.ActionListener JavaDoc {
497         FormListener() {}
498         public void actionPerformed(java.awt.event.ActionEvent JavaDoc evt) {
499             if (evt.getSource() == jButtonAdd) {
500                 DBSchemaTablesPanel.this.jButtonAddActionPerformed(evt);
501             }
502             else if (evt.getSource() == jButtonRemove) {
503                 DBSchemaTablesPanel.this.jButtonRemoveActionPerformed(evt);
504             }
505             else if (evt.getSource() == jButtonAddAll) {
506                 DBSchemaTablesPanel.this.jButtonAddAllActionPerformed(evt);
507             }
508             else if (evt.getSource() == jButtonRemoveAll) {
509                 DBSchemaTablesPanel.this.jButtonRemoveAllActionPerformed(evt);
510             }
511         }
512     }// </editor-fold>//GEN-END:initComponents
513

514     private void jButtonRemoveAllActionPerformed(java.awt.event.ActionEvent JavaDoc evt) {//GEN-FIRST:event_jButtonRemoveAllActionPerformed
515
SortedListModel ulm = (SortedListModel) jListAvailableTables.getModel();
516         SortedListModel slm = (SortedListModel) jListSelectedTables.getModel();
517
518         Object JavaDoc[] values = slm.toArray();
519         for (int i = 0; i < values.length; i++) {
520             ulm.add(values[i]);
521             slm.remove(values[i]);
522         }
523
524         tables.clear();
525         views.clear();
526
527         int[] sel = new int[values.length];
528         for (int i = 0; i < values.length; i++)
529             sel[i] = ulm.indexOf(values[i]);
530         jListAvailableTables.setSelectedIndices(sel);
531
532         setSelection();
533         updateButtons();
534     }//GEN-LAST:event_jButtonRemoveAllActionPerformed
535

536     private void jButtonAddAllActionPerformed(java.awt.event.ActionEvent JavaDoc evt) {//GEN-FIRST:event_jButtonAddAllActionPerformed
537
SortedListModel ulm = (SortedListModel) jListAvailableTables.getModel();
538         SortedListModel slm = (SortedListModel) jListSelectedTables.getModel();
539
540         String JavaDoc name;
541         Object JavaDoc[] values = ulm.toArray();
542         for (int i = 0; i < values.length; i++) {
543             slm.add(values[i]);
544             ulm.remove(values[i]);
545
546             name = values[i].toString();
547             if (name.startsWith(bundle.getString("TablePrefix"))) //NOI18N
548
tables.add(name.substring(name.indexOf(" ") + 1)); //NOI18N
549
else
550                 views.add(name.substring(name.indexOf(" ") + 1)); //NOI18N
551
}
552
553         int[] sel = new int[values.length];
554         for (int i = 0; i < values.length; i++)
555             sel[i] = slm.indexOf(values[i]);
556         jListSelectedTables.setSelectedIndices(sel);
557
558         setSelection();
559         updateButtons();
560     }//GEN-LAST:event_jButtonAddAllActionPerformed
561

562     private void jButtonRemoveActionPerformed(java.awt.event.ActionEvent JavaDoc evt) {//GEN-FIRST:event_jButtonRemoveActionPerformed
563
SortedListModel ulm = (SortedListModel) jListAvailableTables.getModel();
564         SortedListModel slm = (SortedListModel) jListSelectedTables.getModel();
565
566         String JavaDoc name;
567         Object JavaDoc[] values = jListSelectedTables.getSelectedValues();
568         for (int i = 0; i < values.length; i++) {
569             ulm.add(values[i]);
570             slm.remove(values[i]);
571
572             name = values[i].toString();
573             name = (name.substring(name.indexOf(" "))).trim(); //NOI18N
574
if (tables.contains(name))
575                 tables.remove(name);
576             else
577                 views.remove(name);
578         }
579
580         int[] sel = new int[values.length];
581         for (int i = 0; i < values.length; i++)
582             sel[i] = ulm.indexOf(values[i]);
583         jListAvailableTables.setSelectedIndices(sel);
584
585         setSelection();
586         updateButtons();
587     }//GEN-LAST:event_jButtonRemoveActionPerformed
588

589     private void jButtonAddActionPerformed(java.awt.event.ActionEvent JavaDoc evt) {//GEN-FIRST:event_jButtonAddActionPerformed
590
SortedListModel ulm = (SortedListModel) jListAvailableTables.getModel();
591         SortedListModel slm = (SortedListModel) jListSelectedTables.getModel();
592
593         String JavaDoc name;
594         Object JavaDoc[] values = jListAvailableTables.getSelectedValues();
595         for (int i = 0; i < values.length; i++) {
596             slm.add(values[i]);
597             ulm.remove(values[i]);
598
599             name = values[i].toString();
600             if (name.startsWith(bundle.getString("TablePrefix"))) //NOI18N
601
tables.add(name.substring(name.indexOf(" ") + 1)); //NOI18N
602
else
603                 views.add(name.substring(name.indexOf(" ") + 1)); //NOI18N
604
}
605
606         int[] sel = new int[values.length];
607         for (int i = 0; i < values.length; i++)
608             sel[i] = slm.indexOf(values[i]);
609         jListSelectedTables.setSelectedIndices(sel);
610
611         setSelection();
612         updateButtons();
613     }//GEN-LAST:event_jButtonAddActionPerformed
614

615     // Variables declaration - do not modify//GEN-BEGIN:variables
616
private javax.swing.JButton JavaDoc jButtonAdd;
617     private javax.swing.JButton JavaDoc jButtonAddAll;
618     private javax.swing.JButton JavaDoc jButtonRemove;
619     private javax.swing.JButton JavaDoc jButtonRemoveAll;
620     private javax.swing.JLabel JavaDoc jLabelAvailableTables;
621     private javax.swing.JLabel JavaDoc jLabelNote;
622     private javax.swing.JLabel JavaDoc jLabelSelectedTables;
623     private javax.swing.JList JavaDoc jListAvailableTables;
624     private javax.swing.JList JavaDoc jListSelectedTables;
625     private javax.swing.JPanel JavaDoc jPanelButtons;
626     private javax.swing.JScrollPane JavaDoc jScrollPaneAvailableTables;
627     private javax.swing.JScrollPane JavaDoc jScrollPaneSelectedTables;
628     // End of variables declaration//GEN-END:variables
629

630     private void setSelection() {
631         data.setTables(tables);
632         data.setViews(views);
633
634         if (tablesCount == tables.size())
635             data.setAllTables(true);
636         else
637             data.setAllTables(false);
638     }
639
640     private void updateButtons() {
641         jButtonAdd.setEnabled(jListAvailableTables.getSelectedIndex() == -1 ? false : true);
642         jButtonAddAll.setEnabled(((SortedListModel) jListAvailableTables.getModel()).isEmpty() ? false : true);
643         jButtonRemove.setEnabled(jListSelectedTables.getSelectedIndex() == -1 ? false : true);
644         jButtonRemoveAll.setEnabled(((SortedListModel) jListSelectedTables.getModel()).isEmpty() ? false : true);
645     }
646
647     public boolean isValid() {
648         if (jListSelectedTables.getModel().getSize() > 0)
649             return true;
650         else
651             return false;
652     }
653
654     public void intervalAdded(javax.swing.event.ListDataEvent JavaDoc p1) {
655         fireChange(this);
656     }
657
658     public void intervalRemoved(javax.swing.event.ListDataEvent JavaDoc p1) {
659         fireChange(this);
660     }
661
662     public void contentsChanged(javax.swing.event.ListDataEvent JavaDoc p1) {
663         fireChange(this);
664     }
665
666     public void fireChange (Object JavaDoc source) {
667         ArrayList JavaDoc lst;
668
669         synchronized (this) {
670             lst = (ArrayList JavaDoc) this.list.clone();
671         }
672
673         ChangeEvent event = new ChangeEvent(source);
674         for (int i=0; i< lst.size(); i++){
675             ChangeListener listener = (ChangeListener) lst.get(i);
676             listener.stateChanged(event);
677         }
678     }
679     
680     private static abstract class Handler {
681         
682         public abstract void handle(Parameters params);
683         
684         public String JavaDoc getMessage() {
685             return null;
686         }
687         
688         public boolean getRunInEDT() {
689             return false;
690         }
691         
692         public boolean isRunnable() {
693             return true;
694         }
695         
696         public String JavaDoc toString() {
697             return "Handler[message='" + getMessage() + "',runInEDT=" + getRunInEDT() + ",runnable=" + isRunnable() + "]"; // NOI18N
698
}
699     }
700     
701     private static final class Parameters {
702         
703         private boolean result;
704
705         public boolean getResult() {
706             return result;
707         }
708
709         public void setResult(boolean result) {
710             this.result = result;
711         }
712     }
713 }
714
Popular Tags