diff --git a/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/core/CoreResources.properties b/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/core/CoreResources.properties index 61498b227a19f471520309a15df31c34ec642d73..363f2105481eaaa8dcca0734abcbb778d78f03a4 100644 --- a/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/core/CoreResources.properties +++ b/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/core/CoreResources.properties @@ -474,7 +474,7 @@ tools_wizard_error_task_error_title = {0} error tools_wizard_log_io_error = IO Error: {0} tools_wizard_log_process_exit_code = Process exit code: {0} tools_wizard_message_client_home_not_found = Client home "{0}" not found -tools_wizard_message_no_client_home = Client home is not specified for connection +tools_wizard_message_no_client_home = Native client is not specified for connection tools_wizard_page_log_task_finished = {0} finished at {1} tools_wizard_page_log_task_log_reader = {0} log reader tools_wizard_page_log_task_progress = {0} progress diff --git a/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/ui/dialogs/tools/AbstractToolWizard.java b/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/ui/dialogs/tools/AbstractToolWizard.java index fe21a2ade5d74e3693cb64027085ebfec9d4096f..99593df50de98157acc4c1a0a92fbb4a56786629 100644 --- a/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/ui/dialogs/tools/AbstractToolWizard.java +++ b/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/ui/dialogs/tools/AbstractToolWizard.java @@ -30,7 +30,6 @@ import org.jkiss.dbeaver.Log; import org.jkiss.dbeaver.core.CoreMessages; import org.jkiss.dbeaver.model.DBPDataSourceContainer; import org.jkiss.dbeaver.model.DBUtils; -import org.jkiss.dbeaver.runtime.DBWorkbench; import org.jkiss.dbeaver.model.connection.DBPConnectionConfiguration; import org.jkiss.dbeaver.model.connection.DBPNativeClientLocation; import org.jkiss.dbeaver.model.navigator.DBNDatabaseNode; @@ -38,6 +37,7 @@ import org.jkiss.dbeaver.model.preferences.DBPPreferenceStore; import org.jkiss.dbeaver.model.runtime.DBRProgressMonitor; import org.jkiss.dbeaver.model.runtime.DBRRunnableWithProgress; import org.jkiss.dbeaver.model.struct.DBSObject; +import org.jkiss.dbeaver.runtime.DBWorkbench; import org.jkiss.dbeaver.runtime.ProgressStreamReader; import org.jkiss.dbeaver.ui.UIUtils; import org.jkiss.utils.CommonUtils; @@ -68,7 +68,6 @@ public abstract class AbstractToolWizard) { + boolean nativeClientRequired = ((AbstractToolWizard) getWizard()).isNativeClientHomeRequired(); + if (nativeClientRequired) { + parent.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false)); + + Button configButton = createButton(parent, CLIENT_CONFIG_ID, " Client configuration ... ", false); + configButton.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_BEGINNING)); + + Label spacer = new Label(parent, SWT.NONE); + spacer.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false)); + + ((GridLayout)parent.getLayout()).numColumns++; + ((GridLayout)parent.getLayout()).makeColumnsEqualWidth = false; + } + } + super.createButtonsForButtonBar(parent); Button cancelButton = getButton(IDialogConstants.CANCEL_ID); cancelButton.setText(IDialogConstants.CLOSE_LABEL); Button finishButton = getButton(IDialogConstants.FINISH_ID); finishButton.setText(CoreMessages.tools_wizard_dialog_button_start); } + + @Override + protected void buttonPressed(int buttonId) { + if (buttonId == CLIENT_CONFIG_ID) { + openClientConfiguration(); + } + super.buttonPressed(buttonId); + } + + private void openClientConfiguration() { + AbstractToolWizard toolWizard = (AbstractToolWizard) getWizard(); + DBPDataSourceContainer dataSource = toolWizard.getDataSourceContainer(); + if (dataSource != null) { + NativeClientConfigDialog dialog = new NativeClientConfigDialog(getShell(), dataSource); + if (dialog.open() == IDialogConstants.OK_ID) { + toolWizard.updateErrorMessage(); + updateButtons(); + } + } + } + + private static class NativeClientConfigDialog extends BaseDialog { + + private final DBPDataSourceContainer dataSource; + private ClientHomesSelector homesSelector; + + public NativeClientConfigDialog(Shell parentShell, DBPDataSourceContainer dataSource) { + super(parentShell, "Configure local client for " + dataSource.getName(), dataSource.getDriver().getIcon()); + this.dataSource = dataSource; + } + + @Override + protected Composite createDialogArea(Composite parent) { + Composite dialogArea = super.createDialogArea(parent); + + homesSelector = new ClientHomesSelector(dialogArea, SWT.NONE, "Native client"); + homesSelector.populateHomes(dataSource.getDriver(), dataSource.getConnectionConfiguration().getClientHomeId(), false); + homesSelector.getPanel().setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); + + return dialogArea; + } + + @Override + protected void okPressed() { + String selectedHome = homesSelector.getSelectedHome(); + dataSource.getConnectionConfiguration().setClientHomeId(selectedHome); + dataSource.getRegistry().flushConfig(); + + super.okPressed(); + } + } + } diff --git a/plugins/org.jkiss.dbeaver.ext.mockdata/src/org/jkiss/dbeaver/ext/mockdata/MockDataExecuteWizard.java b/plugins/org.jkiss.dbeaver.ext.mockdata/src/org/jkiss/dbeaver/ext/mockdata/MockDataExecuteWizard.java index 70e9e72cce53aef1c283965720c45e79df28fe15..d8288870d2c7192ddc0ba1feb6da8627e802b03d 100644 --- a/plugins/org.jkiss.dbeaver.ext.mockdata/src/org/jkiss/dbeaver/ext/mockdata/MockDataExecuteWizard.java +++ b/plugins/org.jkiss.dbeaver.ext.mockdata/src/org/jkiss/dbeaver/ext/mockdata/MockDataExecuteWizard.java @@ -57,7 +57,6 @@ public class MockDataExecuteWizard extends AbstractToolWizard dbObjects, String task) { super(dbObjects, task); - this.nativeClientHomeRequired = false; this.mockDataSettings = mockDataSettings; setDialogSettings( @@ -66,6 +65,11 @@ public class MockDataExecuteWizard extends AbstractToolWizard