From fdb93e46504fa19878e2c657fe3e2228c21fc3dd Mon Sep 17 00:00:00 2001 From: Serge Rider Date: Mon, 23 Dec 2019 16:20:34 +0300 Subject: [PATCH] #7444 Regacy code remove. Former-commit-id: 351808eca76b8afbdc72dea86788fd0804024ee0 --- .../ext/mysql/tools/MySQLExportWizard.java | 189 --------- .../tools/MySQLExportWizardPageSettings.java | 32 +- .../mysql/tools/MySQLScriptExecuteWizard.java | 65 +-- .../MySQLScriptExecuteWizardPageSettings.java | 8 +- .../ext/mysql/tools/MySQLToolScript.java | 32 +- .../mysql/tools/MySQLWizardPageSettings.java | 20 +- .../tasks/MySQLDatabaseExportHandler.java | 11 +- .../ui/tools/OracleScriptExecuteWizard.java | 72 +--- ...OracleScriptExecuteWizardPageSettings.java | 9 +- .../tasks/OracleScriptExecuteHandler.java | 14 +- .../tasks/OracleScriptExecuteSettings.java | 2 +- .../tools/PostgreBackupRestoreWizard.java | 43 +- .../postgresql/tools/PostgreBackupWizard.java | 108 ----- .../PostgreBackupWizardPageSettings.java | 32 +- .../tools/PostgreRestoreWizard.java | 43 -- .../PostgreRestoreWizardPageSettings.java | 2 +- .../tools/PostgreScriptExecuteWizard.java | 41 -- ...ostgreScriptExecuteWizardPageSettings.java | 13 +- .../postgresql/tools/PostgreToolScript.java | 28 -- ...ava => PostgreToolWizardPageSettings.java} | 29 +- .../tasks/PostgreDatabaseBackupHandler.java | 11 +- .../src/org/jkiss/dbeaver/model/DBUtils.java | 6 +- .../AbstractImportExportWizard.java | 30 -- .../AbstractScriptExecuteWizard.java | 38 +- .../ui/nativetool/AbstractToolWizard.java | 386 +----------------- .../ui/nativetool/AbstractToolWizardPage.java | 4 +- .../tasks/ui/nativetool/ToolWizardDialog.java | 2 +- .../ui/nativetool/ToolWizardPageLog.java | 3 +- .../nativetool/AbstractNativeToolHandler.java | 16 +- .../AbstractNativeToolSettings.java | 2 +- .../tasks/nativetool/NativeToolUtils.java | 20 + 31 files changed, 146 insertions(+), 1165 deletions(-) rename plugins/org.jkiss.dbeaver.ext.postgresql.ui/src/org/jkiss/dbeaver/ext/postgresql/tools/{PostgreWizardPageSettings.java => PostgreToolWizardPageSettings.java} (77%) create mode 100644 plugins/org.jkiss.dbeaver.tasks.native/src/org/jkiss/dbeaver/tasks/nativetool/NativeToolUtils.java diff --git a/plugins/org.jkiss.dbeaver.ext.mysql.ui/src/org/jkiss/dbeaver/ext/mysql/tools/MySQLExportWizard.java b/plugins/org.jkiss.dbeaver.ext.mysql.ui/src/org/jkiss/dbeaver/ext/mysql/tools/MySQLExportWizard.java index 479141eda0..c1ab69d924 100644 --- a/plugins/org.jkiss.dbeaver.ext.mysql.ui/src/org/jkiss/dbeaver/ext/mysql/tools/MySQLExportWizard.java +++ b/plugins/org.jkiss.dbeaver.ext.mysql.ui/src/org/jkiss/dbeaver/ext/mysql/tools/MySQLExportWizard.java @@ -23,34 +23,20 @@ import org.eclipse.osgi.util.NLS; import org.eclipse.swt.SWT; import org.eclipse.ui.IExportWizard; import org.eclipse.ui.IWorkbench; -import org.jkiss.code.NotNull; -import org.jkiss.dbeaver.ext.mysql.MySQLConstants; -import org.jkiss.dbeaver.ext.mysql.MySQLDataSourceProvider; -import org.jkiss.dbeaver.ext.mysql.MySQLServerHome; -import org.jkiss.dbeaver.ext.mysql.model.MySQLTableBase; import org.jkiss.dbeaver.ext.mysql.tasks.MySQLDatabaseExportInfo; import org.jkiss.dbeaver.ext.mysql.tasks.MySQLExportSettings; import org.jkiss.dbeaver.ext.mysql.tasks.MySQLTasks; import org.jkiss.dbeaver.ext.mysql.ui.internal.MySQLUIMessages; -import org.jkiss.dbeaver.model.runtime.DBRProgressMonitor; import org.jkiss.dbeaver.model.runtime.DBRRunnableContext; import org.jkiss.dbeaver.model.struct.DBSObject; import org.jkiss.dbeaver.model.task.DBTTask; import org.jkiss.dbeaver.registry.task.TaskPreferenceStore; import org.jkiss.dbeaver.tasks.ui.nativetool.AbstractImportExportWizard; import org.jkiss.dbeaver.ui.UIUtils; -import org.jkiss.dbeaver.utils.GeneralUtils; -import org.jkiss.dbeaver.utils.RuntimeUtils; import org.jkiss.utils.CommonUtils; -import java.io.*; -import java.text.NumberFormat; import java.util.Collection; -import java.util.Iterator; -import java.util.List; import java.util.Map; -import java.util.regex.Matcher; -import java.util.regex.Pattern; class MySQLExportWizard extends AbstractImportExportWizard implements IExportWizard { @@ -124,185 +110,10 @@ class MySQLExportWizard extends AbstractImportExportWizard cmd, MySQLDatabaseExportInfo arg) throws IOException - { - File dumpBinary = RuntimeUtils.getNativeClientBinary(getClientHome(), MySQLConstants.BIN_FOLDER, "mysqldump"); //$NON-NLS-1$ - String dumpPath = dumpBinary.getAbsolutePath(); - cmd.add(dumpPath); - MySQLExportSettings settings = getSettings(); - switch (settings.getMethod()) { - case LOCK_ALL_TABLES: - cmd.add("--lock-all-tables"); //$NON-NLS-1$ - break; - case ONLINE: - cmd.add("--single-transaction"); //$NON-NLS-1$ - break; - } - - if (settings.isNoCreateStatements()) { - cmd.add("--no-create-info"); //$NON-NLS-1$ - } else { - if (CommonUtils.isEmpty(arg.getTables())) { - cmd.add("--routines"); //$NON-NLS-1$ - } - } - if (settings.isAddDropStatements()) { - cmd.add("--add-drop-table"); //$NON-NLS-1$ - } else { - cmd.add("--skip-add-drop-table"); //$NON-NLS-1$ - } - if (settings.isDisableKeys()) cmd.add("--disable-keys"); //$NON-NLS-1$ - if (settings.isExtendedInserts()) { - cmd.add("--extended-insert"); //$NON-NLS-1$ - } else { - cmd.add("--skip-extended-insert"); //$NON-NLS-1$ - } - if (settings.isBinariesInHex()) { - cmd.add("--hex-blob"); //$NON-NLS-1$ - } - if (settings.isNoData()) { - cmd.add("--no-data"); //$NON-NLS-1$ - } - if (settings.isDumpEvents()) cmd.add("--events"); //$NON-NLS-1$ - if (settings.isComments()) cmd.add("--comments"); //$NON-NLS-1$ - - settings.addExtraCommandArgs(cmd); - } - - @Override - protected void setupProcessParameters(ProcessBuilder process) { - if (!CommonUtils.isEmpty(getToolUserPassword())) { - process.environment().put(MySQLConstants.ENV_VARIABLE_MYSQL_PWD, getToolUserPassword()); - } - } - - @Override - public boolean performFinish() { - objectsPage.saveState(); - settingsPage.saveState(); - - return super.performFinish(); - } - - @Override - public MySQLServerHome findNativeClientHome(String clientHomeId) - { - return MySQLDataSourceProvider.getServerHome(clientHomeId); - } - - @Override - public List getRunInfo() { - return getSettings().getExportObjects(); - } - - @Override - protected List getCommandLine(MySQLDatabaseExportInfo arg) throws IOException - { - List cmd = MySQLToolScript.getMySQLToolCommandLine(this, arg); - if (!CommonUtils.isEmpty(arg.getTables())) { - cmd.add(arg.getDatabase().getName()); - for (MySQLTableBase table : arg.getTables()) { - cmd.add(table.getName()); - } - } else { - cmd.add(arg.getDatabase().getName()); - } - - return cmd; - } - @Override public boolean isVerbose() { return true; } - @Override - protected void startProcessHandler(DBRProgressMonitor monitor, final MySQLDatabaseExportInfo arg, ProcessBuilder processBuilder, Process process) - { - super.startProcessHandler(monitor, arg, processBuilder, process); - - String outFileName = GeneralUtils.replaceVariables(getSettings().getOutputFilePattern(), name -> { - switch (name) { - case VARIABLE_DATABASE: - return arg.getDatabase().getName(); - case VARIABLE_HOST: - return arg.getDatabase().getDataSource().getContainer().getConnectionConfiguration().getHostName(); - case VARIABLE_TABLE: - final Iterator iterator = arg.getTables() == null ? null : arg.getTables().iterator(); - if (iterator != null && iterator.hasNext()) { - return iterator.next().getName(); - } else { - return "null"; - } - case VARIABLE_TIMESTAMP: - return RuntimeUtils.getCurrentTimeStamp(); - case VARIABLE_DATE: - return RuntimeUtils.getCurrentDate(); - default: - System.getProperty(name); - } - return null; - }); - - File outFile = new File(getSettings().getOutputFolder(), outFileName); - boolean isFiltering = getSettings().isRemoveDefiner(); - Thread job = isFiltering ? - new DumpFilterJob(monitor, process.getInputStream(), outFile) : - new DumpCopierJob(monitor, MySQLUIMessages.tools_db_export_wizard_monitor_export_db, process.getInputStream(), outFile); - job.start(); - } - - - class DumpFilterJob extends DumpJob { - private Pattern DEFINER_PATTER = Pattern.compile("DEFINER\\s*=\\s*`[^*]*`@`[0-9a-z\\-_\\.%]*`", Pattern.CASE_INSENSITIVE); - - DumpFilterJob(DBRProgressMonitor monitor, InputStream stream, File outFile) - { - super(MySQLUIMessages.tools_db_export_wizard_job_dump_log_reader, monitor, stream, outFile); - } - - @Override - public void runDump() throws IOException { - monitor.beginTask(MySQLUIMessages.tools_db_export_wizard_monitor_export_db, 100); - long prevStatusUpdateTime = 0; - try { - NumberFormat numberFormat = NumberFormat.getInstance(); - - LineNumberReader reader = new LineNumberReader(new InputStreamReader(input, GeneralUtils.DEFAULT_ENCODING)); - try (OutputStream output = new FileOutputStream(outFile)) { - BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(output, GeneralUtils.DEFAULT_ENCODING)); - for (;;) { - String line = reader.readLine(); - if (line == null) { - break; - } - final Matcher matcher = DEFINER_PATTER.matcher(line); - if (matcher.find()) { - line = matcher.replaceFirst(""); - } - long currentTime = System.currentTimeMillis(); - if (currentTime - prevStatusUpdateTime > 300) { - monitor.subTask("Saved " + numberFormat.format(reader.getLineNumber()) + " lines"); - prevStatusUpdateTime = currentTime; - } - line = filterLine(line); - writer.write(line); - writer.newLine(); - } - writer.flush(); - } - } - finally { - monitor.done(); - } - } - - @NotNull - private String filterLine(@NotNull String line) { - return line; - } - } - } diff --git a/plugins/org.jkiss.dbeaver.ext.mysql.ui/src/org/jkiss/dbeaver/ext/mysql/tools/MySQLExportWizardPageSettings.java b/plugins/org.jkiss.dbeaver.ext.mysql.ui/src/org/jkiss/dbeaver/ext/mysql/tools/MySQLExportWizardPageSettings.java index e3799c72f9..a48ab55b6f 100644 --- a/plugins/org.jkiss.dbeaver.ext.mysql.ui/src/org/jkiss/dbeaver/ext/mysql/tools/MySQLExportWizardPageSettings.java +++ b/plugins/org.jkiss.dbeaver.ext.mysql.ui/src/org/jkiss/dbeaver/ext/mysql/tools/MySQLExportWizardPageSettings.java @@ -27,7 +27,7 @@ import org.eclipse.swt.layout.GridData; import org.eclipse.swt.widgets.*; import org.jkiss.dbeaver.ext.mysql.tasks.MySQLExportSettings; import org.jkiss.dbeaver.ext.mysql.ui.internal.MySQLUIMessages; -import org.jkiss.dbeaver.tasks.ui.nativetool.AbstractImportExportWizard; +import org.jkiss.dbeaver.tasks.nativetool.NativeToolUtils; import org.jkiss.dbeaver.ui.UIUtils; import org.jkiss.dbeaver.ui.dialogs.DialogUtils; import org.jkiss.dbeaver.utils.GeneralUtils; @@ -61,7 +61,7 @@ class MySQLExportWizardPageSettings extends MySQLWizardPageSettings updateState()); - outputFileText = UIUtils.createLabelText(outputGroup, "File name pattern", wizard.getOutputFilePattern()); + outputFileText = UIUtils.createLabelText(outputGroup, "File name pattern", wizard.getSettings().getOutputFilePattern()); UIUtils.setContentProposalToolTip(outputFileText, "Output file name pattern", - AbstractImportExportWizard.VARIABLE_HOST, - AbstractImportExportWizard.VARIABLE_DATABASE, - AbstractImportExportWizard.VARIABLE_TABLE, - AbstractImportExportWizard.VARIABLE_DATE, - AbstractImportExportWizard.VARIABLE_TIMESTAMP); + NativeToolUtils.VARIABLE_HOST, + NativeToolUtils.VARIABLE_DATABASE, + NativeToolUtils.VARIABLE_TABLE, + NativeToolUtils.VARIABLE_DATE, + NativeToolUtils.VARIABLE_TIMESTAMP); UIUtils.installContentProposal( outputFileText, new TextContentAdapter(), new SimpleContentProposalProvider(new String[] { - GeneralUtils.variablePattern(AbstractImportExportWizard.VARIABLE_HOST), - GeneralUtils.variablePattern(AbstractImportExportWizard.VARIABLE_DATABASE), - GeneralUtils.variablePattern(AbstractImportExportWizard.VARIABLE_TABLE), - GeneralUtils.variablePattern(AbstractImportExportWizard.VARIABLE_DATE), - GeneralUtils.variablePattern(AbstractImportExportWizard.VARIABLE_TIMESTAMP), + GeneralUtils.variablePattern(NativeToolUtils.VARIABLE_HOST), + GeneralUtils.variablePattern(NativeToolUtils.VARIABLE_DATABASE), + GeneralUtils.variablePattern(NativeToolUtils.VARIABLE_TABLE), + GeneralUtils.variablePattern(NativeToolUtils.VARIABLE_DATE), + GeneralUtils.variablePattern(NativeToolUtils.VARIABLE_TIMESTAMP), } )); createExtraArgsInput(outputGroup); - if (wizard.getOutputFolder() != null) { - outputFolderText.setText(wizard.getOutputFolder().getAbsolutePath()); + if (wizard.getSettings().getOutputFolder() != null) { + outputFolderText.setText(wizard.getSettings().getOutputFolder().getAbsolutePath()); } outputFileText.addModifyListener(e -> wizard.getSettings().setOutputFilePattern(outputFileText.getText())); @@ -148,7 +148,7 @@ class MySQLExportWizardPageSettings extends MySQLWizardPageSettings { private MySQLScriptExecuteWizardPageSettings mainPage = new MySQLScriptExecuteWizardPageSettings(this); - public MySQLScriptExecuteWizard(MySQLCatalog catalog, boolean isImport) { + MySQLScriptExecuteWizard(MySQLCatalog catalog, boolean isImport) { super(Collections.singleton(catalog), isImport ? MySQLUIMessages.tools_script_execute_wizard_db_import : MySQLUIMessages.tools_script_execute_wizard_execute_script); this.getSettings().setImport(isImport); } - public MySQLScriptExecuteWizard(DBTTask task, boolean isImport) { + MySQLScriptExecuteWizard(DBTTask task, boolean isImport) { super(task); this.getSettings().setImport(isImport); } @@ -89,56 +80,4 @@ class MySQLScriptExecuteWizard extends AbstractScriptExecuteWizard cmd, MySQLCatalog arg) throws IOException { - String dumpPath = RuntimeUtils.getNativeClientBinary(getClientHome(), MySQLConstants.BIN_FOLDER, "mysql").getAbsolutePath(); //$NON-NLS-1$ - cmd.add(dumpPath); - if (getSettings().getLogLevel() == MySQLScriptExecuteSettings.LogLevel.Debug) { - cmd.add("--debug-info"); //$NON-NLS-1$ - } - if (getSettings().isNoBeep()) { - cmd.add("--no-beep"); //$NON-NLS-1$ - } - getSettings().addExtraCommandArgs(cmd); - } - - @Override - protected void setupProcessParameters(ProcessBuilder process) { - if (!CommonUtils.isEmpty(getToolUserPassword())) { - process.environment().put(MySQLConstants.ENV_VARIABLE_MYSQL_PWD, getToolUserPassword()); - } - } - - @Override - public MySQLServerHome findNativeClientHome(String clientHomeId) { - return MySQLDataSourceProvider.getServerHome(clientHomeId); - } - - @Override - public Collection getRunInfo() { - return getDatabaseObjects(); - } - - @Override - protected List getCommandLine(MySQLCatalog arg) throws IOException { - List cmd = MySQLToolScript.getMySQLToolCommandLine(this, arg); - cmd.add(arg.getName()); - return cmd; - } - - /** - * Use binary file transform job (#2863) - */ - @Override - protected void startProcessHandler(DBRProgressMonitor monitor, final MySQLCatalog arg, ProcessBuilder processBuilder, Process process) { - if (getSettings().isImport()) { - logPage.startLogReader( - processBuilder, - process.getInputStream()); - new BinaryFileTransformerJob(monitor, getInputFile(), process.getOutputStream()).start(); - } else { - super.startProcessHandler(monitor, arg, processBuilder, process); - } - } - } diff --git a/plugins/org.jkiss.dbeaver.ext.mysql.ui/src/org/jkiss/dbeaver/ext/mysql/tools/MySQLScriptExecuteWizardPageSettings.java b/plugins/org.jkiss.dbeaver.ext.mysql.ui/src/org/jkiss/dbeaver/ext/mysql/tools/MySQLScriptExecuteWizardPageSettings.java index 08dbbab92b..0b8714fc95 100644 --- a/plugins/org.jkiss.dbeaver.ext.mysql.ui/src/org/jkiss/dbeaver/ext/mysql/tools/MySQLScriptExecuteWizardPageSettings.java +++ b/plugins/org.jkiss.dbeaver.ext.mysql.ui/src/org/jkiss/dbeaver/ext/mysql/tools/MySQLScriptExecuteWizardPageSettings.java @@ -40,7 +40,7 @@ public class MySQLScriptExecuteWizardPageSettings extends MySQLWizardPageSetting private Text inputFileText; private Combo logLevelCombo; - public MySQLScriptExecuteWizardPageSettings(MySQLScriptExecuteWizard wizard) + MySQLScriptExecuteWizardPageSettings(MySQLScriptExecuteWizard wizard) { super(wizard, wizard.isImport() ? MySQLUIMessages.tools_script_execute_wizard_page_settings_import_configuration : @@ -56,7 +56,7 @@ public class MySQLScriptExecuteWizardPageSettings extends MySQLWizardPageSetting @Override public boolean isPageComplete() { - return super.isPageComplete() && wizard.getInputFile() != null; + return super.isPageComplete() && wizard.getSettings().getInputFile() != null; } @Override @@ -85,8 +85,8 @@ public class MySQLScriptExecuteWizardPageSettings extends MySQLWizardPageSetting } }); - if (wizard.getInputFile() != null) { - inputFileText.setText(wizard.getInputFile().getAbsolutePath()); + if (wizard.getSettings().getInputFile() != null) { + inputFileText.setText(wizard.getSettings().getInputFile()); } Group settingsGroup = UIUtils.createControlGroup( diff --git a/plugins/org.jkiss.dbeaver.ext.mysql.ui/src/org/jkiss/dbeaver/ext/mysql/tools/MySQLToolScript.java b/plugins/org.jkiss.dbeaver.ext.mysql.ui/src/org/jkiss/dbeaver/ext/mysql/tools/MySQLToolScript.java index de04bb5782..f307fdc72e 100644 --- a/plugins/org.jkiss.dbeaver.ext.mysql.ui/src/org/jkiss/dbeaver/ext/mysql/tools/MySQLToolScript.java +++ b/plugins/org.jkiss.dbeaver.ext.mysql.ui/src/org/jkiss/dbeaver/ext/mysql/tools/MySQLToolScript.java @@ -21,21 +21,14 @@ import org.eclipse.ui.IWorkbenchPart; import org.eclipse.ui.IWorkbenchWindow; import org.jkiss.dbeaver.DBException; import org.jkiss.dbeaver.ext.mysql.model.MySQLCatalog; -import org.jkiss.dbeaver.model.connection.DBPConnectionConfiguration; import org.jkiss.dbeaver.model.struct.DBSObject; -import org.jkiss.dbeaver.tasks.nativetool.AbstractNativeToolSettings; -import org.jkiss.dbeaver.tasks.ui.nativetool.AbstractToolWizard; import org.jkiss.dbeaver.tasks.ui.nativetool.ToolWizardDialog; import org.jkiss.dbeaver.ui.tools.IUserInterfaceTool; -import org.jkiss.utils.CommonUtils; -import java.io.IOException; -import java.util.ArrayList; import java.util.Collection; -import java.util.List; /** - * Database import + * MySQLToolScript */ public class MySQLToolScript implements IUserInterfaceTool { @@ -52,27 +45,4 @@ public class MySQLToolScript implements IUserInterfaceTool } } - public static , BASE_OBJECT extends DBSObject, PROCESS_ARG> List getMySQLToolCommandLine( - AbstractToolWizard toolWizard, PROCESS_ARG arg) throws IOException - { - java.util.List cmd = new ArrayList<>(); - toolWizard.fillProcessParameters(cmd, arg); - - if (toolWizard.isVerbose()) { - cmd.add("-v"); - } - DBPConnectionConfiguration connectionInfo = toolWizard.getConnectionInfo(); - cmd.add("--host=" + connectionInfo.getHostName()); - if (!CommonUtils.isEmpty(connectionInfo.getHostPort())) { - cmd.add("--port=" + connectionInfo.getHostPort()); - } - cmd.add("-u"); - cmd.add(toolWizard.getToolUserName()); - // Password is passed in env variable (#1004) -// if (!CommonUtils.isEmpty(toolWizard.getToolUserPassword())) { -// cmd.add("--password=" + toolWizard.getToolUserPassword()); -// } - - return cmd; - } } diff --git a/plugins/org.jkiss.dbeaver.ext.mysql.ui/src/org/jkiss/dbeaver/ext/mysql/tools/MySQLWizardPageSettings.java b/plugins/org.jkiss.dbeaver.ext.mysql.ui/src/org/jkiss/dbeaver/ext/mysql/tools/MySQLWizardPageSettings.java index eee25f8dd4..0daec1cfca 100644 --- a/plugins/org.jkiss.dbeaver.ext.mysql.ui/src/org/jkiss/dbeaver/ext/mysql/tools/MySQLWizardPageSettings.java +++ b/plugins/org.jkiss.dbeaver.ext.mysql.ui/src/org/jkiss/dbeaver/ext/mysql/tools/MySQLWizardPageSettings.java @@ -33,22 +33,22 @@ import org.jkiss.dbeaver.ui.UIUtils; import org.jkiss.dbeaver.ui.dialogs.BaseAuthDialog; -public abstract class MySQLWizardPageSettings extends AbstractToolWizardPage +abstract class MySQLWizardPageSettings extends AbstractToolWizardPage { - public MySQLWizardPageSettings(WIZARD wizard, String title) + MySQLWizardPageSettings(WIZARD wizard, String title) { super(wizard, title); } public void createSecurityGroup(Composite parent) { - final DBPConnectionConfiguration connectionInfo = wizard.getConnectionInfo(); + final DBPConnectionConfiguration connectionInfo = wizard.getSettings().getDataSourceContainer().getActualConnectionConfiguration(); if (connectionInfo != null) { Group securityGroup = UIUtils.createControlGroup( parent, "Security", 2, GridData.HORIZONTAL_ALIGN_BEGINNING, 0); Label infoLabel = new Label(securityGroup, SWT.NONE); - infoLabel.setText("Override user credentials (" + wizard.getConnectionInfo().getUserName() + + infoLabel.setText("Override user credentials (" + connectionInfo.getUserName() + ") for objects '" + wizard.getObjectsName() + "'.\nExternal tools like 'mysqldump' may require different set of permissions."); GridData gd = new GridData(GridData.FILL_HORIZONTAL); gd.horizontalSpan = 2; @@ -59,12 +59,12 @@ public abstract class MySQLWizardPageSettings @Override public void widgetSelected(SelectionEvent e) { BaseAuthDialog authDialog = new BaseAuthDialog(getShell(), "Authentication", false, true); - authDialog.setUserName(wizard.getToolUserName()); - authDialog.setUserPassword(wizard.getToolUserPassword()); + authDialog.setUserName(wizard.getSettings().getToolUserName()); + authDialog.setUserPassword(wizard.getSettings().getToolUserPassword()); authDialog.setSavePassword(true); if (authDialog.open() == IDialogConstants.OK_ID) { - wizard.setToolUserName(authDialog.getUserName()); - wizard.setToolUserPassword(authDialog.getUserPassword()); + wizard.getSettings().setToolUserName(authDialog.getUserName()); + wizard.getSettings().setToolUserPassword(authDialog.getUserPassword()); } } }); @@ -74,8 +74,8 @@ public abstract class MySQLWizardPageSettings resetButton.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { - wizard.setToolUserName(connectionInfo.getUserName()); - wizard.setToolUserPassword(connectionInfo.getUserPassword()); + wizard.getSettings().setToolUserName(null); + wizard.getSettings().setToolUserPassword(null); } }); } diff --git a/plugins/org.jkiss.dbeaver.ext.mysql/src/org/jkiss/dbeaver/ext/mysql/tasks/MySQLDatabaseExportHandler.java b/plugins/org.jkiss.dbeaver.ext.mysql/src/org/jkiss/dbeaver/ext/mysql/tasks/MySQLDatabaseExportHandler.java index 84386a8541..1de8b2b9b3 100644 --- a/plugins/org.jkiss.dbeaver.ext.mysql/src/org/jkiss/dbeaver/ext/mysql/tasks/MySQLDatabaseExportHandler.java +++ b/plugins/org.jkiss.dbeaver.ext.mysql/src/org/jkiss/dbeaver/ext/mysql/tasks/MySQLDatabaseExportHandler.java @@ -9,6 +9,7 @@ import org.jkiss.dbeaver.model.runtime.DBRRunnableContext; import org.jkiss.dbeaver.model.struct.DBSObject; import org.jkiss.dbeaver.model.task.DBTTask; import org.jkiss.dbeaver.registry.task.TaskPreferenceStore; +import org.jkiss.dbeaver.tasks.nativetool.NativeToolUtils; import org.jkiss.dbeaver.utils.GeneralUtils; import org.jkiss.dbeaver.utils.RuntimeUtils; import org.jkiss.utils.CommonUtils; @@ -128,20 +129,20 @@ public class MySQLDatabaseExportHandler extends MySQLNativeToolHandler { switch (name) { - case VARIABLE_DATABASE: + case NativeToolUtils.VARIABLE_DATABASE: return arg.getDatabase().getName(); - case VARIABLE_HOST: + case NativeToolUtils.VARIABLE_HOST: return arg.getDatabase().getDataSource().getContainer().getConnectionConfiguration().getHostName(); - case VARIABLE_TABLE: + case NativeToolUtils.VARIABLE_TABLE: final Iterator iterator = arg.getTables() == null ? null : arg.getTables().iterator(); if (iterator != null && iterator.hasNext()) { return iterator.next().getName(); } else { return "null"; } - case VARIABLE_TIMESTAMP: + case NativeToolUtils.VARIABLE_TIMESTAMP: return RuntimeUtils.getCurrentTimeStamp(); - case VARIABLE_DATE: + case NativeToolUtils.VARIABLE_DATE: return RuntimeUtils.getCurrentDate(); default: System.getProperty(name); diff --git a/plugins/org.jkiss.dbeaver.ext.oracle.ui/src/org/jkiss/dbeaver/ext/oracle/ui/tools/OracleScriptExecuteWizard.java b/plugins/org.jkiss.dbeaver.ext.oracle.ui/src/org/jkiss/dbeaver/ext/oracle/ui/tools/OracleScriptExecuteWizard.java index 3296f3ceb9..b5771d28aa 100644 --- a/plugins/org.jkiss.dbeaver.ext.oracle.ui/src/org/jkiss/dbeaver/ext/oracle/ui/tools/OracleScriptExecuteWizard.java +++ b/plugins/org.jkiss.dbeaver.ext.oracle.ui/src/org/jkiss/dbeaver/ext/oracle/ui/tools/OracleScriptExecuteWizard.java @@ -19,30 +19,21 @@ package org.jkiss.dbeaver.ext.oracle.ui.tools; import org.eclipse.jface.viewers.IStructuredSelection; -import org.eclipse.osgi.util.NLS; import org.eclipse.ui.IWorkbench; -import org.jkiss.dbeaver.ext.oracle.model.OracleConstants; import org.jkiss.dbeaver.ext.oracle.model.OracleDataSource; -import org.jkiss.dbeaver.ext.oracle.model.dict.OracleConnectionType; -import org.jkiss.dbeaver.ext.oracle.oci.OCIUtils; -import org.jkiss.dbeaver.ext.oracle.oci.OracleHomeDescriptor; import org.jkiss.dbeaver.ext.oracle.tasks.OracleScriptExecuteSettings; import org.jkiss.dbeaver.ext.oracle.tasks.OracleTasks; import org.jkiss.dbeaver.ext.oracle.ui.internal.OracleUIMessages; -import org.jkiss.dbeaver.model.DBPDataSourceContainer; -import org.jkiss.dbeaver.model.connection.DBPConnectionConfiguration; import org.jkiss.dbeaver.model.runtime.DBRRunnableContext; import org.jkiss.dbeaver.model.struct.DBSObject; import org.jkiss.dbeaver.model.task.DBTTask; import org.jkiss.dbeaver.registry.task.TaskPreferenceStore; import org.jkiss.dbeaver.tasks.ui.nativetool.AbstractScriptExecuteWizard; -import org.jkiss.dbeaver.utils.RuntimeUtils; -import java.io.File; -import java.io.IOException; -import java.util.*; +import java.util.Collections; +import java.util.Map; -class OracleScriptExecuteWizard extends AbstractScriptExecuteWizard { +class OracleScriptExecuteWizard extends AbstractScriptExecuteWizard { private OracleScriptExecuteWizardPageSettings mainPage; @@ -85,61 +76,4 @@ class OracleScriptExecuteWizard extends AbstractScriptExecuteWizard cmd, DBPDataSourceContainer arg) throws IOException { - String sqlPlusExec = RuntimeUtils.getNativeBinaryName("sqlplus"); //$NON-NLS-1$ - File sqlPlusBinary = new File(getClientHome().getPath(), "bin/" + sqlPlusExec); //$NON-NLS-1$ - if (!sqlPlusBinary.exists()) { - sqlPlusBinary = new File(getClientHome().getPath(), sqlPlusExec); - } - if (!sqlPlusBinary.exists()) { - throw new IOException(NLS.bind(OracleUIMessages.tools_script_execute_wizard_error_sqlplus_not_found, getClientHome().getDisplayName())); - } - String dumpPath = sqlPlusBinary.getAbsolutePath(); - cmd.add(dumpPath); - } - - @Override - public OracleHomeDescriptor findNativeClientHome(String clientHomeId) { - return OCIUtils.getOraHome(clientHomeId); - } - - @Override - public Collection getRunInfo() { - return Collections.singletonList(getSettings().getDataSourceContainer()); - } - - @Override - protected List getCommandLine(DBPDataSourceContainer arg) throws IOException { - List cmd = new ArrayList<>(); - fillProcessParameters(cmd, arg); - DBPConnectionConfiguration conInfo = getConnectionInfo(); - String url; - if ("TNS".equals(conInfo.getProviderProperty(OracleConstants.PROP_CONNECTION_TYPE))) { //$NON-NLS-1$ - url = conInfo.getServerName(); - } else { - boolean isSID = OracleConnectionType.SID.name().equals(conInfo.getProviderProperty(OracleConstants.PROP_SID_SERVICE)); - String port = conInfo.getHostPort(); - if (isSID) { - url = "(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(Host=" + conInfo.getHostName() + ")(Port=" + port + "))(CONNECT_DATA=(SID=" + conInfo.getDatabaseName() + ")))"; - } else { - url = "//" + conInfo.getHostName() + (port != null ? ":" + port : "") + "/" + conInfo.getDatabaseName(); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ - } - } - final String role = conInfo.getProviderProperty(OracleConstants.PROP_INTERNAL_LOGON); - if (role != null) { - url += (" AS " + role); - } - cmd.add(conInfo.getUserName() + "/" + conInfo.getUserPassword() + "@" + url); //$NON-NLS-1$ //$NON-NLS-2$ -/* - - if (toolWizard.isVerbose()) { - cmd.add("-v"); - } - cmd.add("-q"); - - cmd.add(toolWizard.getDatabaseObjects().getName()); -*/ - return cmd; - } } diff --git a/plugins/org.jkiss.dbeaver.ext.oracle.ui/src/org/jkiss/dbeaver/ext/oracle/ui/tools/OracleScriptExecuteWizardPageSettings.java b/plugins/org.jkiss.dbeaver.ext.oracle.ui/src/org/jkiss/dbeaver/ext/oracle/ui/tools/OracleScriptExecuteWizardPageSettings.java index ae4d211b3e..43916e15f7 100644 --- a/plugins/org.jkiss.dbeaver.ext.oracle.ui/src/org/jkiss/dbeaver/ext/oracle/ui/tools/OracleScriptExecuteWizardPageSettings.java +++ b/plugins/org.jkiss.dbeaver.ext.oracle.ui/src/org/jkiss/dbeaver/ext/oracle/ui/tools/OracleScriptExecuteWizardPageSettings.java @@ -22,7 +22,6 @@ import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Group; import org.jkiss.dbeaver.ext.oracle.tasks.OracleScriptExecuteSettings; import org.jkiss.dbeaver.ext.oracle.ui.internal.OracleUIMessages; -import org.jkiss.dbeaver.model.DBPDataSourceContainer; import org.jkiss.dbeaver.model.struct.DBSObject; import org.jkiss.dbeaver.tasks.ui.nativetool.AbstractToolWizardPage; import org.jkiss.dbeaver.ui.UIUtils; @@ -42,7 +41,7 @@ class OracleScriptExecuteWizardPageSettings extends AbstractToolWizardPage selectedConnections = settings.getDatabaseObjects(); - settings.setDataSourceContainer(selectedConnections.isEmpty() ? null : (DBPDataSourceContainer) selectedConnections.get(0)); + settings.setDataSourceContainer(selectedConnections.isEmpty() ? null : selectedConnections.get(0).getDataSource().getContainer()); settings.setInputFile(inputFileText.getText()); } diff --git a/plugins/org.jkiss.dbeaver.ext.oracle/src/org/jkiss/dbeaver/ext/oracle/tasks/OracleScriptExecuteHandler.java b/plugins/org.jkiss.dbeaver.ext.oracle/src/org/jkiss/dbeaver/ext/oracle/tasks/OracleScriptExecuteHandler.java index d090b6ca91..db33ba4651 100644 --- a/plugins/org.jkiss.dbeaver.ext.oracle/src/org/jkiss/dbeaver/ext/oracle/tasks/OracleScriptExecuteHandler.java +++ b/plugins/org.jkiss.dbeaver.ext.oracle/src/org/jkiss/dbeaver/ext/oracle/tasks/OracleScriptExecuteHandler.java @@ -2,8 +2,8 @@ package org.jkiss.dbeaver.ext.oracle.tasks; import org.jkiss.dbeaver.Log; import org.jkiss.dbeaver.ext.oracle.model.OracleConstants; +import org.jkiss.dbeaver.ext.oracle.model.OracleDataSource; import org.jkiss.dbeaver.ext.oracle.model.dict.OracleConnectionType; -import org.jkiss.dbeaver.model.DBPDataSourceContainer; import org.jkiss.dbeaver.model.connection.DBPConnectionConfiguration; import org.jkiss.dbeaver.model.runtime.DBRProgressMonitor; import org.jkiss.dbeaver.model.runtime.DBRRunnableContext; @@ -20,11 +20,11 @@ import java.util.Collection; import java.util.Collections; import java.util.List; -public class OracleScriptExecuteHandler extends AbstractNativeToolHandler { +public class OracleScriptExecuteHandler extends AbstractNativeToolHandler { @Override - public Collection getRunInfo(OracleScriptExecuteSettings settings) { - return Collections.singletonList(settings.getDataSourceContainer()); + public Collection getRunInfo(OracleScriptExecuteSettings settings) { + return Collections.singletonList((OracleDataSource) settings.getDataSourceContainer().getDataSource()); } @Override @@ -45,7 +45,7 @@ public class OracleScriptExecuteHandler extends AbstractNativeToolHandler cmd) throws IOException { + public void fillProcessParameters(OracleScriptExecuteSettings settings, OracleDataSource arg, List cmd) throws IOException { String sqlPlusExec = RuntimeUtils.getNativeBinaryName("sqlplus"); //$NON-NLS-1$ File sqlPlusBinary = new File(settings.getClientHome().getPath(), "bin/" + sqlPlusExec); //$NON-NLS-1$ if (!sqlPlusBinary.exists()) { @@ -59,7 +59,7 @@ public class OracleScriptExecuteHandler extends AbstractNativeToolHandler getCommandLine(OracleScriptExecuteSettings settings, DBPDataSourceContainer arg) throws IOException { + protected List getCommandLine(OracleScriptExecuteSettings settings, OracleDataSource arg) throws IOException { List cmd = new ArrayList<>(); fillProcessParameters(settings, arg, cmd); DBPConnectionConfiguration conInfo = settings.getDataSourceContainer().getActualConnectionConfiguration(); @@ -99,7 +99,7 @@ public class OracleScriptExecuteHandler extends AbstractNativeToolHandler extends AbstractImportExportWizard implements IExportWizard { - - public PostgreBackupRestoreWizard(DBTTask task) { + PostgreBackupRestoreWizard(DBTTask task) { super(task); } - public PostgreBackupRestoreWizard(Collection objects, String title) { + PostgreBackupRestoreWizard(Collection objects, String title) { super(objects, title); } - @Override - public void fillProcessParameters(List cmd, PROCESS_ARG arg) throws IOException - { - File dumpBinary = RuntimeUtils.getNativeClientBinary(getClientHome(), PostgreConstants.BIN_FOLDER, - isExportWizard() ? "pg_dump" : "pg_restore"); //$NON-NLS-1$ - String dumpPath = dumpBinary.getAbsolutePath(); - cmd.add(dumpPath); - - getSettings().addExtraCommandArgs(cmd); - } - - @Override - protected void setupProcessParameters(ProcessBuilder process) { - if (!CommonUtils.isEmpty(getToolUserPassword())) { - process.environment().put("PGPASSWORD", getToolUserPassword()); - } - } - - @Override - public PostgreServerHome findNativeClientHome(String clientHomeId) - { - return PostgreDataSourceProvider.getServerHome(clientHomeId); - } - - @Override - protected List getCommandLine(PROCESS_ARG arg) throws IOException - { - return PostgreToolScript.getPostgreToolCommandLine(this, arg); - } - @Override public boolean isVerbose() { diff --git a/plugins/org.jkiss.dbeaver.ext.postgresql.ui/src/org/jkiss/dbeaver/ext/postgresql/tools/PostgreBackupWizard.java b/plugins/org.jkiss.dbeaver.ext.postgresql.ui/src/org/jkiss/dbeaver/ext/postgresql/tools/PostgreBackupWizard.java index e63e49ebc1..bee407fb25 100644 --- a/plugins/org.jkiss.dbeaver.ext.postgresql.ui/src/org/jkiss/dbeaver/ext/postgresql/tools/PostgreBackupWizard.java +++ b/plugins/org.jkiss.dbeaver.ext.postgresql.ui/src/org/jkiss/dbeaver/ext/postgresql/tools/PostgreBackupWizard.java @@ -23,26 +23,17 @@ import org.eclipse.swt.SWT; import org.eclipse.ui.IExportWizard; import org.eclipse.ui.IWorkbench; import org.jkiss.dbeaver.ext.postgresql.PostgreMessages; -import org.jkiss.dbeaver.ext.postgresql.model.PostgreSchema; -import org.jkiss.dbeaver.ext.postgresql.model.PostgreTableBase; import org.jkiss.dbeaver.ext.postgresql.tasks.PostgreDatabaseBackupInfo; import org.jkiss.dbeaver.ext.postgresql.tasks.PostgreDatabaseBackupSettings; import org.jkiss.dbeaver.ext.postgresql.tasks.PostgreSQLTasks; -import org.jkiss.dbeaver.model.runtime.DBRProgressMonitor; import org.jkiss.dbeaver.model.runtime.DBRRunnableContext; import org.jkiss.dbeaver.model.struct.DBSObject; import org.jkiss.dbeaver.model.task.DBTTask; import org.jkiss.dbeaver.registry.task.TaskPreferenceStore; import org.jkiss.dbeaver.ui.UIUtils; -import org.jkiss.dbeaver.utils.GeneralUtils; -import org.jkiss.dbeaver.utils.RuntimeUtils; import org.jkiss.utils.CommonUtils; -import java.io.File; -import java.io.IOException; import java.util.Collection; -import java.util.Iterator; -import java.util.List; import java.util.Map; class PostgreBackupWizard extends PostgreBackupRestoreWizard implements IExportWizard { @@ -113,108 +104,9 @@ class PostgreBackupWizard extends PostgreBackupRestoreWizard cmd, PostgreDatabaseBackupInfo arg) throws IOException - { - super.fillProcessParameters(cmd, arg); - - cmd.add("--format=" + getSettings().getFormat().getId()); - if (!CommonUtils.isEmpty(getSettings().getCompression())) { - cmd.add("--compress=" + getSettings().getCompression()); - } - if (!CommonUtils.isEmpty(getSettings().getEncoding())) { - cmd.add("--encoding=" + getSettings().getEncoding()); - } - if (getSettings().isUseInserts()) { - cmd.add("--inserts"); - } - if (getSettings().isNoPrivileges()) { - cmd.add("--no-privileges"); - } - if (getSettings().isNoOwner()) { - cmd.add("--no-owner"); - } - - // Objects - if (getSettings().getExportObjects().isEmpty()) { - // no dump - } else if (!CommonUtils.isEmpty(arg.getTables())) { - for (PostgreTableBase table : arg.getTables()) { - cmd.add("-t"); - // Use explicit quotes in case of quoted identifiers (#5950) - cmd.add(escapeCLIIdentifier(table.getSchema().getName() + "." + table.getName())); - } - } - if (!CommonUtils.isEmpty(arg.getSchemas())) { - for (PostgreSchema schema : arg.getSchemas()) { - cmd.add("-n"); - // Use explicit quotes in case of quoted identifiers (#5950) - cmd.add(escapeCLIIdentifier(schema.getName())); - } - } - } - - private static String escapeCLIIdentifier(String name) { - return "\"" + name.replace("\"", "\\\"") + "\""; - } - - @Override - protected List getCommandLine(PostgreDatabaseBackupInfo arg) throws IOException { - List cmd = PostgreToolScript.getPostgreToolCommandLine(this, arg); - cmd.add(arg.getDatabase().getName()); - - return cmd; - } - - @Override - public boolean performFinish() { - objectsPage.saveState(); - settingsPage.updateState(); - - return super.performFinish(); - } - @Override protected PostgreDatabaseBackupSettings createSettings() { return new PostgreDatabaseBackupSettings(); } - @Override - public Collection getRunInfo() { - return getSettings().getExportObjects(); - } - - @Override - protected void startProcessHandler(DBRProgressMonitor monitor, final PostgreDatabaseBackupInfo arg, ProcessBuilder processBuilder, Process process) - { - super.startProcessHandler(monitor, arg, processBuilder, process); - - String outFileName = GeneralUtils.replaceVariables(getSettings().getOutputFilePattern(), name -> { - switch (name) { - case VARIABLE_DATABASE: - return arg.getDatabase().getName(); - case VARIABLE_HOST: - return arg.getDatabase().getDataSource().getContainer().getConnectionConfiguration().getHostName(); - case VARIABLE_TABLE: - final Iterator iterator = arg.getTables() == null ? null : arg.getTables().iterator(); - if (iterator != null && iterator.hasNext()) { - return iterator.next().getName(); - } else { - return "null"; - } - case VARIABLE_TIMESTAMP: - return RuntimeUtils.getCurrentTimeStamp(); - case VARIABLE_DATE: - return RuntimeUtils.getCurrentDate(); - default: - System.getProperty(name); - } - return null; - }); - - File outFile = new File(getSettings().getOutputFolder(), outFileName); - Thread job = new DumpCopierJob(monitor, "Export database", process.getInputStream(), outFile); - job.start(); - } - } diff --git a/plugins/org.jkiss.dbeaver.ext.postgresql.ui/src/org/jkiss/dbeaver/ext/postgresql/tools/PostgreBackupWizardPageSettings.java b/plugins/org.jkiss.dbeaver.ext.postgresql.ui/src/org/jkiss/dbeaver/ext/postgresql/tools/PostgreBackupWizardPageSettings.java index f682308ace..add9b43e9f 100644 --- a/plugins/org.jkiss.dbeaver.ext.postgresql.ui/src/org/jkiss/dbeaver/ext/postgresql/tools/PostgreBackupWizardPageSettings.java +++ b/plugins/org.jkiss.dbeaver.ext.postgresql.ui/src/org/jkiss/dbeaver/ext/postgresql/tools/PostgreBackupWizardPageSettings.java @@ -26,7 +26,7 @@ import org.eclipse.swt.layout.GridData; import org.eclipse.swt.widgets.*; import org.jkiss.dbeaver.ext.postgresql.PostgreMessages; import org.jkiss.dbeaver.ext.postgresql.tasks.PostgreDatabaseBackupSettings; -import org.jkiss.dbeaver.tasks.ui.nativetool.AbstractImportExportWizard; +import org.jkiss.dbeaver.tasks.nativetool.NativeToolUtils; import org.jkiss.dbeaver.ui.UIUtils; import org.jkiss.dbeaver.ui.dialogs.DialogUtils; import org.jkiss.dbeaver.utils.GeneralUtils; @@ -35,7 +35,7 @@ import org.jkiss.utils.CommonUtils; import java.io.File; -class PostgreBackupWizardPageSettings extends PostgreWizardPageSettings { +class PostgreBackupWizardPageSettings extends PostgreToolWizardPageSettings { private Text outputFolderText; private Text outputFileText; @@ -56,7 +56,7 @@ class PostgreBackupWizardPageSettings extends PostgreWizardPageSettings updateState()); outputFileText = UIUtils.createLabelText( outputGroup, PostgreMessages.wizard_backup_page_setting_label_file_name_pattern, - wizard.getOutputFilePattern()); + wizard.getSettings().getOutputFilePattern()); UIUtils.setContentProposalToolTip(outputFileText, PostgreMessages.wizard_backup_page_setting_label_file_name_pattern_output, - AbstractImportExportWizard.VARIABLE_HOST, - AbstractImportExportWizard.VARIABLE_DATABASE, - AbstractImportExportWizard.VARIABLE_TABLE, - AbstractImportExportWizard.VARIABLE_DATE, - AbstractImportExportWizard.VARIABLE_TIMESTAMP); + NativeToolUtils.VARIABLE_HOST, + NativeToolUtils.VARIABLE_DATABASE, + NativeToolUtils.VARIABLE_TABLE, + NativeToolUtils.VARIABLE_DATE, + NativeToolUtils.VARIABLE_TIMESTAMP); UIUtils.installContentProposal( outputFileText, new TextContentAdapter(), new SimpleContentProposalProvider(new String[]{ - GeneralUtils.variablePattern(AbstractImportExportWizard.VARIABLE_HOST), - GeneralUtils.variablePattern(AbstractImportExportWizard.VARIABLE_DATABASE), - GeneralUtils.variablePattern(AbstractImportExportWizard.VARIABLE_TABLE), - GeneralUtils.variablePattern(AbstractImportExportWizard.VARIABLE_DATE), - GeneralUtils.variablePattern(AbstractImportExportWizard.VARIABLE_TIMESTAMP), + GeneralUtils.variablePattern(NativeToolUtils.VARIABLE_HOST), + GeneralUtils.variablePattern(NativeToolUtils.VARIABLE_DATABASE), + GeneralUtils.variablePattern(NativeToolUtils.VARIABLE_TABLE), + GeneralUtils.variablePattern(NativeToolUtils.VARIABLE_DATE), + GeneralUtils.variablePattern(NativeToolUtils.VARIABLE_TIMESTAMP), })); outputFileText.addModifyListener(e -> wizard.getSettings().setOutputFilePattern(outputFileText.getText())); @@ -167,7 +167,7 @@ class PostgreBackupWizardPageSettings extends PostgreWizardPageSettings implements IExportWizard { @@ -108,46 +102,9 @@ class PostgreRestoreWizard extends PostgreBackupRestoreWizard cmd, PostgreDatabaseRestoreInfo arg) throws IOException { - super.fillProcessParameters(cmd, arg); - - if (getSettings().isCleanFirst()) { - cmd.add("-c"); - } - } - - @Override - protected List getCommandLine(PostgreDatabaseRestoreInfo arg) throws IOException { - List cmd = super.getCommandLine(arg); - PostgreDatabaseRestoreSettings settings = getSettings(); - if (settings.getFormat() != PostgreBackupRestoreSettings.ExportFormat.PLAIN) { - cmd.add("--format=" + settings.getFormat().getId()); - } - cmd.add("--dbname=" + arg.getDatabase().getName()); - if (settings.getFormat() == PostgreBackupRestoreSettings.ExportFormat.DIRECTORY) { - cmd.add(settings.getInputFile()); - } - - return cmd; - } - @Override protected PostgreDatabaseRestoreSettings createSettings() { return new PostgreDatabaseRestoreSettings(); } - @Override - public Collection getRunInfo() { - return Collections.singleton(getSettings().getRestoreInfo()); - } - - @Override - protected void startProcessHandler(DBRProgressMonitor monitor, final PostgreDatabaseRestoreInfo arg, ProcessBuilder processBuilder, Process process) { - super.startProcessHandler(monitor, arg, processBuilder, process); - if (getSettings().getFormat() != PostgreBackupRestoreSettings.ExportFormat.DIRECTORY) { - new BinaryFileTransformerJob(monitor, new File(getSettings().getInputFile()), process.getOutputStream()).start(); - } - } - } diff --git a/plugins/org.jkiss.dbeaver.ext.postgresql.ui/src/org/jkiss/dbeaver/ext/postgresql/tools/PostgreRestoreWizardPageSettings.java b/plugins/org.jkiss.dbeaver.ext.postgresql.ui/src/org/jkiss/dbeaver/ext/postgresql/tools/PostgreRestoreWizardPageSettings.java index 494a0147d0..60a0106713 100644 --- a/plugins/org.jkiss.dbeaver.ext.postgresql.ui/src/org/jkiss/dbeaver/ext/postgresql/tools/PostgreRestoreWizardPageSettings.java +++ b/plugins/org.jkiss.dbeaver.ext.postgresql.ui/src/org/jkiss/dbeaver/ext/postgresql/tools/PostgreRestoreWizardPageSettings.java @@ -27,7 +27,7 @@ import org.jkiss.dbeaver.ui.controls.TextWithOpenFile; import org.jkiss.utils.CommonUtils; -class PostgreRestoreWizardPageSettings extends PostgreWizardPageSettings { +class PostgreRestoreWizardPageSettings extends PostgreToolWizardPageSettings { private TextWithOpenFile inputFileText; private Combo formatCombo; diff --git a/plugins/org.jkiss.dbeaver.ext.postgresql.ui/src/org/jkiss/dbeaver/ext/postgresql/tools/PostgreScriptExecuteWizard.java b/plugins/org.jkiss.dbeaver.ext.postgresql.ui/src/org/jkiss/dbeaver/ext/postgresql/tools/PostgreScriptExecuteWizard.java index a8ca0e17bf..6df1669677 100644 --- a/plugins/org.jkiss.dbeaver.ext.postgresql.ui/src/org/jkiss/dbeaver/ext/postgresql/tools/PostgreScriptExecuteWizard.java +++ b/plugins/org.jkiss.dbeaver.ext.postgresql.ui/src/org/jkiss/dbeaver/ext/postgresql/tools/PostgreScriptExecuteWizard.java @@ -19,10 +19,7 @@ package org.jkiss.dbeaver.ext.postgresql.tools; import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.ui.IWorkbench; -import org.jkiss.dbeaver.ext.postgresql.PostgreConstants; -import org.jkiss.dbeaver.ext.postgresql.PostgreDataSourceProvider; import org.jkiss.dbeaver.ext.postgresql.PostgreMessages; -import org.jkiss.dbeaver.ext.postgresql.PostgreServerHome; import org.jkiss.dbeaver.ext.postgresql.model.PostgreDatabase; import org.jkiss.dbeaver.ext.postgresql.tasks.PostgreSQLTasks; import org.jkiss.dbeaver.ext.postgresql.tasks.PostgreScriptExecuteSettings; @@ -31,13 +28,8 @@ import org.jkiss.dbeaver.model.struct.DBSObject; import org.jkiss.dbeaver.model.task.DBTTask; import org.jkiss.dbeaver.registry.task.TaskPreferenceStore; import org.jkiss.dbeaver.tasks.ui.nativetool.AbstractScriptExecuteWizard; -import org.jkiss.dbeaver.utils.RuntimeUtils; -import org.jkiss.utils.CommonUtils; -import java.io.IOException; -import java.util.Collection; import java.util.Collections; -import java.util.List; import java.util.Map; class PostgreScriptExecuteWizard extends AbstractScriptExecuteWizard { @@ -88,37 +80,4 @@ class PostgreScriptExecuteWizard extends AbstractScriptExecuteWizard cmd, PostgreDatabase arg) throws IOException { - String dumpPath = RuntimeUtils.getNativeClientBinary(getClientHome(), PostgreConstants.BIN_FOLDER, "psql").getAbsolutePath(); //$NON-NLS-1$ - cmd.add(dumpPath); - if (arg.getDataSource().isServerVersionAtLeast(9, 5)) { - cmd.add("--echo-errors"); //$NON-NLS-1$ - } - } - - @Override - protected void setupProcessParameters(ProcessBuilder process) { - super.setupProcessParameters(process); - if (!CommonUtils.isEmpty(getToolUserPassword())) { - process.environment().put("PGPASSWORD", getToolUserPassword()); - } - } - - @Override - public PostgreServerHome findNativeClientHome(String clientHomeId) { - return PostgreDataSourceProvider.getServerHome(clientHomeId); - } - - @Override - public Collection getRunInfo() { - return Collections.singletonList(getSettings().getDatabase()); - } - - @Override - protected List getCommandLine(PostgreDatabase arg) throws IOException { - List cmd = PostgreToolScript.getPostgreToolCommandLine(this, arg); - cmd.add(arg.getName()); - return cmd; - } } diff --git a/plugins/org.jkiss.dbeaver.ext.postgresql.ui/src/org/jkiss/dbeaver/ext/postgresql/tools/PostgreScriptExecuteWizardPageSettings.java b/plugins/org.jkiss.dbeaver.ext.postgresql.ui/src/org/jkiss/dbeaver/ext/postgresql/tools/PostgreScriptExecuteWizardPageSettings.java index 110c853d5d..70e7d73251 100644 --- a/plugins/org.jkiss.dbeaver.ext.postgresql.ui/src/org/jkiss/dbeaver/ext/postgresql/tools/PostgreScriptExecuteWizardPageSettings.java +++ b/plugins/org.jkiss.dbeaver.ext.postgresql.ui/src/org/jkiss/dbeaver/ext/postgresql/tools/PostgreScriptExecuteWizardPageSettings.java @@ -31,12 +31,11 @@ import org.jkiss.dbeaver.model.DBIcon; import org.jkiss.dbeaver.ui.DBeaverIcons; import org.jkiss.dbeaver.ui.UIUtils; import org.jkiss.dbeaver.ui.dialogs.DialogUtils; -import org.jkiss.utils.CommonUtils; import java.io.File; -public class PostgreScriptExecuteWizardPageSettings extends PostgreWizardPageSettings { +public class PostgreScriptExecuteWizardPageSettings extends PostgreToolWizardPageSettings { private Text inputFileText; PostgreScriptExecuteWizardPageSettings(PostgreScriptExecuteWizard wizard) { @@ -47,7 +46,7 @@ public class PostgreScriptExecuteWizardPageSettings extends PostgreWizardPageSet @Override public boolean isPageComplete() { - return super.isPageComplete() && wizard.getInputFile() != null; + return super.isPageComplete() && wizard.getSettings().getInputFile() != null; } @Override @@ -73,8 +72,8 @@ public class PostgreScriptExecuteWizardPageSettings extends PostgreWizardPageSet } }); - if (wizard.getInputFile() != null) { - inputFileText.setText(wizard.getInputFile().getAbsolutePath()); + if (wizard.getSettings().getInputFile() != null) { + inputFileText.setText(wizard.getSettings().getInputFile()); } Composite extraGroup = UIUtils.createComposite(composite, 2); @@ -94,8 +93,8 @@ public class PostgreScriptExecuteWizardPageSettings extends PostgreWizardPageSet @Override public void saveState() { - String fileName = inputFileText.getText(); - wizard.setInputFile(CommonUtils.isEmpty(fileName) ? null : new File(fileName)); + super.saveState(); + wizard.getSettings().setInputFile(inputFileText.getText()); } diff --git a/plugins/org.jkiss.dbeaver.ext.postgresql.ui/src/org/jkiss/dbeaver/ext/postgresql/tools/PostgreToolScript.java b/plugins/org.jkiss.dbeaver.ext.postgresql.ui/src/org/jkiss/dbeaver/ext/postgresql/tools/PostgreToolScript.java index 92e243fdb7..04e5595d38 100644 --- a/plugins/org.jkiss.dbeaver.ext.postgresql.ui/src/org/jkiss/dbeaver/ext/postgresql/tools/PostgreToolScript.java +++ b/plugins/org.jkiss.dbeaver.ext.postgresql.ui/src/org/jkiss/dbeaver/ext/postgresql/tools/PostgreToolScript.java @@ -20,18 +20,11 @@ import org.eclipse.ui.IWorkbenchPart; import org.eclipse.ui.IWorkbenchWindow; import org.jkiss.dbeaver.DBException; import org.jkiss.dbeaver.ext.postgresql.model.PostgreDatabase; -import org.jkiss.dbeaver.model.connection.DBPConnectionConfiguration; import org.jkiss.dbeaver.model.struct.DBSObject; -import org.jkiss.dbeaver.tasks.nativetool.AbstractNativeToolSettings; -import org.jkiss.dbeaver.tasks.ui.nativetool.AbstractToolWizard; import org.jkiss.dbeaver.tasks.ui.nativetool.ToolWizardDialog; import org.jkiss.dbeaver.ui.tools.IUserInterfaceTool; -import org.jkiss.utils.CommonUtils; -import java.io.IOException; -import java.util.ArrayList; import java.util.Collection; -import java.util.List; /** * Database import @@ -51,25 +44,4 @@ public class PostgreToolScript implements IUserInterfaceTool } } - public static , BASE_OBJECT extends DBSObject, PROCESS_ARG> List getPostgreToolCommandLine( - AbstractToolWizard toolWizard, PROCESS_ARG arg) throws IOException - { - java.util.List cmd = new ArrayList<>(); - toolWizard.fillProcessParameters(cmd, arg); - - if (toolWizard.isVerbose()) { - cmd.add("--verbose"); - } - DBPConnectionConfiguration connectionInfo = toolWizard.getConnectionInfo(); - cmd.add("--host=" + connectionInfo.getHostName()); - if (!CommonUtils.isEmpty(connectionInfo.getHostPort())) { - cmd.add("--port=" + connectionInfo.getHostPort()); - } - cmd.add("--username=" + toolWizard.getToolUserName()); -// if (!CommonUtils.isEmpty(toolWizard.getToolUserPassword())) { -// cmd.add("--password"); -// } - - return cmd; - } } diff --git a/plugins/org.jkiss.dbeaver.ext.postgresql.ui/src/org/jkiss/dbeaver/ext/postgresql/tools/PostgreWizardPageSettings.java b/plugins/org.jkiss.dbeaver.ext.postgresql.ui/src/org/jkiss/dbeaver/ext/postgresql/tools/PostgreToolWizardPageSettings.java similarity index 77% rename from plugins/org.jkiss.dbeaver.ext.postgresql.ui/src/org/jkiss/dbeaver/ext/postgresql/tools/PostgreWizardPageSettings.java rename to plugins/org.jkiss.dbeaver.ext.postgresql.ui/src/org/jkiss/dbeaver/ext/postgresql/tools/PostgreToolWizardPageSettings.java index 5c7b1bc1f7..f36ef8572c 100644 --- a/plugins/org.jkiss.dbeaver.ext.postgresql.ui/src/org/jkiss/dbeaver/ext/postgresql/tools/PostgreWizardPageSettings.java +++ b/plugins/org.jkiss.dbeaver.ext.postgresql.ui/src/org/jkiss/dbeaver/ext/postgresql/tools/PostgreToolWizardPageSettings.java @@ -37,10 +37,10 @@ import org.jkiss.dbeaver.ui.UIUtils; import org.jkiss.dbeaver.ui.dialogs.BaseAuthDialog; -public abstract class PostgreWizardPageSettings extends AbstractToolWizardPage +public abstract class PostgreToolWizardPageSettings extends AbstractToolWizardPage { - public PostgreWizardPageSettings(WIZARD wizard, String title) + public PostgreToolWizardPageSettings(WIZARD wizard, String title) { super(wizard, title); } @@ -49,7 +49,7 @@ public abstract class PostgreWizardPageSettings { switch (name) { - case VARIABLE_DATABASE: + case NativeToolUtils.VARIABLE_DATABASE: return arg.getDatabase().getName(); - case VARIABLE_HOST: + case NativeToolUtils.VARIABLE_HOST: return arg.getDatabase().getDataSource().getContainer().getConnectionConfiguration().getHostName(); - case VARIABLE_TABLE: + case NativeToolUtils.VARIABLE_TABLE: final Iterator iterator = arg.getTables() == null ? null : arg.getTables().iterator(); if (iterator != null && iterator.hasNext()) { return iterator.next().getName(); } else { return "null"; } - case VARIABLE_TIMESTAMP: + case NativeToolUtils.VARIABLE_TIMESTAMP: return RuntimeUtils.getCurrentTimeStamp(); - case VARIABLE_DATE: + case NativeToolUtils.VARIABLE_DATE: return RuntimeUtils.getCurrentDate(); default: System.getProperty(name); diff --git a/plugins/org.jkiss.dbeaver.model/src/org/jkiss/dbeaver/model/DBUtils.java b/plugins/org.jkiss.dbeaver.model/src/org/jkiss/dbeaver/model/DBUtils.java index e78f4e3a0f..8183b6676c 100644 --- a/plugins/org.jkiss.dbeaver.model/src/org/jkiss/dbeaver/model/DBUtils.java +++ b/plugins/org.jkiss.dbeaver.model/src/org/jkiss/dbeaver/model/DBUtils.java @@ -571,6 +571,9 @@ public final class DBUtils { return null; } } + if (names.length == 1) { + return dataSourceContainer; + } if (!dataSourceContainer.isConnected()) { dataSourceContainer.connect(monitor, true, true); } @@ -597,9 +600,6 @@ public final class DBUtils { } } if (sc != null) { - if (names.length == 1) { - return sc; - } String objectName = names[names.length - 1]; DBSObject object = sc.getChild(monitor, objectName); if (object == null) { diff --git a/plugins/org.jkiss.dbeaver.tasks.native.ui/src/org/jkiss/dbeaver/tasks/ui/nativetool/AbstractImportExportWizard.java b/plugins/org.jkiss.dbeaver.tasks.native.ui/src/org/jkiss/dbeaver/tasks/ui/nativetool/AbstractImportExportWizard.java index b38c776c15..d037e3eb40 100644 --- a/plugins/org.jkiss.dbeaver.tasks.native.ui/src/org/jkiss/dbeaver/tasks/ui/nativetool/AbstractImportExportWizard.java +++ b/plugins/org.jkiss.dbeaver.tasks.native.ui/src/org/jkiss/dbeaver/tasks/ui/nativetool/AbstractImportExportWizard.java @@ -21,11 +21,9 @@ import org.eclipse.jface.dialogs.IMessageProvider; import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.ui.IExportWizard; import org.eclipse.ui.IWorkbench; -import org.jkiss.dbeaver.model.runtime.DBRProgressMonitor; import org.jkiss.dbeaver.model.struct.DBSObject; import org.jkiss.dbeaver.model.task.DBTTask; import org.jkiss.dbeaver.tasks.nativetool.AbstractImportExportSettings; -import org.jkiss.dbeaver.ui.dialogs.DialogUtils; import java.io.File; import java.util.Collection; @@ -33,12 +31,6 @@ import java.util.Collection; public abstract class AbstractImportExportWizard, PROCESS_ARG> extends AbstractToolWizard implements IExportWizard { - public static final String VARIABLE_HOST = "host"; - public static final String VARIABLE_DATABASE = "database"; - public static final String VARIABLE_TABLE = "table"; - public static final String VARIABLE_DATE = "date"; - public static final String VARIABLE_TIMESTAMP = "timestamp"; - protected AbstractImportExportWizard(Collection objects, String title) { super(objects, title); } @@ -52,21 +44,6 @@ public abstract class AbstractImportExportWizard, BASE_OBJECT extends DBSObject, PROCESS_ARG> @@ -52,15 +49,6 @@ public abstract class AbstractScriptExecuteWizard getDatabaseObjects() { - return settings.getDatabaseObjects(); - } - - public DBPConnectionConfiguration getConnectionInfo() { - DBPDataSourceContainer ds = settings.getDataSourceContainer(); - if (ds != null) { - return ds.getConnectionConfiguration(); - } - return null; - } - - public DBPNativeClientLocation getClientHome() { - return settings.getClientHome(); - } - - public String getToolUserName() { - return settings.getToolUserName(); - } - - public void setToolUserName(String toolUserName) { - this.settings.setToolUserName(toolUserName); - } - - public String getToolUserPassword() { - return settings.getToolUserPassword(); - } - - public void setToolUserPassword(String toolUserPassword) { - this.settings.setToolUserPassword(toolUserPassword); - } - - public String getExtraCommandArgs() { - return settings.getExtraCommandArgs(); - } - - public DBPDataSourceContainer getDataSourceContainer() { - return settings.getDataSourceContainer(); - } - - public DBPNativeClientLocation findNativeClientHome(String clientHomeId) { - return null; - } - - public abstract Collection getRunInfo(); - - public Collection getUpdatedObjects(PROCESS_ARG settings) { - return Collections.emptyList(); - } - @Override public void createPageControls(Composite pageContainer) { settings.loadSettings(UIUtils.getDefaultRunnableContext(), getPreferenceStore()); @@ -198,12 +132,12 @@ public abstract class AbstractToolWizard nativeClientLocations = getDataSourceContainer().getDriver().getNativeClientLocations(); + String clientHomeId = getSettings().getDataSourceContainer().getConnectionConfiguration().getClientHomeId(); + List nativeClientLocations = getSettings().getDataSourceContainer().getDriver().getNativeClientLocations(); if (CommonUtils.isEmpty(clientHomeId)) { if (nativeClientLocations != null && !nativeClientLocations.isEmpty()) { settings.setClientHome(nativeClientLocations.get(0)); @@ -218,7 +152,7 @@ public abstract class AbstractToolWizard commandLine = getCommandLine(arg); - final File execPath = new File(commandLine.get(0)); - - ProcessBuilder processBuilder = new ProcessBuilder(commandLine); - processBuilder.directory(execPath.getParentFile()); - if (this.isMergeProcessStreams()) { - processBuilder.redirectErrorStream(true); - } - setupProcessParameters(processBuilder); - Process process = processBuilder.start(); - - startProcessHandler(monitor, arg, processBuilder, process); - - Thread.sleep(100); - - for (; ; ) { - Thread.sleep(100); - if (monitor.isCanceled()) { - process.destroy(); - } - try { - final int exitCode = process.exitValue(); - if (exitCode != 0) { - errorMessage = NLS.bind(TaskNativeUIMessages.tools_wizard_log_process_exit_code, exitCode); - logPage.appendLog(errorMessage + "\n", true); - return false; - } - } catch (IllegalThreadStateException e) { - // Still running - continue; - } - break; - } - //process.waitFor(); - } catch (IOException e) { - monitor.done(); - log.error(e); - logPage.appendLog(NLS.bind(TaskNativeUIMessages.tools_wizard_log_io_error, e.getMessage()) + "\n", true); - return false; - } - - return true; - } - protected boolean isNativeClientHomeRequired() { return true; } - protected boolean isMergeProcessStreams() { - return false; - } - public boolean isVerbose() { return false; } @@ -414,205 +266,5 @@ public abstract class AbstractToolWizard getCommandLine(PROCESS_ARG arg) throws IOException; - - public abstract void fillProcessParameters(List cmd, PROCESS_ARG arg) throws IOException; - - protected void setupProcessParameters(ProcessBuilder process) { - } - - protected abstract void startProcessHandler(DBRProgressMonitor monitor, PROCESS_ARG arg, ProcessBuilder processBuilder, Process process); - - public boolean isSecureString(String string) { - String password = getToolUserPassword(); - return !CommonUtils.isEmpty(password) && string.contains(password); - } - - public abstract class DumpJob extends Thread { - protected DBRProgressMonitor monitor; - protected InputStream input; - protected File outFile; - - protected DumpJob(String name, DBRProgressMonitor monitor, InputStream stream, File outFile) { - super(name); - this.monitor = monitor; - this.input = stream; - this.outFile = outFile; - } - - @Override - public final void run() { - try { - runDump(); - } catch (IOException e) { - logPage.appendLog(e.getMessage()); - } - } - - protected abstract void runDump() - throws IOException; - } - - public class DumpCopierJob extends DumpJob { - public DumpCopierJob(DBRProgressMonitor monitor, String name, InputStream stream, File outFile) { - super(name, monitor, stream, outFile); - } - - @Override - public void runDump() throws IOException { - monitor.beginTask(getName(), 100); - long totalBytesDumped = 0; - long prevStatusUpdateTime = 0; - byte[] buffer = new byte[10000]; - try { - NumberFormat numberFormat = NumberFormat.getInstance(); - - try (OutputStream output = new FileOutputStream(outFile)) { - for (; ; ) { - int count = input.read(buffer); - if (count <= 0) { - break; - } - totalBytesDumped += count; - long currentTime = System.currentTimeMillis(); - if (currentTime - prevStatusUpdateTime > 300) { - monitor.subTask(numberFormat.format(totalBytesDumped) + " bytes"); - prevStatusUpdateTime = currentTime; - } - output.write(buffer, 0, count); - } - output.flush(); - } - } finally { - monitor.done(); - } - } - } - - public class TextFileTransformerJob extends Thread { - private DBRProgressMonitor monitor; - private OutputStream output; - private File inputFile; - private String inputCharset; - private String outputCharset; - - public TextFileTransformerJob(DBRProgressMonitor monitor, File inputFile, OutputStream stream, String inputCharset, String outputCharset) { - super(taskTitle); - this.monitor = monitor; - this.output = stream; - this.inputFile = inputFile; - this.inputCharset = inputCharset; - this.outputCharset = outputCharset; - } - - @Override - public void run() { - try { - try (InputStream scriptStream = new ProgressStreamReader( - monitor, - taskTitle, - new FileInputStream(inputFile), - inputFile.length())) { - BufferedReader reader = new BufferedReader(new InputStreamReader(scriptStream, inputCharset)); - PrintWriter writer = new PrintWriter(new OutputStreamWriter(output, outputCharset)); - while (!monitor.isCanceled()) { - String line = reader.readLine(); - if (line == null) { - break; - } - writer.println(line); - writer.flush(); - } - output.flush(); - } finally { - IOUtils.close(output); - } - } catch (IOException e) { - log.debug(e); - logPage.appendLog(e.getMessage()); - } finally { - monitor.done(); - transferFinished = true; - } - } - } - - public class BinaryFileTransformerJob extends Thread { - private DBRProgressMonitor monitor; - private OutputStream output; - private File inputFile; - - public BinaryFileTransformerJob(DBRProgressMonitor monitor, File inputFile, OutputStream stream) { - super(taskTitle); - this.monitor = monitor; - this.output = stream; - this.inputFile = inputFile; - } - - @Override - public void run() { - try (InputStream scriptStream = new ProgressStreamReader( - monitor, - taskTitle, - new FileInputStream(inputFile), - inputFile.length())) { - byte[] buffer = new byte[100000]; - while (!monitor.isCanceled()) { - int readSize = scriptStream.read(buffer); - if (readSize < 0) { - break; - } - output.write(buffer, 0, readSize); - output.flush(); - } - output.flush(); - } catch (IOException e) { - log.debug(e); - logPage.appendLog(e.getMessage() + "\n"); - } finally { - try { - output.close(); - } catch (IOException e) { - log.error(e); - } - monitor.done(); - transferFinished = true; - } - } - } - - private class ToolRunner implements DBRRunnableWithProgress { - @Override - public void run(DBRProgressMonitor monitor) throws InvocationTargetException, InterruptedException { - try { - isSuccess = true; - for (PROCESS_ARG arg : getRunInfo()) { - if (monitor.isCanceled()) break; - if (!executeProcess(monitor, arg)) { - isSuccess = false; - } - } - refreshObjects = isSuccess && !monitor.isCanceled(); - if (refreshObjects && needsModelRefresh()) { - // Refresh navigator node (script execution can change everything inside) - for (BASE_OBJECT object : settings.getDatabaseObjects()) { - final DBNDatabaseNode node = settings.getDataSourceContainer().getPlatform().getNavigatorModel().findNode(object); - if (node != null) { - node.refreshNode(monitor, AbstractToolWizard.this); - } - } - } - } catch (InterruptedException e) { - throw e; - } catch (Exception e) { - throw new InvocationTargetException(e); - } finally { - finished = true; - } - if (monitor.isCanceled()) { - throw new InterruptedException(); - } - } - } } diff --git a/plugins/org.jkiss.dbeaver.tasks.native.ui/src/org/jkiss/dbeaver/tasks/ui/nativetool/AbstractToolWizardPage.java b/plugins/org.jkiss.dbeaver.tasks.native.ui/src/org/jkiss/dbeaver/tasks/ui/nativetool/AbstractToolWizardPage.java index aa394f1a3b..9c479176e0 100644 --- a/plugins/org.jkiss.dbeaver.tasks.native.ui/src/org/jkiss/dbeaver/tasks/ui/nativetool/AbstractToolWizardPage.java +++ b/plugins/org.jkiss.dbeaver.tasks.native.ui/src/org/jkiss/dbeaver/tasks/ui/nativetool/AbstractToolWizardPage.java @@ -44,7 +44,7 @@ public abstract class AbstractToolWizardPage @Override public boolean isPageComplete() { - return wizard.getClientHome() != null && super.isPageComplete(); + return wizard.getSettings().getClientHome() != null && super.isPageComplete(); } protected void createCheckButtons(Composite buttonsPanel, final Table table) { @@ -53,7 +53,7 @@ public abstract class AbstractToolWizardPage } protected void createExtraArgsInput(Composite outputGroup) { - extraCommandArgsText = UIUtils.createLabelText(outputGroup, "Extra command args", wizard.getExtraCommandArgs()); + extraCommandArgsText = UIUtils.createLabelText(outputGroup, "Extra command args", wizard.getSettings().getExtraCommandArgs()); extraCommandArgsText.setToolTipText("Set extra command args for tool executable."); UIUtils.installContentProposal( extraCommandArgsText, diff --git a/plugins/org.jkiss.dbeaver.tasks.native.ui/src/org/jkiss/dbeaver/tasks/ui/nativetool/ToolWizardDialog.java b/plugins/org.jkiss.dbeaver.tasks.native.ui/src/org/jkiss/dbeaver/tasks/ui/nativetool/ToolWizardDialog.java index a884471a7f..24dbd84869 100644 --- a/plugins/org.jkiss.dbeaver.tasks.native.ui/src/org/jkiss/dbeaver/tasks/ui/nativetool/ToolWizardDialog.java +++ b/plugins/org.jkiss.dbeaver.tasks.native.ui/src/org/jkiss/dbeaver/tasks/ui/nativetool/ToolWizardDialog.java @@ -85,7 +85,7 @@ public class ToolWizardDialog extends TaskConfigurationWizardDialog { private void openClientConfiguration() { AbstractToolWizard toolWizard = (AbstractToolWizard) getWizard(); - DBPDataSourceContainer dataSource = toolWizard.getDataSourceContainer(); + DBPDataSourceContainer dataSource = toolWizard.getSettings().getDataSourceContainer(); if (dataSource != null) { NativeClientConfigDialog dialog = new NativeClientConfigDialog(getShell(), dataSource); if (dialog.open() == IDialogConstants.OK_ID) { diff --git a/plugins/org.jkiss.dbeaver.tasks.native.ui/src/org/jkiss/dbeaver/tasks/ui/nativetool/ToolWizardPageLog.java b/plugins/org.jkiss.dbeaver.tasks.native.ui/src/org/jkiss/dbeaver/tasks/ui/nativetool/ToolWizardPageLog.java index 8208a9f825..d79a180bae 100644 --- a/plugins/org.jkiss.dbeaver.tasks.native.ui/src/org/jkiss/dbeaver/tasks/ui/nativetool/ToolWizardPageLog.java +++ b/plugins/org.jkiss.dbeaver.tasks.native.ui/src/org/jkiss/dbeaver/tasks/ui/nativetool/ToolWizardPageLog.java @@ -29,6 +29,7 @@ import org.eclipse.swt.widgets.Composite; import org.eclipse.ui.console.MessageConsole; import org.eclipse.ui.console.TextConsoleViewer; import org.jkiss.dbeaver.Log; +import org.jkiss.dbeaver.tasks.nativetool.NativeToolUtils; import org.jkiss.dbeaver.tasks.ui.nativetool.internal.TaskNativeUIMessages; import org.jkiss.dbeaver.ui.UIUtils; import org.jkiss.dbeaver.utils.GeneralUtils; @@ -143,7 +144,7 @@ public class ToolWizardPageLog extends WizardPage { // Dump command line StringBuilder cmdString = new StringBuilder(); for (String cmd : command) { - if (wizard.isSecureString(cmd)) { + if (NativeToolUtils.isSecureString(wizard.getSettings(), cmd)) { cmd = "******"; } if (cmdString.length() > 0) cmdString.append(' '); diff --git a/plugins/org.jkiss.dbeaver.tasks.native/src/org/jkiss/dbeaver/tasks/nativetool/AbstractNativeToolHandler.java b/plugins/org.jkiss.dbeaver.tasks.native/src/org/jkiss/dbeaver/tasks/nativetool/AbstractNativeToolHandler.java index b87e268da9..2af19bacc7 100644 --- a/plugins/org.jkiss.dbeaver.tasks.native/src/org/jkiss/dbeaver/tasks/nativetool/AbstractNativeToolHandler.java +++ b/plugins/org.jkiss.dbeaver.tasks.native/src/org/jkiss/dbeaver/tasks/nativetool/AbstractNativeToolHandler.java @@ -18,7 +18,6 @@ import org.jkiss.dbeaver.model.task.DBTTaskHandler; import org.jkiss.dbeaver.runtime.DBWorkbench; import org.jkiss.dbeaver.runtime.ProgressStreamReader; import org.jkiss.dbeaver.utils.GeneralUtils; -import org.jkiss.utils.CommonUtils; import org.jkiss.utils.IOUtils; import java.io.*; @@ -28,12 +27,6 @@ import java.util.*; public abstract class AbstractNativeToolHandler, BASE_OBJECT extends DBSObject, PROCESS_ARG> implements DBTTaskHandler { - public static final String VARIABLE_HOST = "host"; - public static final String VARIABLE_DATABASE = "database"; - public static final String VARIABLE_TABLE = "table"; - public static final String VARIABLE_DATE = "date"; - public static final String VARIABLE_TIMESTAMP = "timestamp"; - @Override public void executeTask( @NotNull DBRRunnableContext runnableContext, @@ -284,13 +277,6 @@ public abstract class AbstractNativeToolHandler 0) cmdString.append(' '); diff --git a/plugins/org.jkiss.dbeaver.tasks.native/src/org/jkiss/dbeaver/tasks/nativetool/AbstractNativeToolSettings.java b/plugins/org.jkiss.dbeaver.tasks.native/src/org/jkiss/dbeaver/tasks/nativetool/AbstractNativeToolSettings.java index ff764a4a10..1b235870c7 100644 --- a/plugins/org.jkiss.dbeaver.tasks.native/src/org/jkiss/dbeaver/tasks/nativetool/AbstractNativeToolSettings.java +++ b/plugins/org.jkiss.dbeaver.tasks.native/src/org/jkiss/dbeaver/tasks/nativetool/AbstractNativeToolSettings.java @@ -45,7 +45,7 @@ public abstract class AbstractNativeToolSettings private String toolUserPassword; private String extraCommandArgs; - protected DBPNativeClientLocation findNativeClientHome(String clientHomeId) { + public DBPNativeClientLocation findNativeClientHome(String clientHomeId) { return null; } diff --git a/plugins/org.jkiss.dbeaver.tasks.native/src/org/jkiss/dbeaver/tasks/nativetool/NativeToolUtils.java b/plugins/org.jkiss.dbeaver.tasks.native/src/org/jkiss/dbeaver/tasks/nativetool/NativeToolUtils.java new file mode 100644 index 0000000000..cb5c42e594 --- /dev/null +++ b/plugins/org.jkiss.dbeaver.tasks.native/src/org/jkiss/dbeaver/tasks/nativetool/NativeToolUtils.java @@ -0,0 +1,20 @@ +package org.jkiss.dbeaver.tasks.nativetool; + +import org.jkiss.utils.CommonUtils; + +public abstract class NativeToolUtils { + + public static final String VARIABLE_HOST = "host"; + public static final String VARIABLE_DATABASE = "database"; + public static final String VARIABLE_TABLE = "table"; + public static final String VARIABLE_DATE = "date"; + public static final String VARIABLE_TIMESTAMP = "timestamp"; + + public static boolean isSecureString(AbstractNativeToolSettings settings, String string) { + String userPassword = settings.getDataSourceContainer().getActualConnectionConfiguration().getUserPassword(); + String toolUserPassword = settings.getToolUserPassword(); + return !CommonUtils.isEmpty(toolUserPassword) && string.contains(toolUserPassword) || + !CommonUtils.isEmpty(userPassword) && string.contains(userPassword); + } + +} -- GitLab