提交 8deb5502 编写于 作者: J jurgen

Hierarchical ds providers

上级 db55aa53
......@@ -73,6 +73,9 @@ public class DataSourceProviderDescriptor extends AbstractDescriptor
String parentId = config.getAttribute(RegistryConstants.ATTR_PARENT);
if (!CommonUtils.isEmpty(parentId)) {
this.parentProvider = registry.getDataSourceProvider(parentId);
if (this.parentProvider == null) {
log.warn("Provider '" + parentId + "' not found");
}
} else {
this.parentProvider = null;
}
......
......@@ -30,6 +30,7 @@ import org.eclipse.swt.graphics.Font;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.*;
import org.jkiss.code.NotNull;
import org.jkiss.dbeaver.DBException;
import org.jkiss.dbeaver.core.CoreMessages;
import org.jkiss.dbeaver.core.Log;
......@@ -132,9 +133,10 @@ class ConnectionPageGeneral extends ActiveWizardPage<ConnectionWizard> {
{
if (connectionNameText != null) {
ConnectionPageSettings settings = wizard.getPageSettings();
if (settings != null && connectionNameText != null && (CommonUtils.isEmpty(connectionNameText.getText()) || !connectionNameChanged)) {
String newName;
if (settings != null && (CommonUtils.isEmpty(connectionNameText.getText()) || !connectionNameChanged)) {
DBPConnectionConfiguration connectionInfo = settings.getActiveDataSource().getConnectionConfiguration();
String newName = dataSourceDescriptor == null ? "" : dataSourceDescriptor.getName(); //$NON-NLS-1$
newName = dataSourceDescriptor == null ? "" : dataSourceDescriptor.getName(); //$NON-NLS-1$
if (CommonUtils.isEmpty(newName)) {
newName = connectionInfo.getDatabaseName();
if (CommonUtils.isEmpty(newName)) {
......@@ -157,9 +159,11 @@ class ConnectionPageGeneral extends ActiveWizardPage<ConnectionWizard> {
}
newName = CommonUtils.truncateString(newName, 50);
}
connectionNameText.setText(newName);
connectionNameChanged = false;
} else {
newName = wizard.getSelectedDriver().getName();
}
connectionNameText.setText(newName);
connectionNameChanged = false;
}
if (dataSourceDescriptor != null) {
if (!activated) {
......@@ -196,7 +200,7 @@ class ConnectionPageGeneral extends ActiveWizardPage<ConnectionWizard> {
} else {
if (eventsButton != null) {
eventsButton.setFont(getFont());
DataSourceDescriptor dataSource = getWizard().getPageSettings().getActiveDataSource();
DataSourceDescriptor dataSource = getActiveDataSource();
for (DBPConnectionEventType eventType : dataSource.getConnectionConfiguration().getDeclaredEvents()) {
if (dataSource.getConnectionConfiguration().getEvent(eventType).isEnabled()) {
eventsButton.setFont(boldFont);
......@@ -218,7 +222,7 @@ class ConnectionPageGeneral extends ActiveWizardPage<ConnectionWizard> {
}
long features = 0;
try {
features = wizard.getPageSettings().getDriver().getDataSourceProvider().getFeatures();
features = wizard.getSelectedDriver().getDataSourceProvider().getFeatures();
} catch (DBException e) {
log.error("Can't obtain data source provider instance", e); //$NON-NLS-1$
}
......@@ -235,6 +239,12 @@ class ConnectionPageGeneral extends ActiveWizardPage<ConnectionWizard> {
filtersGroup.layout();
}
@NotNull
private DataSourceDescriptor getActiveDataSource() {
ConnectionPageSettings pageSettings = getWizard().getPageSettings();
return pageSettings == null ? wizard.getActiveDataSource() : pageSettings.getActiveDataSource();
}
private void enableFilter(FilterInfo filterInfo, boolean enable)
{
filterInfo.link.setEnabled(enable);
......@@ -248,7 +258,7 @@ class ConnectionPageGeneral extends ActiveWizardPage<ConnectionWizard> {
}
} else {
filterInfo.link.setText(NLS.bind(CoreMessages.dialog_connection_wizard_final_filter_link_not_supported_text, filterInfo.title));
filterInfo.link.setToolTipText(NLS.bind(CoreMessages.dialog_connection_wizard_final_filter_link_not_supported_tooltip, filterInfo.title, wizard.getPageSettings().getDriver().getName()));
filterInfo.link.setToolTipText(NLS.bind(CoreMessages.dialog_connection_wizard_final_filter_link_not_supported_tooltip, filterInfo.title, wizard.getSelectedDriver().getName()));
}
}
......@@ -298,7 +308,7 @@ class ConnectionPageGeneral extends ActiveWizardPage<ConnectionWizard> {
@Override
public void widgetSelected(SelectionEvent e)
{
DataSourceDescriptor dataSource = wizard.getPageSettings().getActiveDataSource();
DataSourceDescriptor dataSource = getActiveDataSource();
UIUtils.showPreferencesFor(
getControl().getShell(),
dataSource.getConnectionConfiguration().getConnectionType(),
......@@ -526,7 +536,7 @@ class ConnectionPageGeneral extends ActiveWizardPage<ConnectionWizard> {
private void configureEvents()
{
DataSourceDescriptor dataSource = getWizard().getPageSettings().getActiveDataSource();
DataSourceDescriptor dataSource = getActiveDataSource();
EditShellCommandsDialog dialog = new EditShellCommandsDialog(
getShell(),
dataSource);
......
......@@ -17,7 +17,6 @@
*/
package org.jkiss.dbeaver.ui.dialogs.connection;
import org.jkiss.dbeaver.core.Log;
import org.eclipse.jface.dialogs.IDialogConstants;
import org.eclipse.jface.dialogs.IDialogPage;
import org.eclipse.osgi.util.NLS;
......@@ -31,18 +30,14 @@ import org.eclipse.swt.widgets.TabItem;
import org.jkiss.code.NotNull;
import org.jkiss.code.Nullable;
import org.jkiss.dbeaver.core.CoreMessages;
import org.jkiss.dbeaver.core.Log;
import org.jkiss.dbeaver.model.runtime.DBRRunnableContext;
import org.jkiss.dbeaver.runtime.RunnableContextDelegate;
import org.jkiss.dbeaver.ui.ICompositeDialogPage;
import org.jkiss.dbeaver.ui.IDataSourceConnectionEditor;
import org.jkiss.dbeaver.ui.IDataSourceConnectionEditorSite;
import org.jkiss.dbeaver.model.DBPConnectionConfiguration;
import org.jkiss.dbeaver.registry.DataSourceDescriptor;
import org.jkiss.dbeaver.registry.DataSourceRegistry;
import org.jkiss.dbeaver.registry.DataSourceViewDescriptor;
import org.jkiss.dbeaver.registry.DriverDescriptor;
import org.jkiss.dbeaver.ui.IHelpContextIds;
import org.jkiss.dbeaver.ui.UIUtils;
import org.jkiss.dbeaver.runtime.RunnableContextDelegate;
import org.jkiss.dbeaver.ui.*;
import org.jkiss.dbeaver.ui.dialogs.ActiveWizardPage;
import org.jkiss.dbeaver.ui.dialogs.driver.DriverEditDialog;
import org.jkiss.utils.ArrayUtils;
......@@ -65,7 +60,6 @@ class ConnectionPageSettings extends ActiveWizardPage<ConnectionWizard> implemen
private IDataSourceConnectionEditor connectionEditor;
@Nullable
private DataSourceDescriptor dataSource;
private final Map<DriverDescriptor, DataSourceDescriptor> infoMap = new HashMap<DriverDescriptor, DataSourceDescriptor>();
private final Set<DataSourceDescriptor> activated = new HashSet<DataSourceDescriptor>();
private IDialogPage[] subPages;
......@@ -228,19 +222,7 @@ class ConnectionPageSettings extends ActiveWizardPage<ConnectionWizard> implemen
if (dataSource != null) {
return dataSource;
}
DriverDescriptor driver = getDriver();
DataSourceDescriptor info = infoMap.get(driver);
if (info == null) {
DBPConnectionConfiguration connectionInfo = new DBPConnectionConfiguration();
info = new DataSourceDescriptor(
wizard.getDataSourceRegistry(),
DataSourceDescriptor.generateNewId(wizard.getSelectedDriver()),
wizard.getSelectedDriver(),
connectionInfo);
info.getConnectionConfiguration().setClientHomeId(driver.getDefaultClientHomeId());
infoMap.put(driver, info);
}
return info;
return wizard.getActiveDataSource();
}
@Override
......@@ -263,10 +245,6 @@ class ConnectionPageSettings extends ActiveWizardPage<ConnectionWizard> implemen
connectionEditor.dispose();
connectionEditor = null;
}
// Dispose all temp data sources
for (DataSourceDescriptor dataSource : infoMap.values()) {
dataSource.dispose();
}
super.dispose();
}
......
......@@ -17,6 +17,7 @@
*/
package org.jkiss.dbeaver.ui.dialogs.connection;
import org.jkiss.code.NotNull;
import org.jkiss.dbeaver.core.Log;
import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.jface.wizard.Wizard;
......@@ -25,6 +26,7 @@ import org.eclipse.ui.INewWizard;
import org.jkiss.dbeaver.DBException;
import org.jkiss.dbeaver.core.CoreMessages;
import org.jkiss.dbeaver.model.DBConstants;
import org.jkiss.dbeaver.model.DBPConnectionConfiguration;
import org.jkiss.dbeaver.model.DBPDataSource;
import org.jkiss.dbeaver.model.DBPDataSourceInfo;
import org.jkiss.dbeaver.model.exec.DBCExecutionPurpose;
......@@ -41,6 +43,8 @@ import org.jkiss.utils.CommonUtils;
import java.lang.reflect.InvocationTargetException;
import java.sql.Connection;
import java.sql.DatabaseMetaData;
import java.util.HashMap;
import java.util.Map;
/**
* Abstract connection wizard
......@@ -51,6 +55,7 @@ public abstract class ConnectionWizard extends Wizard implements INewWizard {
// protected final IProject project;
protected final DataSourceRegistry dataSourceRegistry;
private final Map<DriverDescriptor, DataSourceDescriptor> infoMap = new HashMap<DriverDescriptor, DataSourceDescriptor>();
protected ConnectionWizard(DataSourceRegistry dataSourceRegistry)
{
......@@ -58,6 +63,15 @@ public abstract class ConnectionWizard extends Wizard implements INewWizard {
this.dataSourceRegistry = dataSourceRegistry;
}
@Override
public void dispose() {
// Dispose all temp data sources
for (DataSourceDescriptor dataSource : infoMap.values()) {
dataSource.dispose();
}
super.dispose();
}
public DataSourceRegistry getDataSourceRegistry() {
return dataSourceRegistry;
}
......@@ -68,6 +82,24 @@ public abstract class ConnectionWizard extends Wizard implements INewWizard {
protected abstract void saveSettings(DataSourceDescriptor dataSource);
@NotNull
public DataSourceDescriptor getActiveDataSource()
{
DriverDescriptor driver = getSelectedDriver();
DataSourceDescriptor info = infoMap.get(driver);
if (info == null) {
DBPConnectionConfiguration connectionInfo = new DBPConnectionConfiguration();
info = new DataSourceDescriptor(
getDataSourceRegistry(),
DataSourceDescriptor.generateNewId(getSelectedDriver()),
getSelectedDriver(),
connectionInfo);
info.getConnectionConfiguration().setClientHomeId(driver.getDefaultClientHomeId());
infoMap.put(driver, info);
}
return info;
}
public void testConnection()
{
DataSourceDescriptor dataSource = getPageSettings().getActiveDataSource();
......
......@@ -113,15 +113,14 @@ public class NewConnectionWizard extends ConnectionWizard
for (DataSourceProviderDescriptor provider : providers) {
monitor.subTask(provider.getName());
DataSourceViewDescriptor view = provider.getView(IActionConstants.NEW_CONNECTION_POINT);
if (view == null) {
continue;
}
availableProvides.add(provider);
ConnectionPageSettings pageSettings = new ConnectionPageSettings(
NewConnectionWizard.this,
view);
settingsPages.put(provider, pageSettings);
addPage(pageSettings);
if (view != null) {
ConnectionPageSettings pageSettings = new ConnectionPageSettings(
NewConnectionWizard.this,
view);
settingsPages.put(provider, pageSettings);
addPage(pageSettings);
}
monitor.worked(1);
}
monitor.done();
......@@ -143,13 +142,14 @@ public class NewConnectionWizard extends ConnectionWizard
public IWizardPage getNextPage(IWizardPage page)
{
if (page == pageDrivers) {
return getPageSettings(pageDrivers.getSelectedDriver());
} else if (page instanceof ConnectionPageSettings) {
if (pageDrivers.getSelectedDriver().isEmbedded()) {
return pageGeneral;
ConnectionPageSettings pageSettings = getPageSettings(pageDrivers.getSelectedDriver());
if (pageSettings == null) {
return pageDrivers.getSelectedDriver().isEmbedded() ? pageGeneral : pageNetwork;
} else {
return pageNetwork;
return pageSettings;
}
} else if (page instanceof ConnectionPageSettings) {
return pageDrivers.getSelectedDriver().isEmbedded() ? pageGeneral : pageNetwork;
} else if (page instanceof ConnectionPageNetwork) {
return pageGeneral;
} else {
......@@ -166,7 +166,8 @@ public class NewConnectionWizard extends ConnectionWizard
public boolean performFinish()
{
DriverDescriptor driver = getSelectedDriver();
DataSourceDescriptor dataSourceTpl = getPageSettings().getActiveDataSource();
ConnectionPageSettings pageSettings = getPageSettings();
DataSourceDescriptor dataSourceTpl = pageSettings == null ? getActiveDataSource() : pageSettings.getActiveDataSource();
DataSourceDescriptor dataSourceNew = new DataSourceDescriptor(
dataSourceRegistry, dataSourceTpl.getId(), driver, dataSourceTpl.getConnectionConfiguration());
dataSourceNew.copyFrom(dataSourceTpl);
......@@ -182,7 +183,10 @@ public class NewConnectionWizard extends ConnectionWizard
@Override
protected void saveSettings(DataSourceDescriptor dataSource) {
getPageSettings(dataSource.getDriver()).saveSettings(dataSource);
ConnectionPageSettings pageSettings = getPageSettings(dataSource.getDriver());
if (pageSettings != null) {
pageSettings.saveSettings(dataSource);
}
pageGeneral.saveSettings(dataSource);
pageNetwork.saveConfigurations(dataSource);
}
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册