/* * 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.jface.viewers.IStructuredSelection; import org.eclipse.jface.wizard.IWizardPage; import org.eclipse.ui.IWorkbench; import org.jkiss.code.Nullable; import org.jkiss.dbeaver.core.CoreMessages; import org.jkiss.dbeaver.core.DBeaverCore; import org.jkiss.dbeaver.model.app.DBPDataSourceRegistry; import org.jkiss.dbeaver.model.navigator.DBNLocalFolder; import org.jkiss.dbeaver.registry.DataSourceDescriptor; import org.jkiss.dbeaver.registry.DataSourceProviderDescriptor; import org.jkiss.dbeaver.registry.DataSourceProviderRegistry; import org.jkiss.dbeaver.registry.DataSourceViewDescriptor; import org.jkiss.dbeaver.registry.driver.DriverDescriptor; import org.jkiss.dbeaver.ui.IActionConstants; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; /** * This is a sample new wizard. */ public class NewConnectionWizard extends ConnectionWizard { private IStructuredSelection selection; private List<DataSourceProviderDescriptor> availableProvides = new ArrayList<>(); private ConnectionPageDriver pageDrivers; private Map<DataSourceProviderDescriptor, ConnectionPageSettings> settingsPages = new HashMap<>(); private ConnectionPageGeneral pageGeneral; private ConnectionPageNetwork pageNetwork; public NewConnectionWizard() { setWindowTitle(CoreMessages.dialog_new_connection_wizard_title); } @Override public DBPDataSourceRegistry getDataSourceRegistry() { return DBeaverCore.getInstance().getProjectRegistry().getDataSourceRegistry( pageDrivers.getConnectionProject()); } List<DataSourceProviderDescriptor> getAvailableProvides() { return availableProvides; } ConnectionPageDriver getPageDrivers() { return pageDrivers; } ConnectionPageSettings getPageSettings(DriverDescriptor driver) { return this.settingsPages.get(driver.getProviderDescriptor()); } @Override public DriverDescriptor getSelectedDriver() { return getPageDrivers().getSelectedDriver(); } @Override public ConnectionPageSettings getPageSettings() { if (pageDrivers.getSelectedDriver() == null) { return null; } return this.settingsPages.get(pageDrivers.getSelectedDriver().getProviderDescriptor()); } /** * Adding the page to the wizard. */ @Override public void addPages() { pageDrivers = new ConnectionPageDriver(this); addPage(pageDrivers); List<DataSourceProviderDescriptor> providers = DataSourceProviderRegistry.getInstance().getDataSourceProviders(); for (DataSourceProviderDescriptor provider : providers) { DataSourceViewDescriptor view = provider.getView(IActionConstants.NEW_CONNECTION_POINT); availableProvides.add(provider); if (view != null) { ConnectionPageSettings pageSettings = new ConnectionPageSettings( NewConnectionWizard.this, view); settingsPages.put(provider, pageSettings); addPage(pageSettings); } } pageGeneral = new ConnectionPageGeneral(this); pageNetwork = new ConnectionPageNetwork(this); addPage(pageGeneral); addPage(pageNetwork); // Initial settings if (selection != null && !selection.isEmpty()) { final Object element = selection.getFirstElement(); if (element instanceof DBNLocalFolder) { pageGeneral.setDataSourceFolder(((DBNLocalFolder) element).getFolder()); } } } @Nullable @Override public IWizardPage getNextPage(IWizardPage page) { if (page == pageDrivers) { ConnectionPageSettings pageSettings = getPageSettings(pageDrivers.getSelectedDriver()); if (pageSettings == null) { return pageDrivers.getSelectedDriver().isEmbedded() ? pageGeneral : pageNetwork; } else { return pageSettings; } } else if (page instanceof ConnectionPageSettings) { return pageDrivers.getSelectedDriver().isEmbedded() ? pageGeneral : pageNetwork; } else if (page instanceof ConnectionPageNetwork) { return pageGeneral; } else { return null; } } /** * This method is called when 'Finish' button is pressed in * the wizard. We will create an operation and run it * using wizard as execution context. */ @Override public boolean performFinish() { DriverDescriptor driver = getSelectedDriver(); ConnectionPageSettings pageSettings = getPageSettings(); DataSourceDescriptor dataSourceTpl = pageSettings == null ? getActiveDataSource() : pageSettings.getActiveDataSource(); DBPDataSourceRegistry dataSourceRegistry = getDataSourceRegistry(); DataSourceDescriptor dataSourceNew = new DataSourceDescriptor( dataSourceRegistry, dataSourceTpl.getId(), driver, dataSourceTpl.getConnectionConfiguration()); dataSourceNew.copyFrom(dataSourceTpl); saveSettings(dataSourceNew); dataSourceRegistry.addDataSource(dataSourceNew); return true; } @Override public void init(IWorkbench workbench, IStructuredSelection selection) { this.selection = selection; } @Override protected void saveSettings(DataSourceDescriptor dataSource) { ConnectionPageSettings pageSettings = getPageSettings(dataSource.getDriver()); if (pageSettings != null) { pageSettings.saveSettings(dataSource); } pageGeneral.saveSettings(dataSource); pageNetwork.saveConfigurations(dataSource); } @Override public boolean isNew() { return true; } }