1 19 20 package org.netbeans.modules.dbschema.jdbcimpl.wizard; 21 22 import java.awt.event.ActionEvent ; 23 import java.awt.event.ActionListener ; 24 import java.awt.event.KeyEvent ; 25 import java.sql.Connection ; 26 import java.sql.ResultSet ; 27 import java.sql.SQLException ; 28 import java.util.ArrayList ; 29 import java.util.LinkedList ; 30 import java.util.List ; 31 import java.util.ResourceBundle ; 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"); private static final boolean LOG = LOGGER.isLoggable(ErrorManager.INFORMATIONAL); 51 52 private final ResourceBundle bundle = NbBundle.getBundle("org.netbeans.modules.dbschema.jdbcimpl.resources.Bundle"); 54 private LinkedList tables; 55 private LinkedList views; 56 private ConnectionProvider cp; 57 private String schema; 58 private String driver; 59 60 private DatabaseConnection dbconnOld; 61 private Connection conn; 62 63 private DBSchemaWizardData data; 64 65 private int tablesCount; 66 67 private ArrayList list; 68 69 70 public DBSchemaTablesPanel(DBSchemaWizardData data, ArrayList list) { 71 this.list = list; 72 this.data = data; 73 tables = new LinkedList (); 74 views = new LinkedList (); 75 cp = null; 76 77 putClientProperty("WizardPanel_contentSelectedIndex", new Integer (2)); setName(bundle.getString("TablesChooser")); 80 initComponents(); 81 initAccessibility(); 82 83 jListAvailableTables.registerKeyboardAction(new ActionListener () { 84 public void actionPerformed(ActionEvent e) { 85 jListAvailableTables.requestFocus(); 86 } 87 }, KeyStroke.getKeyStroke(KeyEvent.VK_T, KeyEvent.ALT_MASK), JComponent.WHEN_IN_FOCUSED_WINDOW); 88 jListSelectedTables.registerKeyboardAction(new ActionListener () { 89 public void actionPerformed(ActionEvent 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 handlers = new ArrayList (); 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 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 144 final DatabaseConnection dbconn = data.getDatabaseConnection(); 145 conn = dbconn.getJDBCConnection(); 146 147 if (conn != null) { 149 handlers.add(new Handler() { 150 public void handle(Parameters params) { 151 try { 152 conn.getCatalog(); } catch (SQLException exc) { 154 conn = null; 155 } 156 } 157 public String 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 if (conn != null) { 181 try { 182 conn.getCatalog(); } catch (SQLException 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 exc) { 207 } 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 rs; 219 bridge.getDriverSpecification().getTables("%", new String [] {"TABLE"}); rs = bridge.getDriverSpecification().getResultSet(); 221 if (rs != null) { 222 while (rs.next()) 223 tables.add(rs.getString("TABLE_NAME").trim()); rs.close(); 225 } 226 227 rs = null; 228 if (bridge.getDriverSpecification().areViewsSupported()) { 229 bridge.getDriverSpecification().getTables("%", new String [] {"VIEW"}); rs = bridge.getDriverSpecification().getResultSet(); 231 } 232 if (rs != null) { 233 while (rs.next()) 234 views.add(rs.getString("TABLE_NAME").trim()); rs.close(); 236 } 237 } catch (SQLException 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()); 249 for (int i = 0; i < views.size(); i++) 250 ((SortedListModel) jListAvailableTables.getModel()).add(bundle.getString("ViewPrefix") + " " + views.get(i).toString()); 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 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 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 () { 288 public void run() { 289 index[0] = invokeHandlers(handlers, index[0], params, progressPanel); 290 SwingUtilities.invokeLater(new Runnable () { 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 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); } 320 continue; 321 } 322 if (h.getRunInEDT() != isEDT) { 323 break; 324 } 325 if (LOG) { 326 LOGGER.log("Invoking " + h); } 328 if (progressPanel != null) { 329 final String message = h.getMessage(); 330 if (message != null) { 331 Mutex.EVENT.readAccess(new Runnable () { 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 exc) { 356 } 358 } 359 360 private void initAccessibility() { 361 this.getAccessibleContext().setAccessibleDescription(bundle.getString("ACS_TablesPanelA11yDesc")); jLabelAvailableTables.getAccessibleContext().setAccessibleDescription(bundle.getString("ACS_AvailableTablesA11yDesc")); jListAvailableTables.getAccessibleContext().setAccessibleName(bundle.getString("ACS_AvailableTablesListA11yName")); jLabelSelectedTables.getAccessibleContext().setAccessibleDescription(bundle.getString("ACS_SelectedTablesA11yDesc")); jListSelectedTables.getAccessibleContext().setAccessibleName(bundle.getString("ACS_SelectedTablesListA11yName")); jLabelNote.getAccessibleContext().setAccessibleDescription(bundle.getString("ACS_FKReferenceNoteA11yDesc")); } 368 369 374 private void initComponents() { 376 java.awt.GridBagConstraints gridBagConstraints; 377 378 jLabelAvailableTables = new javax.swing.JLabel (); 379 jScrollPaneAvailableTables = new javax.swing.JScrollPane (); 380 jListAvailableTables = new javax.swing.JList (); 381 jPanelButtons = new javax.swing.JPanel (); 382 jButtonAdd = new javax.swing.JButton (); 383 jButtonRemove = new javax.swing.JButton (); 384 jButtonAddAll = new javax.swing.JButton (); 385 jButtonRemoveAll = new javax.swing.JButton (); 386 jLabelSelectedTables = new javax.swing.JLabel (); 387 jScrollPaneSelectedTables = new javax.swing.JScrollPane (); 388 jListSelectedTables = new javax.swing.JList (); 389 jLabelNote = new javax.swing.JLabel (); 390 391 FormListener formListener = new FormListener(); 392 393 setPreferredSize(new java.awt.Dimension (400, 199)); 394 setLayout(new java.awt.GridBagLayout ()); 395 396 jLabelAvailableTables.setLabelFor(jListAvailableTables); 397 org.openide.awt.Mnemonics.setLocalizedText(jLabelAvailableTables, bundle.getString("AvailableTables")); gridBagConstraints = new java.awt.GridBagConstraints (); 399 gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST; 400 gridBagConstraints.insets = new java.awt.Insets (12, 12, 0, 0); 401 add(jLabelAvailableTables, gridBagConstraints); 402 403 jListAvailableTables.setToolTipText(bundle.getString("ACS_AvailableTablesListA11yDesc")); jListAvailableTables.setModel(new SortedListModel()); 405 jScrollPaneAvailableTables.setViewportView(jListAvailableTables); 406 407 gridBagConstraints = new java.awt.GridBagConstraints (); 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 (11, 12, 0, 0); 414 add(jScrollPaneAvailableTables, gridBagConstraints); 415 416 jPanelButtons.setLayout(new java.awt.GridBagLayout ()); 417 418 org.openide.awt.Mnemonics.setLocalizedText(jButtonAdd, bundle.getString("AddButton")); jButtonAdd.setToolTipText(bundle.getString("ACS_AddButtonA11yDesc")); jButtonAdd.addActionListener(formListener); 421 gridBagConstraints = new java.awt.GridBagConstraints (); 422 gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; 423 jPanelButtons.add(jButtonAdd, gridBagConstraints); 424 425 jButtonRemove.setToolTipText(bundle.getString("ACS_RemoveButtonA11yDesc")); org.openide.awt.Mnemonics.setLocalizedText(jButtonRemove, bundle.getString("RemoveButton")); jButtonRemove.addActionListener(formListener); 428 gridBagConstraints = new java.awt.GridBagConstraints (); 429 gridBagConstraints.gridx = 0; 430 gridBagConstraints.gridy = 1; 431 gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; 432 gridBagConstraints.insets = new java.awt.Insets (5, 0, 0, 0); 433 jPanelButtons.add(jButtonRemove, gridBagConstraints); 434 435 jButtonAddAll.setToolTipText(bundle.getString("ACS_AddAllButtonA11yDesc")); org.openide.awt.Mnemonics.setLocalizedText(jButtonAddAll, bundle.getString("AddAllButton")); jButtonAddAll.addActionListener(formListener); 438 gridBagConstraints = new java.awt.GridBagConstraints (); 439 gridBagConstraints.gridx = 0; 440 gridBagConstraints.gridy = 2; 441 gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; 442 gridBagConstraints.insets = new java.awt.Insets (17, 0, 0, 0); 443 jPanelButtons.add(jButtonAddAll, gridBagConstraints); 444 445 jButtonRemoveAll.setToolTipText(bundle.getString("ACS_RemoveAllButtonA11yDesc")); org.openide.awt.Mnemonics.setLocalizedText(jButtonRemoveAll, bundle.getString("RemoveAllButton")); jButtonRemoveAll.addActionListener(formListener); 448 gridBagConstraints = new java.awt.GridBagConstraints (); 449 gridBagConstraints.gridx = 0; 450 gridBagConstraints.gridy = 3; 451 gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; 452 gridBagConstraints.insets = new java.awt.Insets (5, 0, 0, 0); 453 jPanelButtons.add(jButtonRemoveAll, gridBagConstraints); 454 455 gridBagConstraints = new java.awt.GridBagConstraints (); 456 gridBagConstraints.gridx = 1; 457 gridBagConstraints.gridy = 0; 458 gridBagConstraints.gridheight = 2; 459 gridBagConstraints.insets = new java.awt.Insets (12, 11, 0, 11); 460 add(jPanelButtons, gridBagConstraints); 461 462 jLabelSelectedTables.setLabelFor(jListSelectedTables); 463 org.openide.awt.Mnemonics.setLocalizedText(jLabelSelectedTables, bundle.getString("SelectedTables")); gridBagConstraints = new java.awt.GridBagConstraints (); 465 gridBagConstraints.gridx = 2; 466 gridBagConstraints.gridy = 0; 467 gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST; 468 gridBagConstraints.insets = new java.awt.Insets (12, 0, 0, 11); 469 add(jLabelSelectedTables, gridBagConstraints); 470 471 jListSelectedTables.setModel(new SortedListModel()); 472 jListSelectedTables.setToolTipText(bundle.getString("ACS_SelectedTablesListA11yDesc")); jScrollPaneSelectedTables.setViewportView(jListSelectedTables); 474 475 gridBagConstraints = new java.awt.GridBagConstraints (); 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 (11, 0, 0, 11); 482 add(jScrollPaneSelectedTables, gridBagConstraints); 483 484 org.openide.awt.Mnemonics.setLocalizedText(jLabelNote, bundle.getString("FKReferenceNote")); gridBagConstraints = new java.awt.GridBagConstraints (); 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 (11, 12, 0, 11); 491 add(jLabelNote, gridBagConstraints); 492 } 493 494 496 private class FormListener implements java.awt.event.ActionListener { 497 FormListener() {} 498 public void actionPerformed(java.awt.event.ActionEvent 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 } 514 private void jButtonRemoveAllActionPerformed(java.awt.event.ActionEvent evt) { SortedListModel ulm = (SortedListModel) jListAvailableTables.getModel(); 516 SortedListModel slm = (SortedListModel) jListSelectedTables.getModel(); 517 518 Object [] 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 } 536 private void jButtonAddAllActionPerformed(java.awt.event.ActionEvent evt) { SortedListModel ulm = (SortedListModel) jListAvailableTables.getModel(); 538 SortedListModel slm = (SortedListModel) jListSelectedTables.getModel(); 539 540 String name; 541 Object [] 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"))) tables.add(name.substring(name.indexOf(" ") + 1)); else 550 views.add(name.substring(name.indexOf(" ") + 1)); } 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 } 562 private void jButtonRemoveActionPerformed(java.awt.event.ActionEvent evt) { SortedListModel ulm = (SortedListModel) jListAvailableTables.getModel(); 564 SortedListModel slm = (SortedListModel) jListSelectedTables.getModel(); 565 566 String name; 567 Object [] 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(); 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 } 589 private void jButtonAddActionPerformed(java.awt.event.ActionEvent evt) { SortedListModel ulm = (SortedListModel) jListAvailableTables.getModel(); 591 SortedListModel slm = (SortedListModel) jListSelectedTables.getModel(); 592 593 String name; 594 Object [] 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"))) tables.add(name.substring(name.indexOf(" ") + 1)); else 603 views.add(name.substring(name.indexOf(" ") + 1)); } 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 } 615 private javax.swing.JButton jButtonAdd; 617 private javax.swing.JButton jButtonAddAll; 618 private javax.swing.JButton jButtonRemove; 619 private javax.swing.JButton jButtonRemoveAll; 620 private javax.swing.JLabel jLabelAvailableTables; 621 private javax.swing.JLabel jLabelNote; 622 private javax.swing.JLabel jLabelSelectedTables; 623 private javax.swing.JList jListAvailableTables; 624 private javax.swing.JList jListSelectedTables; 625 private javax.swing.JPanel jPanelButtons; 626 private javax.swing.JScrollPane jScrollPaneAvailableTables; 627 private javax.swing.JScrollPane jScrollPaneSelectedTables; 628 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 p1) { 655 fireChange(this); 656 } 657 658 public void intervalRemoved(javax.swing.event.ListDataEvent p1) { 659 fireChange(this); 660 } 661 662 public void contentsChanged(javax.swing.event.ListDataEvent p1) { 663 fireChange(this); 664 } 665 666 public void fireChange (Object source) { 667 ArrayList lst; 668 669 synchronized (this) { 670 lst = (ArrayList ) 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 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 toString() { 697 return "Handler[message='" + getMessage() + "',runInEDT=" + getRunInEDT() + ",runnable=" + isRunnable() + "]"; } 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 |