001: /*
002: * TableSearchPanel.java
003: *
004: * This file is part of SQL Workbench/J, http://www.sql-workbench.net
005: *
006: * Copyright 2002-2008, Thomas Kellerer
007: * No part of this code maybe reused without the permission of the author
008: *
009: * To contact the author please send an email to: support@sql-workbench.net
010: *
011: */
012: package workbench.gui.dbobjects;
013:
014: import java.awt.Component;
015: import java.awt.Container;
016: import java.awt.Dimension;
017: import java.awt.EventQueue;
018: import java.awt.Font;
019: import java.awt.GridBagConstraints;
020: import java.awt.GridBagLayout;
021: import java.awt.event.KeyEvent;
022: import java.awt.event.KeyListener;
023:
024: import javax.swing.JPanel;
025: import javax.swing.JScrollBar;
026: import javax.swing.JScrollPane;
027: import javax.swing.ListSelectionModel;
028: import javax.swing.border.Border;
029: import javax.swing.border.CompoundBorder;
030: import javax.swing.border.EmptyBorder;
031: import javax.swing.border.TitledBorder;
032: import javax.swing.event.ListSelectionEvent;
033: import javax.swing.event.ListSelectionListener;
034: import javax.swing.table.TableModel;
035:
036: import workbench.db.DbMetadata;
037: import workbench.db.TableIdentifier;
038: import workbench.db.TableSearcher;
039: import workbench.db.WbConnection;
040: import workbench.gui.WbSwingUtilities;
041: import workbench.gui.actions.ReloadAction;
042: import workbench.gui.actions.WbAction;
043: import workbench.gui.components.DataStoreTableModel;
044: import workbench.gui.components.EmptyTableModel;
045: import workbench.gui.components.FlatButton;
046: import workbench.gui.components.TextComponentMouseListener;
047: import workbench.gui.components.WbScrollPane;
048: import workbench.gui.components.WbSplitPane;
049: import workbench.gui.components.WbTabbedPane;
050: import workbench.gui.components.WbTable;
051: import workbench.gui.components.WbToolbar;
052: import workbench.gui.sql.EditorPanel;
053: import workbench.interfaces.PropertyStorage;
054: import workbench.interfaces.ShareableDisplay;
055: import workbench.interfaces.TableSearchDisplay;
056: import workbench.log.LogMgr;
057: import workbench.resource.ResourceMgr;
058: import workbench.resource.Settings;
059: import workbench.storage.DataStore;
060: import workbench.storage.filter.ColumnExpression;
061: import workbench.storage.filter.ContainsComparator;
062: import workbench.util.StringUtil;
063: import workbench.util.WbWorkspace;
064:
065: /**
066: * A display for the results of a {@link workbench.db.TableSearcher}
067: *
068: * @author support@sql-workbench.net
069: */
070: public class TableSearchPanel extends JPanel implements
071: TableSearchDisplay, ListSelectionListener, KeyListener {
072: private TableModel tableListModel;
073: private TableSearcher searcher;
074: private WbConnection connection;
075: private boolean tableLogged;
076: private String fixedStatusText;
077: private ShareableDisplay tableListSource;
078: private ColumnExpression searchPattern;
079: private EditorPanel sqlDisplay;
080: private FlatButton startButton;
081:
082: public TableSearchPanel(ShareableDisplay aTableListSource) {
083: this .tableListModel = EmptyTableModel.EMPTY_MODEL;
084: this .tableListSource = aTableListSource;
085: initComponents();
086:
087: JScrollBar sb = this .resultScrollPane.getVerticalScrollBar();
088: sb.setUnitIncrement(25); // approx. one line
089: sb.setBlockIncrement(25 * 5); // approx. 5 lines
090:
091: this .columnFunction
092: .addMouseListener(new TextComponentMouseListener());
093: this .searchText
094: .addMouseListener(new TextComponentMouseListener());
095:
096: sqlDisplay = EditorPanel.createSqlEditor();
097: this .resultTabPane.addTab(ResourceMgr
098: .getString("LblTableSearchSqlLog"), sqlDisplay);
099:
100: WbTable tables = (WbTable) this .tableNames;
101: tables.setAdjustToColumnLabel(false);
102:
103: WbToolbar toolbar = new WbToolbar();
104: WbAction reload = new ReloadAction(this .tableListSource);
105: reload.setTooltip(ResourceMgr.getString("TxtRefreshTableList"));
106: toolbar.add(reload);
107: buttonPanel.add(toolbar);
108:
109: startButton = new FlatButton();
110: startButton.setText(ResourceMgr.getString("LblStartSearch"));
111: startButton
112: .addActionListener(new java.awt.event.ActionListener() {
113: public void actionPerformed(
114: java.awt.event.ActionEvent evt) {
115: startSearch();
116: }
117: });
118: buttonPanel.add(startButton);
119: this .searcher = new TableSearcher();
120: this .searcher.setDisplay(this );
121:
122: this .tableNames.getSelectionModel().setSelectionMode(
123: ListSelectionModel.MULTIPLE_INTERVAL_SELECTION);
124: this .fixedStatusText = ResourceMgr
125: .getString("TxtSearchingTable")
126: + " ";
127: tables.getSelectionModel().addListSelectionListener(this );
128: this .startButton.setEnabled(false);
129: this .searchText.addKeyListener(this );
130: Border eb = new EmptyBorder(0, 2, 0, 0);
131: CompoundBorder b2 = new CompoundBorder(this .statusInfo
132: .getBorder(), eb);
133: this .statusInfo.setBorder(b2);
134: }
135:
136: private void startSearch() {
137: if (this .searcher.isRunning()) {
138: setStartButtonEnabled(false);
139: this .searcher.cancelSearch();
140: } else {
141: this .searchData();
142: }
143: }
144:
145: private void setStartButtonEnabled(final boolean flag) {
146: WbSwingUtilities.invoke(new Runnable() {
147: public void run() {
148: startButton.setEnabled(flag);
149: }
150: });
151: }
152:
153: public synchronized void tableSearched(TableIdentifier table,
154: DataStore result) {
155: try {
156: if (result.getRowCount() == 0)
157: return;
158:
159: WbTable display = new WbTable(true, true, false);
160: display.getCopyAsInsertAction().setEnabled(true);
161: display.getCopyAsUpdateAction().setEnabled(true);
162: display.getCopyAsDeleteInsertAction().setEnabled(true);
163:
164: DataStoreTableModel model = new DataStoreTableModel(result);
165: display.setModel(model, true);
166: display.applyHighlightExpression(searchPattern);
167: display.adjustOrOptimizeColumns();
168:
169: JScrollPane pane = new ParentWidthScrollPane(display);
170:
171: int rows = display.getRowCount();
172:
173: String label = table.getTableExpression()
174: + " ("
175: + rows
176: + " "
177: + (rows == 1 ? ResourceMgr.getString("TxtFoundRow")
178: : ResourceMgr.getString("TxtFoundRows"))
179: + ")";
180: TitledBorder b = new TitledBorder(" " + label);
181: Font f = b.getTitleFont().deriveFont(Font.BOLD);
182: b.setTitleFont(f);
183: pane.setBorder(b);
184:
185: GridBagConstraints constraints = new GridBagConstraints();
186: constraints.gridx = 0;
187: constraints.fill = GridBagConstraints.HORIZONTAL;
188: constraints.weightx = 1.0;
189: constraints.anchor = GridBagConstraints.WEST;
190: this .resultPanel.add(pane, constraints);
191:
192: int height = display.getRowHeight();
193: int width = pane.getWidth();
194:
195: Dimension size = pane.getPreferredSize();
196: if (rows > 25)
197: rows = 25;
198: size.setSize(width - 20, (rows + 4) * height);
199: pane.setPreferredSize(size);
200: } catch (Exception e) {
201: LogMgr.logError("TableSearchPanel.tableSearched()",
202: "Error adding result.", e);
203: }
204: }
205:
206: public synchronized void error(String msg) {
207: this .sqlDisplay.appendLine(msg);
208: this .sqlDisplay.appendLine("\n\n");
209: }
210:
211: /**
212: * Call back function from the table searcher...
213: */
214: public synchronized void setCurrentTable(String table, String sql) {
215: this .tableLogged = false;
216: if (sql == null) {
217: String msg = ResourceMgr.getFormattedString(
218: "MsgNoCharCols", table);
219: this .sqlDisplay.appendLine("-- " + msg);
220: } else {
221: this .statusInfo.setText(this .fixedStatusText + table);
222: this .sqlDisplay.appendLine(sql + ";");
223: }
224: this .sqlDisplay.appendLine("\n\n");
225: }
226:
227: public void setStatusText(String aStatustext) {
228: this .statusInfo.setText(aStatustext);
229: }
230:
231: public void setConnection(WbConnection connection) {
232: this .connection = connection;
233: this .searcher.setConnection(connection);
234: this .tableListSource.addTableListDisplayClient(this .tableNames);
235: }
236:
237: public void disconnect() {
238: this .reset();
239: this .tableListSource
240: .removeTableListDisplayClient(this .tableNames);
241: }
242:
243: public void reset() {
244: // resultPanel.removeAll() does not work properly for some reason
245: // the old tables just stay in there
246: // so I re-create the actual result panel
247: this .resultPanel = new JPanel(new GridBagLayout());
248: this .resultScrollPane.setViewportView(resultPanel);
249: this .sqlDisplay.setText("");
250: }
251:
252: public void searchData() {
253: if (!searcher.setColumnFunction(this .columnFunction.getText())) {
254: WbSwingUtilities.showErrorMessageKey(this ,
255: "MsgErrorColFunction");
256: return;
257: }
258:
259: if (this .tableNames.getSelectedRowCount() == 0)
260: return;
261: if (this .connection.isBusy()) {
262: WbSwingUtilities.showMessageKey(this , "ErrConnectionBusy");
263: return;
264: }
265:
266: this .reset();
267:
268: int[] selectedTables = this .tableNames.getSelectedRows();
269:
270: TableIdentifier[] searchTables = new TableIdentifier[this .tableNames
271: .getSelectedRowCount()];
272: DataStore tables = ((WbTable) (this .tableNames)).getDataStore();
273: for (int i = 0; i < selectedTables.length; i++) {
274: String catalog = tables.getValueAsString(selectedTables[i],
275: DbMetadata.COLUMN_IDX_TABLE_LIST_CATALOG);
276: String schema = tables.getValueAsString(selectedTables[i],
277: DbMetadata.COLUMN_IDX_TABLE_LIST_SCHEMA);
278: String tablename = tables.getValueAsString(
279: selectedTables[i],
280: DbMetadata.COLUMN_IDX_TABLE_LIST_NAME);
281: String type = tables.getValueAsString(selectedTables[i],
282: DbMetadata.COLUMN_IDX_TABLE_LIST_TYPE);
283:
284: searchTables[i] = new TableIdentifier(catalog, schema,
285: tablename);
286: searchTables[i].setNeverAdjustCase(true);
287: searchTables[i].setType(type);
288: }
289:
290: int maxRows = StringUtil
291: .getIntValue(this .rowCount.getText(), 0);
292:
293: String text = this .searchText.getText();
294: searcher.setMaxRows(maxRows);
295: searcher.setCriteria(text);
296: searcher.setExcludeLobColumns(excludeLobs.isSelected());
297: boolean sensitive = this .connection.getDbSettings()
298: .isStringComparisonCaseSensitive();
299: boolean ignoreCase = !sensitive;
300: if (sensitive) {
301: ignoreCase = searcher.getCriteriaMightBeCaseInsensitive();
302: }
303: // Remove SQL "syntax" from the criteria
304: String expressionPattern = StringUtil.trimQuotes(text
305: .replaceAll("[%_]", ""));
306: searchPattern = new ColumnExpression("*",
307: new ContainsComparator(), expressionPattern);
308: searchPattern.setIgnoreCase(ignoreCase);
309:
310: searcher.setTableNames(searchTables);
311: searcher.search(); // starts the background thread
312: }
313:
314: private String getWorkspacePrefix(int index) {
315: return "dbexplorer" + index + ".tablesearcher";
316: }
317:
318: public void saveToWorkspace(WbWorkspace wb, int index) {
319: saveSettings(getWorkspacePrefix(index), wb.getSettings());
320: }
321:
322: public void readFromWorkspace(WbWorkspace wb, int index) {
323: restoreSettings(getWorkspacePrefix(index), wb.getSettings());
324: }
325:
326: public void saveSettings() {
327: saveSettings(this .getClass().getName(), Settings.getInstance());
328: }
329:
330: private void saveSettings(String prefix, PropertyStorage props) {
331: props.setProperty(prefix + ".divider", this .jSplitPane1
332: .getDividerLocation());
333: props.setProperty(prefix + ".criteria", this .searchText
334: .getText());
335: props.setProperty(prefix + ".maxrows", this .rowCount.getText());
336: props.setProperty(prefix + ".column-function",
337: this .columnFunction.getText());
338: props.setProperty(prefix + ".excludelobs", excludeLobs
339: .isSelected());
340: }
341:
342: public void restoreSettings() {
343: restoreSettings(this .getClass().getName(), Settings
344: .getInstance());
345: }
346:
347: private void restoreSettings(String prefix, PropertyStorage props) {
348: int loc = props.getIntProperty(prefix + ".divider", 200);
349: this .jSplitPane1.setDividerLocation(loc);
350: this .searchText.setText(props.getProperty(prefix + ".criteria",
351: ""));
352: this .rowCount.setText(props.getProperty(prefix + ".maxrows",
353: "0"));
354: this .columnFunction.setText(props.getProperty(prefix
355: + ".column-function", "$col$"));
356: this .excludeLobs.setSelected(props.getBoolProperty(prefix
357: + ".excludelobs", true));
358: }
359:
360: public void searchEnded() {
361: // insert a dummy panel at the end which will move
362: // all tables in the pane to the upper border
363: // e.g. when there is only one table
364: WbSwingUtilities.invoke(new Runnable() {
365: public void run() {
366: GridBagConstraints constraints = new GridBagConstraints();
367: constraints.gridx = 0;
368: constraints.weighty = 1.0;
369: constraints.anchor = GridBagConstraints.NORTHWEST;
370: resultPanel.add(new JPanel(), constraints);
371:
372: resultPanel.doLayout();
373: searchText.setEnabled(true);
374: columnFunction.setEnabled(true);
375: startButton.setText(ResourceMgr
376: .getString("LblStartSearch"));
377: statusInfo.setText("");
378: startButton
379: .setEnabled(tableNames.getSelectedRowCount() > 0);
380: }
381: });
382: }
383:
384: public void searchStarted() {
385: this .searchText.setEnabled(false);
386: this .columnFunction.setEnabled(false);
387: startButton.setText(ResourceMgr.getString("LblCancelSearch"));
388: }
389:
390: public void valueChanged(ListSelectionEvent e) {
391: this .startButton.setEnabled(this .tableNames
392: .getSelectedRowCount() > 0);
393: }
394:
395: public void keyPressed(java.awt.event.KeyEvent e) {
396: if (e.getKeyCode() == KeyEvent.VK_ENTER) {
397: EventQueue.invokeLater(new Runnable() {
398: public void run() {
399: searchData();
400: }
401: });
402: }
403: }
404:
405: public void keyReleased(java.awt.event.KeyEvent e) {
406: }
407:
408: public void keyTyped(java.awt.event.KeyEvent e) {
409: }
410:
411: static class ParentWidthScrollPane extends JScrollPane {
412: private Dimension preferredSize = new Dimension(0, 0);
413:
414: public ParentWidthScrollPane(Component view) {
415: super (view);
416: }
417:
418: public Dimension getPreferredSize() {
419: Dimension d = super .getPreferredSize();
420: Container parent = this .getParent();
421: this .preferredSize.setSize((double) parent.getWidth() - 5,
422: d.getHeight());
423: return this .preferredSize;
424: }
425: }
426:
427: /** This method is called from within the constructor to
428: * initialize the form.
429: * WARNING: Do NOT modify this code. The content of this method is
430: * always regenerated by the Form Editor.
431: */
432: // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
433: private void initComponents() {
434: java.awt.GridBagConstraints gridBagConstraints;
435:
436: buttonGroup1 = new javax.swing.ButtonGroup();
437: jSplitPane1 = new WbSplitPane();
438: resultTabPane = new WbTabbedPane();
439: resultScrollPane = new WbScrollPane();
440: resultPanel = new javax.swing.JPanel();
441: tablePane = new javax.swing.JPanel();
442: tableListScrollPane = new WbScrollPane();
443: tableNames = new WbTable(true, false, false);
444: selectButtonPanel = new javax.swing.JPanel();
445: selectAllButton = new javax.swing.JButton();
446: jPanel2 = new javax.swing.JPanel();
447: selectNoneButton = new javax.swing.JButton();
448: statusInfo = new javax.swing.JLabel();
449: entryPanel = new javax.swing.JPanel();
450: searchText = new javax.swing.JTextField();
451: likeLabel = new javax.swing.JLabel();
452: columnFunction = new javax.swing.JTextField();
453: labelRowCount = new javax.swing.JLabel();
454: rowCount = new javax.swing.JTextField();
455: buttonPanel = new javax.swing.JPanel();
456: excludeLobs = new javax.swing.JCheckBox();
457:
458: setLayout(new java.awt.BorderLayout());
459:
460: jSplitPane1.setBorder(javax.swing.BorderFactory
461: .createEmptyBorder(1, 1, 1, 1));
462: jSplitPane1.setDividerLocation(150);
463:
464: resultScrollPane.setBorder(javax.swing.BorderFactory
465: .createEmptyBorder(1, 1, 1, 1));
466: resultScrollPane
467: .setHorizontalScrollBarPolicy(javax.swing.ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);
468:
469: resultPanel.setBorder(javax.swing.BorderFactory
470: .createEmptyBorder(0, 0, 0, 0));
471: resultPanel.setLayout(new java.awt.GridBagLayout());
472: resultScrollPane.setViewportView(resultPanel);
473:
474: resultTabPane
475: .addTab(ResourceMgr
476: .getString("LblTableSearchResultTab"),
477: resultScrollPane);
478:
479: jSplitPane1.setRightComponent(resultTabPane);
480:
481: tablePane.setLayout(new java.awt.BorderLayout());
482:
483: tableNames.setModel(this .tableListModel);
484: tableListScrollPane.setViewportView(tableNames);
485:
486: tablePane
487: .add(tableListScrollPane, java.awt.BorderLayout.CENTER);
488:
489: selectButtonPanel.setLayout(new java.awt.FlowLayout(
490: java.awt.FlowLayout.CENTER, 0, 3));
491:
492: selectAllButton.setText(ResourceMgr.getString("LblSelectAll"));
493: selectAllButton
494: .addActionListener(new java.awt.event.ActionListener() {
495: public void actionPerformed(
496: java.awt.event.ActionEvent evt) {
497: selectAllButtonActionPerformed(evt);
498: }
499: });
500: selectButtonPanel.add(selectAllButton);
501:
502: jPanel2.setMaximumSize(new java.awt.Dimension(5, 0));
503: jPanel2.setMinimumSize(new java.awt.Dimension(4, 0));
504: jPanel2.setPreferredSize(new java.awt.Dimension(4, 0));
505: selectButtonPanel.add(jPanel2);
506:
507: selectNoneButton
508: .setText(ResourceMgr.getString("LblSelectNone"));
509: selectNoneButton
510: .addActionListener(new java.awt.event.ActionListener() {
511: public void actionPerformed(
512: java.awt.event.ActionEvent evt) {
513: selectNoneButtonActionPerformed(evt);
514: }
515: });
516: selectButtonPanel.add(selectNoneButton);
517:
518: tablePane.add(selectButtonPanel, java.awt.BorderLayout.NORTH);
519:
520: jSplitPane1.setLeftComponent(tablePane);
521:
522: add(jSplitPane1, java.awt.BorderLayout.CENTER);
523:
524: statusInfo.setBorder(javax.swing.BorderFactory
525: .createEtchedBorder());
526: statusInfo.setMinimumSize(new java.awt.Dimension(4, 22));
527: statusInfo.setPreferredSize(new java.awt.Dimension(4, 22));
528: add(statusInfo, java.awt.BorderLayout.SOUTH);
529:
530: entryPanel.setLayout(new java.awt.GridBagLayout());
531:
532: searchText.setColumns(20);
533: searchText.setText("% ... %");
534: searchText.setToolTipText(ResourceMgr
535: .getDescription("LblSearchTableCriteria"));
536: searchText.setMinimumSize(new java.awt.Dimension(100, 20));
537: gridBagConstraints = new java.awt.GridBagConstraints();
538: gridBagConstraints.gridx = 4;
539: gridBagConstraints.gridy = 0;
540: gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
541: gridBagConstraints.weightx = 1.0;
542: entryPanel.add(searchText, gridBagConstraints);
543:
544: likeLabel.setText("LIKE");
545: likeLabel.setToolTipText(ResourceMgr
546: .getDescription("LblSearchTableCriteria"));
547: gridBagConstraints = new java.awt.GridBagConstraints();
548: gridBagConstraints.gridx = 3;
549: gridBagConstraints.gridy = 0;
550: gridBagConstraints.insets = new java.awt.Insets(0, 2, 0, 2);
551: entryPanel.add(likeLabel, gridBagConstraints);
552:
553: columnFunction.setColumns(8);
554: columnFunction.setText("$col$");
555: gridBagConstraints = new java.awt.GridBagConstraints();
556: gridBagConstraints.gridx = 2;
557: gridBagConstraints.gridy = 0;
558: gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
559: gridBagConstraints.anchor = java.awt.GridBagConstraints.EAST;
560: gridBagConstraints.insets = new java.awt.Insets(0, 5, 0, 0);
561: entryPanel.add(columnFunction, gridBagConstraints);
562:
563: labelRowCount.setLabelFor(rowCount);
564: labelRowCount.setText(ResourceMgr.getString("LblMaxRows"));
565: gridBagConstraints = new java.awt.GridBagConstraints();
566: gridBagConstraints.gridx = 5;
567: gridBagConstraints.gridy = 0;
568: gridBagConstraints.anchor = java.awt.GridBagConstraints.EAST;
569: gridBagConstraints.insets = new java.awt.Insets(0, 20, 0, 0);
570: entryPanel.add(labelRowCount, gridBagConstraints);
571:
572: rowCount.setColumns(4);
573: rowCount.setHorizontalAlignment(javax.swing.JTextField.RIGHT);
574: rowCount.setText("0");
575: rowCount.setMinimumSize(new java.awt.Dimension(30, 20));
576: gridBagConstraints = new java.awt.GridBagConstraints();
577: gridBagConstraints.gridx = 6;
578: gridBagConstraints.gridy = 0;
579: gridBagConstraints.anchor = java.awt.GridBagConstraints.EAST;
580: gridBagConstraints.insets = new java.awt.Insets(0, 2, 0, 5);
581: entryPanel.add(rowCount, gridBagConstraints);
582:
583: buttonPanel.setLayout(new java.awt.FlowLayout(
584: java.awt.FlowLayout.CENTER, 2, 0));
585: gridBagConstraints = new java.awt.GridBagConstraints();
586: gridBagConstraints.gridx = 0;
587: gridBagConstraints.gridy = 0;
588: gridBagConstraints.gridwidth = 2;
589: gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH;
590: entryPanel.add(buttonPanel, gridBagConstraints);
591:
592: excludeLobs.setText(ResourceMgr.getString("LblExclLobs"));
593: gridBagConstraints = new java.awt.GridBagConstraints();
594: gridBagConstraints.gridx = 7;
595: gridBagConstraints.gridy = 0;
596: entryPanel.add(excludeLobs, gridBagConstraints);
597:
598: add(entryPanel, java.awt.BorderLayout.NORTH);
599: }// </editor-fold>//GEN-END:initComponents
600:
601: private void selectNoneButtonActionPerformed(
602: java.awt.event.ActionEvent evt)//GEN-FIRST:event_selectNoneButtonActionPerformed
603: {//GEN-HEADEREND:event_selectNoneButtonActionPerformed
604: this .tableNames.getSelectionModel().removeSelectionInterval(0,
605: this .tableNames.getRowCount() - 1);
606: }//GEN-LAST:event_selectNoneButtonActionPerformed
607:
608: private void selectAllButtonActionPerformed(
609: java.awt.event.ActionEvent evt)//GEN-FIRST:event_selectAllButtonActionPerformed
610: {//GEN-HEADEREND:event_selectAllButtonActionPerformed
611: this .tableNames.getSelectionModel().setSelectionInterval(0,
612: this .tableNames.getRowCount() - 1);
613: }//GEN-LAST:event_selectAllButtonActionPerformed
614:
615: // Variables declaration - do not modify//GEN-BEGIN:variables
616: protected javax.swing.ButtonGroup buttonGroup1;
617: protected javax.swing.JPanel buttonPanel;
618: protected javax.swing.JTextField columnFunction;
619: protected javax.swing.JPanel entryPanel;
620: protected javax.swing.JCheckBox excludeLobs;
621: protected javax.swing.JPanel jPanel2;
622: protected javax.swing.JSplitPane jSplitPane1;
623: protected javax.swing.JLabel labelRowCount;
624: protected javax.swing.JLabel likeLabel;
625: protected javax.swing.JPanel resultPanel;
626: protected javax.swing.JScrollPane resultScrollPane;
627: protected javax.swing.JTabbedPane resultTabPane;
628: protected javax.swing.JTextField rowCount;
629: protected javax.swing.JTextField searchText;
630: protected javax.swing.JButton selectAllButton;
631: protected javax.swing.JPanel selectButtonPanel;
632: protected javax.swing.JButton selectNoneButton;
633: protected javax.swing.JLabel statusInfo;
634: protected javax.swing.JScrollPane tableListScrollPane;
635: protected javax.swing.JTable tableNames;
636: protected javax.swing.JPanel tablePane;
637: // End of variables declaration//GEN-END:variables
638:
639: }
|