net.sourceforge.sqlexplorer.dialogs.CreateAliasDlg.java Source code

Java tutorial

Introduction

Here is the source code for net.sourceforge.sqlexplorer.dialogs.CreateAliasDlg.java

Source

/*
 * Copyright (C) 2007 SQL Explorer Development Team
 * http://sourceforge.net/projects/eclipsesql
 *
 * 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
 */
package net.sourceforge.sqlexplorer.dialogs;

import java.util.HashMap;
import java.util.TreeSet;
import java.util.Map.Entry;

import net.sourceforge.sqlexplorer.ExplorerException;
import net.sourceforge.sqlexplorer.IConstants;
import net.sourceforge.sqlexplorer.Messages;
import net.sourceforge.sqlexplorer.dbproduct.Alias;
import net.sourceforge.sqlexplorer.dbproduct.DriverManager;
import net.sourceforge.sqlexplorer.dbproduct.ManagedDriver;
import net.sourceforge.sqlexplorer.dbproduct.User;
import net.sourceforge.sqlexplorer.plugin.SQLExplorerPlugin;
import net.sourceforge.sqlexplorer.preferences.DriverPreferencePage;
import net.sourceforge.sqlexplorer.util.ImageUtil;

import org.eclipse.jface.dialogs.IDialogConstants;
import org.eclipse.jface.dialogs.TitleAreaDialog;
import org.eclipse.jface.preference.PreferenceDialog;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.DisposeEvent;
import org.eclipse.swt.events.DisposeListener;
import org.eclipse.swt.events.KeyListener;
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.Combo;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Text;
import org.eclipse.ui.dialogs.PreferencesUtil;

/**
 * Modified by Davy Vanherbergen to include metadata filter expression.
 * 
 */
public class CreateAliasDlg extends TitleAreaDialog {

    private static final int SIZING_TEXT_FIELD_WIDTH = 250;

    public enum Type {
        CREATE, CHANGE, COPY
    }

    private Type type;
    private Alias alias;
    private HashMap<Integer, ManagedDriver> comboDriverIndexes = new HashMap<Integer, ManagedDriver>();

    private Text nameField;
    private Combo cboDriver;
    private Text urlField;
    private Button noUsernameRequired;
    private Text userField;
    private Text passwordField;
    private Button autoLogonButton;
    private Button logonAtStartupButton;
    private Button autoCommitButton;
    private Button commitOnCloseButton;

    public CreateAliasDlg(Shell parentShell, Type type, Alias alias) {
        super(parentShell);
        this.alias = alias;
        this.type = type;
    }

    protected void configureShell(Shell shell) {

        super.configureShell(shell);
        if (type == Type.CREATE) {
            shell.setText(Messages.getString("AliasDialog.Create.Title")); //$NON-NLS-1$
        } else if (type == Type.CHANGE) {
            shell.setText(Messages.getString("AliasDialog.Change.Title")); //$NON-NLS-1$
        } else if (type == Type.COPY) {
            shell.setText(Messages.getString("AliasDialog.Copy.Title")); //$NON-NLS-1$
        }
    }

    protected void createButtonsForButtonBar(Composite parent) {

        super.createButtonsForButtonBar(parent);
        validate();
    }

    protected Control createContents(Composite parent) {

        Control contents = super.createContents(parent);

        if (type == Type.CREATE) {
            setTitle(Messages.getString("AliasDialog.Create.Title")); //$NON-NLS-1$
        } else if (type == Type.CHANGE) {
            setTitle(Messages.getString("AliasDialog.Change.Title")); //$NON-NLS-1$
            setMessage("Modify the alias"); //$NON-NLS-1$         
        } else if (type == Type.COPY) {
            setTitle(Messages.getString("AliasDialog.Copy.Title")); //$NON-NLS-1$
            setMessage("Copy the alias"); //$NON-NLS-1$                  
        }

        Image image = ImageUtil.getImage("Images.WizardLogo");
        if (image != null) {
            setTitleImage(image);
        }
        contents.addDisposeListener(new DisposeListener() {

            public void widgetDisposed(DisposeEvent e) {

                ImageUtil.disposeImage("Images.WizardLogo");
            }
        });
        return contents;
    }

    protected Control createDialogArea(Composite parent) {

        // top level composite
        Composite parentComposite = (Composite) super.createDialogArea(parent);

        // create a composite with standard margins and spacing
        Composite composite = new Composite(parentComposite, SWT.NONE);
        GridLayout layout = new GridLayout();
        layout.marginHeight = convertVerticalDLUsToPixels(IDialogConstants.VERTICAL_MARGIN);
        layout.marginWidth = convertHorizontalDLUsToPixels(IDialogConstants.HORIZONTAL_MARGIN);
        layout.verticalSpacing = convertVerticalDLUsToPixels(IDialogConstants.VERTICAL_SPACING);
        layout.horizontalSpacing = convertHorizontalDLUsToPixels(IDialogConstants.HORIZONTAL_SPACING);
        composite.setLayout(layout);
        final GridData gd_composite = new GridData(SWT.FILL, SWT.FILL, true, true);
        gd_composite.heightHint = 238;
        composite.setLayoutData(gd_composite);
        composite.setFont(parentComposite.getFont());

        Composite nameGroup = new Composite(composite, SWT.NONE);
        layout = new GridLayout();
        layout.numColumns = 3;
        layout.marginWidth = 10;
        nameGroup.setLayout(layout);
        GridData data = new GridData(SWT.FILL, SWT.CENTER, true, false);
        data.heightHint = 211;
        nameGroup.setLayoutData(data);

        Label label = new Label(nameGroup, SWT.WRAP);
        label.setText("Name"); //$NON-NLS-1$
        nameField = new Text(nameGroup, SWT.BORDER);
        if (type != Type.CREATE)
            nameField.setText(alias.getName());
        data = new GridData(GridData.HORIZONTAL_ALIGN_FILL | GridData.GRAB_HORIZONTAL);
        data.horizontalSpan = 2;
        data.widthHint = SIZING_TEXT_FIELD_WIDTH;
        nameField.setLayoutData(data);
        nameField.addKeyListener(new KeyListener() {

            public void keyPressed(org.eclipse.swt.events.KeyEvent e) {

                CreateAliasDlg.this.validate();
            };

            public void keyReleased(org.eclipse.swt.events.KeyEvent e) {

                CreateAliasDlg.this.validate();
            };
        });

        Label label2 = new Label(nameGroup, SWT.WRAP);
        label2.setText("Driver"); //$NON-NLS-1$
        cboDriver = new Combo(nameGroup, SWT.BORDER | SWT.DROP_DOWN | SWT.READ_ONLY);
        final GridData gd_driver = new GridData(GridData.HORIZONTAL_ALIGN_FILL | GridData.GRAB_HORIZONTAL);
        gd_driver.widthHint = SIZING_TEXT_FIELD_WIDTH;
        cboDriver.setLayoutData(gd_driver);

        String defaultDriverName = SQLExplorerPlugin.getDefault().getPluginPreferences()
                .getString(IConstants.DEFAULT_DRIVER);
        ManagedDriver defaultDriver = null;
        int defaultDriverIndex = 0;
        populateCombo();
        for (Entry<Integer, ManagedDriver> entry : comboDriverIndexes.entrySet()) {
            ManagedDriver driver = entry.getValue();
            if (driver.getName().startsWith(defaultDriverName)) {
                defaultDriver = driver;
                defaultDriverIndex = entry.getKey();
                break;
            }
        }

        Button btnListDrivers = new Button(nameGroup, SWT.NULL);
        btnListDrivers.setText(Messages.getString("AliasDialog.EditDrivers")); //$NON-NLS-1$
        final GridData gd_btnListDrivers = new GridData(GridData.HORIZONTAL_ALIGN_FILL | GridData.GRAB_HORIZONTAL);
        btnListDrivers.setLayoutData(gd_btnListDrivers);
        btnListDrivers.addSelectionListener(new SelectionAdapter() {

            public void widgetSelected(SelectionEvent event) {

                PreferenceDialog dlg = PreferencesUtil.createPreferenceDialogOn(getShell(), null,
                        new String[] { DriverPreferencePage.class.getName() }, null);
                if (dlg.open() == IDialogConstants.OK_ID)
                    populateCombo();
            }
        });

        Label label3 = new Label(nameGroup, SWT.WRAP);
        label3.setText("URL"); //$NON-NLS-1$
        urlField = new Text(nameGroup, SWT.BORDER);
        data = new GridData(GridData.HORIZONTAL_ALIGN_FILL | GridData.GRAB_HORIZONTAL);
        data.horizontalSpan = 2;
        data.widthHint = SIZING_TEXT_FIELD_WIDTH;
        urlField.setLayoutData(data);
        urlField.addKeyListener(new KeyListener() {

            public void keyPressed(org.eclipse.swt.events.KeyEvent e) {

                CreateAliasDlg.this.validate();
            };

            public void keyReleased(org.eclipse.swt.events.KeyEvent e) {

                CreateAliasDlg.this.validate();
            };
        });
        new Label(nameGroup, SWT.NONE);

        noUsernameRequired = new Button(nameGroup, SWT.CHECK);
        noUsernameRequired.setText("Username is not required for this database");
        new Label(nameGroup, SWT.NONE);

        Label label4 = new Label(nameGroup, SWT.WRAP);
        label4.setText("User Name"); //$NON-NLS-1$
        userField = new Text(nameGroup, SWT.BORDER);
        data = new GridData(GridData.HORIZONTAL_ALIGN_FILL | GridData.GRAB_HORIZONTAL);
        data.horizontalSpan = 2;
        data.widthHint = SIZING_TEXT_FIELD_WIDTH;
        userField.setLayoutData(data);

        userField.addKeyListener(new KeyListener() {

            public void keyPressed(org.eclipse.swt.events.KeyEvent e) {

                CreateAliasDlg.this.validate();
            };

            public void keyReleased(org.eclipse.swt.events.KeyEvent e) {

                CreateAliasDlg.this.validate();
            };
        });

        Label label5 = new Label(nameGroup, SWT.WRAP);
        label5.setText("Password"); //$NON-NLS-1$
        passwordField = new Text(nameGroup, SWT.BORDER);
        passwordField.setEchoChar('*');
        data = new GridData(GridData.HORIZONTAL_ALIGN_FILL | GridData.GRAB_HORIZONTAL);
        data.horizontalSpan = 2;
        data.widthHint = SIZING_TEXT_FIELD_WIDTH;
        passwordField.setLayoutData(data);

        cboDriver.addSelectionListener(new SelectionAdapter() {
            public void widgetSelected(org.eclipse.swt.events.SelectionEvent e) {
                int selIndex = cboDriver.getSelectionIndex();
                ManagedDriver driver = comboDriverIndexes.get(selIndex);
                urlField.setText(driver.getUrl());
                CreateAliasDlg.this.validate();
            };
        });

        if (!comboDriverIndexes.isEmpty() && defaultDriver != null) {
            cboDriver.select(defaultDriverIndex);
            urlField.setText(defaultDriver.getUrl());
        }
        new Label(nameGroup, SWT.NONE);

        final Composite connectionPropertiesComposite = new Composite(nameGroup, SWT.NONE);
        connectionPropertiesComposite.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, false, false));
        final GridLayout gridLayout = new GridLayout();
        gridLayout.numColumns = 2;
        connectionPropertiesComposite.setLayout(gridLayout);
        new Label(nameGroup, SWT.NONE);
        new Label(nameGroup, SWT.NONE);

        /* final Button */ autoLogonButton = new Button(connectionPropertiesComposite, SWT.CHECK);
        autoLogonButton.setToolTipText("If set, SQLExplorer will try to logon without prompting");
        final GridData gd_autoLogonButton = new GridData(158, SWT.DEFAULT);
        autoLogonButton.setLayoutData(gd_autoLogonButton);
        autoLogonButton.setText("Auto logon");

        /* final Button */ autoCommitButton = new Button(connectionPropertiesComposite, SWT.CHECK);
        autoCommitButton.setToolTipText("Sets the default for new SQL Editors");
        autoCommitButton.setText("Auto Commit");

        /* final Button */ logonAtStartupButton = new Button(connectionPropertiesComposite, SWT.CHECK);
        logonAtStartupButton.setToolTipText("If set, SQLExplorer will establish a connection during startup");
        logonAtStartupButton.setText("Logon during startup");

        /* final Button */ commitOnCloseButton = new Button(connectionPropertiesComposite, SWT.CHECK);
        commitOnCloseButton.setToolTipText("Sets the default for new SQL editors");
        commitOnCloseButton.setText("Commit on close");
        new Label(nameGroup, SWT.NONE);

        autoLogonButton.addSelectionListener(new SelectionAdapter() {
            public void widgetSelected(SelectionEvent event) {
                boolean checked = autoLogonButton.getSelection();
                logonAtStartupButton.setEnabled(checked);
                if (!checked)
                    logonAtStartupButton.setSelection(false);
            }
        });
        logonAtStartupButton.setEnabled(alias.isConnectAtStartup());
        logonAtStartupButton.setSelection(alias.isConnectAtStartup());
        autoLogonButton.setSelection(alias.isConnectAtStartup());

        autoCommitButton.addSelectionListener(new SelectionAdapter() {
            @Override
            public void widgetSelected(SelectionEvent e) {
                commitOnCloseButton.setEnabled(!autoCommitButton.getSelection());
            }
        });
        User user = alias.getDefaultUser();
        if (user != null) {
            autoCommitButton.setSelection(user.isAutoCommit());
            commitOnCloseButton.setEnabled(!user.isAutoCommit());
            commitOnCloseButton.setSelection(user.isCommitOnClose());
        }

        noUsernameRequired.addSelectionListener(new SelectionAdapter() {
            public void widgetSelected(final SelectionEvent e) {
                userField.setEnabled(!noUsernameRequired.getSelection());
                passwordField.setEnabled(!noUsernameRequired.getSelection());
            }
        });

        if (alias.hasNoUserName()) {
            noUsernameRequired.setSelection(true);
            userField.setEnabled(false);
            passwordField.setEnabled(false);
        } else {
            noUsernameRequired.setSelection(false);
            userField.setEnabled(true);
            passwordField.setEnabled(true);
            if (alias.getDefaultUser() != null) {
                userField.setText(alias.getDefaultUser().getUserName());
                passwordField.setText(alias.getDefaultUser().getPassword());
            }
        }

        if (type != Type.CREATE) {
            if (alias.getDriver() != null)
                cboDriver.setText(alias.getDriver().getName());
            urlField.setText(alias.getUrl());
        }
        return parentComposite;
    }

    private void populateCombo() {
        String previous = cboDriver.getText();
        if (previous != null) {
            previous = previous.trim();
            if (previous.length() == 0)
                previous = null;
        }
        if (previous != null)
            previous = previous.toLowerCase();
        DriverManager driverModel = SQLExplorerPlugin.getDefault().getDriverModel();
        cboDriver.removeAll();
        TreeSet<ManagedDriver> drivers = new TreeSet<ManagedDriver>();
        drivers.addAll(driverModel.getDrivers());
        int index = 0;
        for (ManagedDriver driver : drivers) {
            try {
                driver.registerSQLDriver();
            } catch (ClassNotFoundException e) {
                // Nothing
            }
            if (driver.isDriverClassLoaded() == true) {
                cboDriver.add(driver.getName());
                comboDriverIndexes.put(new Integer(index), driver);
                if (previous != null && driver.getName().toLowerCase().startsWith(previous))
                    cboDriver.select(index);
                index++;
            }
        }
    }

    protected void okPressed() {

        try {
            User previousUser = alias.getDefaultUser();

            alias.setName(nameField.getText().trim());
            int selIndex = cboDriver.getSelectionIndex();
            ManagedDriver driver = comboDriverIndexes.get(selIndex);
            alias.setDriver(driver);
            alias.setUrl(urlField.getText().trim());
            if (noUsernameRequired.getSelection())
                alias.setHasNoUserName(true);
            else {
                alias.setHasNoUserName(false);
                if (userField.getText().trim().length() > 0)
                    alias.setDefaultUser(new User(userField.getText().trim(), passwordField.getText().trim()));
            }
            alias.setName(this.nameField.getText().trim());
            alias.setSchemaFilterExpression("");
            alias.setNameFilterExpression("");
            alias.setFolderFilterExpression("");
            alias.setConnectAtStartup(logonAtStartupButton.getSelection());
            alias.setAutoLogon(autoLogonButton.getSelection());

            if (type != Type.CHANGE)
                SQLExplorerPlugin.getDefault().getAliasManager().addAlias(alias);

            // If we changed the default user and the previous default user is not in use,
            //   remove it (note: Alias maintains one User instance per username, merging 
            //   new additions into the existing instance which is why it is valid to compare
            //   objects even though we have explicitly created a new instance of User above)
            else if (alias.getDefaultUser() != previousUser) {
                if (!previousUser.isInUse())
                    alias.removeUser(previousUser);
            }

            User user = alias.getDefaultUser();
            if (user != null) {
                user.setAutoCommit(autoCommitButton.getSelection());
                user.setCommitOnClose(commitOnCloseButton.getSelection());
            }

        } catch (ExplorerException excp) {
            SQLExplorerPlugin.error("Validation Exception", excp);//$NON-NLS-1$
            // System.out.println(Messages.getString("Error_Validation_Exception_4"));//$NON-NLS-1$
        }

        // Notify that ther has been changes
        SQLExplorerPlugin.getDefault().getAliasManager().modelChanged();

        close();
    }

    protected void setDialogComplete(boolean value) {

        Button okBtn = getButton(IDialogConstants.OK_ID);
        if (okBtn != null)
            okBtn.setEnabled(value);
    }

    protected void setShellStyle(int newShellStyle) {

        super.setShellStyle(newShellStyle | SWT.RESIZE);// Make the dialog
        // resizable
    }

    void validate() {

        if ((urlField.getText().trim().length() > 0) && (nameField.getText().trim().length() > 0))
            setDialogComplete(true);
        else
            setDialogComplete(false);
    }

}