package net.sourceforge.sqlexplorer.dialogs;
/*
* Copyright (C) 2006 Davy Vanherbergen
* dvanherbergen@users.sourceforge.net
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
import java.util.ArrayList;
import java.util.List;
import net.sourceforge.sqlexplorer.Messages;
import net.sourceforge.sqlexplorer.dbstructure.nodes.CatalogNode;
import net.sourceforge.sqlexplorer.dbstructure.nodes.DatabaseNode;
import net.sourceforge.sqlexplorer.dbstructure.nodes.SchemaNode;
import net.sourceforge.sqlexplorer.plugin.SQLExplorerPlugin;
import org.eclipse.jface.dialogs.Dialog;
import org.eclipse.jface.dialogs.IDialogConstants;
import org.eclipse.jface.viewers.IStructuredContentProvider;
import org.eclipse.jface.viewers.TableViewer;
import org.eclipse.jface.viewers.Viewer;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.MouseAdapter;
import org.eclipse.swt.events.MouseEvent;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.graphics.Point;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Event;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Listener;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Table;
import org.eclipse.swt.widgets.TableItem;
import org.eclipse.swt.widgets.Text;
public class FilterStructureDialog extends Dialog {
class TableContentProvider implements IStructuredContentProvider {
public void dispose() {
}
public Object[] getElements(Object input) {
if (input instanceof DatabaseNode) {
return ((DatabaseNode) input).getChildNames();
}
if (input instanceof SchemaNode) {
return ((SchemaNode) input).getChildNames();
}
if (input instanceof CatalogNode) {
return ((CatalogNode) input).getChildNames();
}
return new Object[0];
}
public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
}
}
private DatabaseNode _db;
private Text _filterText;
private String[] _folderFilter;
private Table _folderTable;
private String _nameFilter;
private Button _patternButton;
private String[] _schemaFilter;
private Table _schemaTable;
public FilterStructureDialog() {
super(SQLExplorerPlugin.getDefault().getDatabaseStructureView().getSite().getShell());
_db = SQLExplorerPlugin.getDefault().getDatabaseStructureView().getSession().getRoot();
}
public boolean close() {
// extract selections for schemas
List schemaSelection = new ArrayList();
TableItem[] items = _schemaTable.getItems();
if (items != null) {
for (int i = 0; i < items.length; i++) {
if (items[i].getChecked()) {
schemaSelection.add(items[i].getText());
}
}
}
if (schemaSelection.size() != 0) {
_schemaFilter = (String[]) schemaSelection.toArray(new String[] {});
} else {
_schemaFilter = null;
}
// extract selections for folders
List folderSelection = new ArrayList();
items = _folderTable.getItems();
if (items != null) {
for (int i = 0; i < items.length; i++) {
if (items[i].getChecked()) {
folderSelection.add(items[i].getText());
}
}
}
if (folderSelection.size() != 0) {
_folderFilter = (String[]) folderSelection.toArray(new String[] {});
} else {
_folderFilter = null;
}
// extract name pattern
if (_patternButton.getSelection() && _filterText.getText() != null
&& _filterText.getText().trim().length() != 0) {
_nameFilter = _filterText.getText().trim();
} else {
_nameFilter = null;
}
return super.close();
}
protected void configureShell(Shell shell) {
super.configureShell(shell);
String title = Messages.getString("FilterStructureDialog.Title.prefix") + " " + _db.getSession().toString()
+ " " + Messages.getString("FilterStructureDialog.Title.postfix");
shell.setText(title);
}
protected void createButtonsForButtonBar(Composite parent) {
createButton(parent, IDialogConstants.OK_ID, IDialogConstants.OK_LABEL, true);
createButton(parent, IDialogConstants.CANCEL_ID, IDialogConstants.CANCEL_LABEL, false);
}
protected Control createDialogArea(Composite parent) {
final Composite composite = (Composite) super.createDialogArea(parent);
try {
GridLayout layout = new GridLayout();
layout.numColumns = 2;
layout.marginLeft = 10;
layout.marginRight = 15;
layout.horizontalSpacing = 0;
layout.verticalSpacing = 5;
layout.marginWidth = 0;
layout.marginHeight = 5;
GridData gridData = new GridData(GridData.FILL_BOTH);
gridData.grabExcessHorizontalSpace = true;
gridData.grabExcessVerticalSpace = true;
composite.setLayout(layout);
composite.setLayoutData(gridData);
GridData tGridData = new GridData(GridData.FILL_HORIZONTAL);
tGridData.horizontalSpan = 2;
tGridData.horizontalAlignment = SWT.FILL;
tGridData.widthHint = 280;
GridData t2GridData = new GridData(GridData.FILL_HORIZONTAL);
t2GridData.horizontalSpan = 2;
t2GridData.horizontalAlignment = SWT.FILL;
t2GridData.verticalIndent = 15;
GridData bData = new GridData();
bData.horizontalIndent = 10;
// add schema text
Label selectSchemaLabel = new Label(composite, SWT.WRAP);
selectSchemaLabel.setLayoutData(tGridData);
selectSchemaLabel.setText(Messages.getString("FilterStructureDialog.SelectSchema"));
// add schema selection table
final TableViewer schemaTable = new TableViewer(composite, SWT.CHECK | SWT.BORDER | SWT.V_SCROLL);
_schemaTable = schemaTable.getTable();
GridData tableGridData = new GridData();
tableGridData.horizontalSpan = 2;
tableGridData.horizontalAlignment = SWT.FILL;
tableGridData.heightHint = 50;
tableGridData.grabExcessHorizontalSpace = true;
schemaTable.getControl().setLayoutData(tableGridData);
schemaTable.setContentProvider(new TableContentProvider());
schemaTable.setInput(_db);
// select correct values
TableItem[] items = _schemaTable.getItems();
if (_schemaFilter != null && items != null) {
for (int i = 0; i < items.length; i++) {
for (int j = 0; j < _schemaFilter.length; j++) {
if (_schemaFilter[j].equalsIgnoreCase(items[i].getText())) {
items[i].setChecked(true);
}
}
}
}
// add schema selection buttons
Button selectAllSchemas = new Button(composite, SWT.PUSH);
selectAllSchemas.setLayoutData(bData);
selectAllSchemas.setText(Messages.getString("FilterStructureDialog.Buttons.SelectAll"));
selectAllSchemas.addMouseListener(new MouseAdapter() {
public void mouseUp(MouseEvent e) {
Table table = schemaTable.getTable();
TableItem[] items = table.getItems();
if (items == null) {
return;
}
for (int i = 0; i < items.length; i++) {
items[i].setChecked(true);
}
}
});
Button deselectAllSchemas = new Button(composite, SWT.PUSH);
deselectAllSchemas.setText(Messages.getString("FilterStructureDialog.Buttons.DeselectAll"));
deselectAllSchemas.addMouseListener(new MouseAdapter() {
public void mouseUp(MouseEvent e) {
Table table = schemaTable.getTable();
TableItem[] items = table.getItems();
if (items == null) {
return;
}
for (int i = 0; i < items.length; i++) {
items[i].setChecked(false);
}
}
});
// add folder text
Label selectFolderLabel = new Label(composite, SWT.WRAP);
selectFolderLabel.setLayoutData(t2GridData);
selectFolderLabel.setText(Messages.getString("FilterStructureDialog.SelectFolder"));
// add folder selection table
final TableViewer folderTable = new TableViewer(composite, SWT.CHECK | SWT.BORDER | SWT.V_SCROLL);
_folderTable = folderTable.getTable();
folderTable.getControl().setLayoutData(tableGridData);
folderTable.setContentProvider(new TableContentProvider());
if (_db.getChildNodes() != null && _db.getChildNodes().length != 0) {
folderTable.setInput(_db.getChildNodes()[0]);
}
// select correct values
items = _folderTable.getItems();
if (_folderFilter != null && items != null) {
for (int i = 0; i < items.length; i++) {
for (int j = 0; j < _folderFilter.length; j++) {
if (_folderFilter[j].equalsIgnoreCase(items[i].getText())) {
items[i].setChecked(true);
}
}
}
}
// add folder selection buttons
Button selectAllFolders = new Button(composite, SWT.PUSH);
selectAllFolders.setLayoutData(bData);
selectAllFolders.setText(Messages.getString("FilterStructureDialog.Buttons.SelectAll"));
selectAllFolders.addMouseListener(new MouseAdapter() {
public void mouseUp(MouseEvent e) {
Table table = folderTable.getTable();
TableItem[] items = table.getItems();
if (items == null) {
return;
}
for (int i = 0; i < items.length; i++) {
items[i].setChecked(true);
}
}
});
Button deselectAllFolders = new Button(composite, SWT.PUSH);
deselectAllFolders.setText(Messages.getString("FilterStructureDialog.Buttons.DeselectAll"));
deselectAllFolders.addMouseListener(new MouseAdapter() {
public void mouseUp(MouseEvent e) {
Table table = folderTable.getTable();
TableItem[] items = table.getItems();
if (items == null) {
return;
}
for (int i = 0; i < items.length; i++) {
items[i].setChecked(false);
}
}
});
// add filter text
_patternButton = new Button(composite, SWT.CHECK | SWT.WRAP);
_patternButton.setLayoutData(t2GridData);
_patternButton.setText(Messages.getString("FilterStructureDialog.ElementPattern"));
final Text pattern = new Text(composite, SWT.BORDER);
_filterText = pattern;
GridData textData = new GridData(GridData.FILL_HORIZONTAL);
textData.horizontalSpan = 2;
pattern.setLayoutData(textData);
pattern.setEnabled(_patternButton.getSelection());
// restore values
if (_nameFilter != null) {
_patternButton.setSelection(true);
pattern.setEnabled(true);
pattern.setText(_nameFilter);
} else {
_patternButton.setSelection(false);
}
// add filter help text
final Label filterHelpLabel = new Label(composite, SWT.WRAP);
GridData helpData = new GridData(GridData.FILL_HORIZONTAL);
helpData.horizontalSpan = 2;
filterHelpLabel.setLayoutData(helpData);
filterHelpLabel.setText(Messages.getString("FilterStructureDialog.ElementPattern.help"));
filterHelpLabel.setEnabled(_patternButton.getSelection());
// activate field and help when checkbox is selected
_patternButton.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent e) {
pattern.setEnabled(((Button) e.widget).getSelection());
filterHelpLabel.setEnabled(((Button) e.widget).getSelection());
}
});
composite.addListener(SWT.RESIZE, new Listener() {
public void handleEvent(Event event) {
composite.layout();
composite.redraw();
}
});
return composite;
} catch (Exception e) {
SQLExplorerPlugin.error("Couldn't create dialog.", e);
}
return null;
}
public String[] getFolderFilter() {
return _folderFilter;
}
protected Point getInitialSize() {
return new Point(300, 440);
}
public String getNameFilter() {
return _nameFilter;
}
public String[] getSchemaFilter() {
return _schemaFilter;
}
public void setFolderFilter(String[] folderFilter) {
_folderFilter = folderFilter;
}
public void setNameFilter(String nameFilter) {
_nameFilter = nameFilter;
}
public void setSchemaFilter(String[] schemaFilter) {
_schemaFilter = schemaFilter;
}
protected void setShellStyle(int newShellStyle) {
super.setShellStyle(newShellStyle | SWT.RESIZE);
}
}