org.eclipse.datatools.connectivity.sample.wizards.SampleConnectionWizard.java Source code

Java tutorial

Introduction

Here is the source code for org.eclipse.datatools.connectivity.sample.wizards.SampleConnectionWizard.java

Source

/*******************************************************************************
 * Copyright (c) 2007 IBM Corporation and others.
 * All rights reserved. This program and the accompanying materials
 * are made available under the terms of the Eclipse Public License v1.0
 * which accompanies this distribution, and is available at
 * http://www.eclipse.org/legal/epl-v10.html
 * 
 * Contributors:
 *     IBM Corporation - initial API and implementation
 *******************************************************************************/
package org.eclipse.datatools.connectivity.sample.wizards;

import java.sql.Connection;

import org.eclipse.core.runtime.IStatus;
import org.eclipse.datatools.connectivity.IConnectionProfile;
import org.eclipse.datatools.connectivity.IManagedConnection;
import org.eclipse.datatools.connectivity.internal.ConnectionProfileProvider;
import org.eclipse.jface.dialogs.Dialog;
import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.jface.preference.PreferenceDialog;
import org.eclipse.jface.viewers.ISelection;
import org.eclipse.jface.viewers.ISelectionChangedListener;
import org.eclipse.jface.viewers.ISelectionProvider;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.viewers.StructuredSelection;
import org.eclipse.jface.window.SameShellProvider;
import org.eclipse.jface.wizard.Wizard;
import org.eclipse.ui.dialogs.PropertyDialogAction;
import org.eclipse.ui.preferences.IWorkbenchPreferenceContainer;

public class SampleConnectionWizard extends Wizard {

    private SelectExistingConnectionWizardPage myExistingConnectionPage;

    private static final String EXISTING_CONNECTION_PAGE_NAME = "org.eclipse.datatools.connectivity.sample.SelectExistingConnectionWizardPage";

    private static final String WIZARD_TITLE = "Connectivity Sample Wizard";

    public SampleConnectionWizard() {
        super();
        setWindowTitle(WIZARD_TITLE);
    }

    public boolean performFinish() {
        IConnectionProfile connectionProfile = myExistingConnectionPage.getSelectedConnection();
        if (connectionProfile != null) {
            Connection connection = getActiveConnection(connectionProfile);
            try {
                if (connection != null && !connection.isClosed()) {
                    new DisplayMessage(WIZARD_TITLE, connectionProfile.getName() + " : Keywords : "
                            + connection.getMetaData().getSQLKeywords()).run();
                } else {
                    return false;
                }
            } catch (Exception e) {
                e.printStackTrace();
                return false;
            }
        }
        return true;
    }

    private Connection getActiveConnection(IConnectionProfile connectionProfile) {
        Connection activeConnection = null;
        IManagedConnection connection = null;
        IStatus connectionStatus = null;

        if (connectionProfile.getConnectionState() == IConnectionProfile.CONNECTED_STATE) {
            activeConnection = (Connection) connectionProfile.getManagedConnection("java.sql.Connection")
                    .getConnection().getRawConnection();
        } else {
            connectionStatus = connectionProfile.connectWithoutJob();
            if (connectionProfile.getConnectionState() == IConnectionProfile.CONNECTED_STATE) {
                return (Connection) connectionProfile.getManagedConnection("java.sql.Connection").getConnection()
                        .getRawConnection();
            }
            while (connectionProfile.getConnectionState() != IConnectionProfile.CONNECTED_STATE) {
                // display error message
                new DisplayMessage(WIZARD_TITLE,
                        connectionStatus.getChildren()[0].getException().getLocalizedMessage()).run();

                // Prompt to fix properties
                PropertyDialogAction propertyDialogAction = new PropertyDialogAction(
                        new SameShellProvider(this.getShell()),
                        new SampleWizardSelectionProvider(connectionProfile));

                StructuredSelection selection = new StructuredSelection(connectionProfile);
                propertyDialogAction.selectionChanged(selection);
                if (propertyDialogAction.isApplicableForSelection()) {
                    PreferenceDialog dialog = propertyDialogAction.createDialog();
                    String initialPage = ((ConnectionProfileProvider) connectionProfile.getProvider())
                            .getPropertiesPersistenceHook().getConnectionPropertiesPageID();
                    if (initialPage != null) {
                        ((IWorkbenchPreferenceContainer) dialog).openPage(initialPage, null);
                    }
                    if (dialog.open() == Dialog.CANCEL) {
                        return activeConnection;
                    }
                }
                connectionStatus = connectionProfile.connectWithoutJob();
                connection = connectionProfile.getManagedConnection("java.sql.Connection");
            }
            activeConnection = (Connection) connection.getConnection().getRawConnection();
        }

        return activeConnection;
    }

    private class SampleWizardSelectionProvider implements ISelectionProvider {

        private IStructuredSelection selection;

        public SampleWizardSelectionProvider(IConnectionProfile connectionProfile) {
            selection = new StructuredSelection(connectionProfile);
        }

        public void addSelectionChangedListener(ISelectionChangedListener listener) {
        }

        public ISelection getSelection() {
            return selection;
        }

        public void removeSelectionChangedListener(ISelectionChangedListener listener) {
        }

        public void setSelection(ISelection selection) {
        }
    }

    public void addPages() {
        super.addPages();

        myExistingConnectionPage = new SelectExistingConnectionWizardPage(EXISTING_CONNECTION_PAGE_NAME);
        addPage(myExistingConnectionPage);
    }

    public boolean canFinish() {
        boolean canFinish = false;
        if (myExistingConnectionPage.getSelectedConnection() != null) {
            canFinish = true;
        }
        return canFinish;
    }

    public class DisplayMessage implements Runnable {
        String title, message;

        public DisplayMessage(String title, String message) {
            this.title = title;
            this.message = message;
        }

        public void run() {
            MessageDialog.openInformation(getShell(), title, message);
        }
    }
}