/* * DBeaver - Universal Database Manager * Copyright (C) 2010-2017 Serge Rider (serge@jkiss.org) * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.jkiss.dbeaver.ui.dialogs.connection; import org.eclipse.core.resources.IProject; import org.eclipse.jface.viewers.*; import org.eclipse.swt.SWT; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.widgets.Combo; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Group; import org.jkiss.dbeaver.core.CoreMessages; import org.jkiss.dbeaver.core.DBeaverCore; import org.jkiss.dbeaver.model.connection.DBPDriver; import org.jkiss.dbeaver.registry.DataSourceProviderDescriptor; import org.jkiss.dbeaver.registry.driver.DriverDescriptor; import org.jkiss.dbeaver.ui.IHelpContextIds; import org.jkiss.dbeaver.ui.UIUtils; import org.jkiss.dbeaver.ui.dialogs.ActiveWizardPage; import org.jkiss.dbeaver.ui.dialogs.driver.DriverTreeControl; import org.jkiss.dbeaver.ui.dialogs.driver.DriverTreeViewer; import java.util.List; /** * Driver selection page */ class ConnectionPageDriver extends ActiveWizardPage implements ISelectionChangedListener, IDoubleClickListener { private NewConnectionWizard wizard; private DriverDescriptor selectedDriver; private IProject connectionProject; ConnectionPageDriver(NewConnectionWizard wizard) { super("newConnectionDrivers"); this.wizard = wizard; setTitle(CoreMessages.dialog_new_connection_wizard_start_title); setDescription(CoreMessages.dialog_new_connection_wizard_start_description); } @Override public void createControl(Composite parent) { Composite placeholder = UIUtils.createPlaceholder(parent, 1); DriverTreeControl driverTreeControl = new DriverTreeControl(placeholder, this, wizard.getAvailableProvides(), true); GridData gd = new GridData(GridData.FILL_BOTH); gd.heightHint = 200; driverTreeControl.setLayoutData(gd); setControl(placeholder); Group projectGroup = UIUtils.createControlGroup(placeholder, "Project", 1, GridData.FILL_HORIZONTAL, SWT.DEFAULT); final Combo projectCombo = new Combo(projectGroup, SWT.DROP_DOWN | SWT.READ_ONLY); projectCombo.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); final List<IProject> projects = DBeaverCore.getInstance().getLiveProjects(); if (!projects.isEmpty()) { final IProject activeProject = DBeaverCore.getInstance().getProjectRegistry().getActiveProject(); for (IProject project : projects) { projectCombo.add(project.getName()); } if (activeProject == null) { projectCombo.select(0); connectionProject = projects.get(0); } else { connectionProject = activeProject; projectCombo.setText(activeProject.getName()); } projectCombo.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { connectionProject = projects.get(projectCombo.getSelectionIndex()); } }); if (projects.size() < 2) { projectCombo.setEnabled(false); } } else { setErrorMessage("You need to create a project first"); } UIUtils.setHelp(placeholder, IHelpContextIds.CTX_CON_WIZARD_DRIVER); } public DriverDescriptor getSelectedDriver() { return selectedDriver; } public IProject getConnectionProject() { return connectionProject; } @Override public boolean canFlipToNextPage() { return this.connectionProject != null && this.selectedDriver != null; } @Override public boolean isPageComplete() { return canFlipToNextPage(); } @Override public void selectionChanged(SelectionChangedEvent event) { this.selectedDriver = null; this.setMessage(""); ISelection selection = event.getSelection(); if (selection instanceof IStructuredSelection) { Object selectedObject = ((IStructuredSelection) selection).getFirstElement(); if (selectedObject instanceof DBPDriver) { selectedDriver = (DriverDescriptor) selectedObject; this.setMessage(selectedDriver.getDescription()); } else if (selectedObject instanceof DataSourceProviderDescriptor) { this.setMessage(((DataSourceProviderDescriptor) selectedObject).getDescription()); } else if (selectedObject instanceof DriverTreeViewer.DriverCategory) { this.setMessage(((DriverTreeViewer.DriverCategory) selectedObject).getName() + " drivers"); } } getWizard().getContainer().updateButtons(); getWizard().getContainer().updateMessage(); } @Override public void doubleClick(DoubleClickEvent event) { if (selectedDriver != null) { wizard.getContainer().showPage(wizard.getNextPage(this)); } } @Override public void activatePage() { } @Override public void deactivatePage() { } }