package com.quantum.properties;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Set;
-import java.util.Vector;
-
-import com.quantum.QuantumPlugin;
import com.quantum.model.Bookmark;
import com.quantum.model.BookmarkHolder;
-import com.quantum.model.ConnectionException;
-import com.quantum.model.Schema;
-import com.quantum.sql.SQLHelper;
-import com.quantum.ui.dialog.ExceptionDisplayDialog;
-import com.quantum.util.connection.ConnectionUtil;
-import com.quantum.view.bookmark.AddSchemaDialog;
+import com.quantum.view.SchemaSelectionControl;
-import org.eclipse.jface.dialogs.MessageDialog;
-import org.eclipse.jface.viewers.ILabelProviderListener;
-import org.eclipse.jface.viewers.ISelection;
-import org.eclipse.jface.viewers.ISelectionChangedListener;
-import org.eclipse.jface.viewers.IStructuredContentProvider;
-import org.eclipse.jface.viewers.IStructuredSelection;
-import org.eclipse.jface.viewers.ITableLabelProvider;
-import org.eclipse.jface.viewers.SelectionChangedEvent;
-import org.eclipse.jface.viewers.TableViewer;
-import org.eclipse.jface.viewers.Viewer;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.events.SelectionAdapter;
-import org.eclipse.swt.events.SelectionEvent;
-import org.eclipse.swt.graphics.Image;
-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.ui.dialogs.PropertyPage;
public class SchemaPropertyPage extends PropertyPage {
-
- class ContentProviderImpl implements IStructuredContentProvider {
- public Object[] getElements(Object inputElement) {
- List list = new ArrayList((Collection) inputElement);
- Collections.sort(list);
- return list.toArray();
- }
-
- public void dispose() {
- }
-
- public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
- }
- }
-
- class LabelProviderImpl implements ITableLabelProvider {
-
- public Image getColumnImage(Object element, int columnIndex) {
- if (columnIndex == 0) {
- return QuantumPlugin.getImage("schema.gif");
- } else {
- return null;
- }
- }
-
- public String getColumnText(Object element, int columnIndex) {
- if (columnIndex == 0) {
- return ((Schema) element).getDisplayName();
- } else {
- return null;
- }
- }
-
- public void addListener(ILabelProviderListener listener) {
- }
-
- public void dispose() {
- }
-
- public boolean isLabelProperty(Object element, String property) {
- return "displayName".equals(property);
- }
-
- public void removeListener(ILabelProviderListener listener) {
- }
- }
-
- private Set schemas = Collections.synchronizedSet(new HashSet());
- private TableViewer schemaTable;
- private Button addButton;
- private Button removeButton;
-
- private ConnectionUtil connectionUtil = new ConnectionUtil();
+
+ private SchemaSelectionControl control;
protected Control createContents(Composite parent) {
-
- Composite composite = new Composite(parent, SWT.NONE);
- GridLayout layout = new GridLayout();
- layout.numColumns = 2;
- composite.setLayout(layout);
- GridData data = new GridData();
- composite.setLayoutData(data);
-
- this.schemaTable = new TableViewer(composite,
- SWT.FULL_SELECTION | SWT.MULTI | SWT.BORDER);
-
- layout = new GridLayout();
- layout.marginWidth = 5;
- layout.marginHeight = 5;
-
- this.schemaTable.getTable().setLayout(layout);
- data = new GridData();
- data.heightHint = 200;
- data.widthHint = 200;
-// data.verticalSpan = 2;
- this.schemaTable.getTable().setLayoutData(data);
- this.schemaTable.setLabelProvider(new LabelProviderImpl());
- this.schemaTable.setContentProvider(new ContentProviderImpl());
- this.schemaTable.setInput(this.schemas);
-
- createButtonArea(composite);
-
- performDefaults();
- return composite;
- }
-
- private void createButtonArea(Composite composite) {
- GridLayout layout;
- GridData data;
- Composite buttonArea = new Composite(composite, SWT.NONE);
- layout = new GridLayout();
- layout.numColumns = 1;
- buttonArea.setLayout(layout);
- data = new GridData();
- data.verticalAlignment = GridData.VERTICAL_ALIGN_BEGINNING;
- buttonArea.setLayoutData(data);
-
- this.addButton = new Button(buttonArea, SWT.NULL);
- this.addButton.setText("Add");
- data = new GridData();
- data.horizontalAlignment = GridData.FILL_HORIZONTAL;
- data.verticalAlignment = GridData.VERTICAL_ALIGN_BEGINNING;
- data.widthHint = 60;
- this.addButton.setLayoutData(data);
- this.addButton.addSelectionListener(new SelectionAdapter() {
- public void widgetSelected(SelectionEvent event) {
- addSchema();
- }
- });
-
- this.removeButton = new Button(buttonArea, SWT.NULL);
- this.removeButton.setText("Remove");
- this.removeButton.setEnabled(false);
- data = new GridData();
- data.horizontalAlignment = GridData.FILL_HORIZONTAL;
- data.verticalAlignment = GridData.VERTICAL_ALIGN_BEGINNING;
- data.widthHint = 60;
- this.removeButton.setLayoutData(data);
- this.removeButton.addSelectionListener(new SelectionAdapter() {
- public void widgetSelected(SelectionEvent event) {
- removeSchema(SchemaPropertyPage.this.schemaTable.getSelection());
- }
- });
-
- this.schemaTable.addSelectionChangedListener(new ISelectionChangedListener() {
- public void selectionChanged(SelectionChangedEvent event) {
- SchemaPropertyPage.this.removeButton.setEnabled(
- !event.getSelection().isEmpty());
- }
- });
- }
-
- private void addSchema() {
- Bookmark bookmark = getBookmark();
- boolean isAlreadyConnected = bookmark.isConnected();
-
- if (!isAlreadyConnected) {
- boolean confirmed = MessageDialog.openConfirm(getShell(), "Connect Required",
- "We must connect to the database to retrieve schemas.");
- if (confirmed) {
- this.connectionUtil.connect(bookmark, getShell());
- }
- }
-
- try {
- if (bookmark.isConnected()) {
- Vector schemas = SQLHelper.getSchemas(bookmark.getConnection());
- AddSchemaDialog dialog = new AddSchemaDialog(getShell(), schemas);
- dialog.open();
- if (dialog.getSelectedSchemas() != null) {
- Collection temp = dialog.getSelectedSchemas();
- for (Iterator i = temp.iterator(); i.hasNext();) {
- String name = (String) i.next();
- this.schemas.add(new Schema(name));
- }
- refreshTable();
- }
-
- if (!isAlreadyConnected) {
- bookmark.disconnect();
- }
- }
- } catch (ConnectionException e) {
- ExceptionDisplayDialog.openError(getShell(), null, null, e);
- }
- }
-
- private void removeSchema(ISelection selection) {
- IStructuredSelection structuredSelection = (IStructuredSelection) selection;
- for (Iterator i = structuredSelection.iterator(); i.hasNext();) {
- Schema element = (Schema) i.next();
- this.schemas.remove(element);
- }
- refreshTable();
+ return this.control = new SchemaSelectionControl(parent, getBookmark());
}
private Bookmark getBookmark() {
* @see org.eclipse.jface.preference.PreferencePage#performApply()
*/
public boolean performOk() {
- getBookmark().setSchemas((Schema[]) this.schemas.toArray(
- new Schema[this.schemas.size()]));
+ Bookmark bookmark = getBookmark();
+ bookmark.setSchemaSelections(this.control.getSchemas());
+ bookmark.setSchemaRule(this.control.getSchemaRule());
return true;
}
- /* (non-Javadoc)
- * @see org.eclipse.jface.preference.PreferencePage#performDefaults()
- */
+
protected void performDefaults() {
super.performDefaults();
Bookmark bookmark = getBookmark();
-
- this.schemas.clear();
- Schema[] schemas = bookmark.getSchemas();
- for (int i = 0, length = (schemas == null) ? 0 : schemas.length;
- i < length;
- i++) {
- if (!schemas[i].isDefault()) {
- this.schemas.add(schemas[i]);
- }
- }
- refreshTable();
- }
-
- private void refreshTable() {
- this.schemaTable.refresh();
+ this.control.setSchemaRule(bookmark.getSchemaRule());
+ this.control.setSchemas(bookmark.getSchemaSelections());
}
}
\ No newline at end of file