提交 fdb93e46 编写于 作者: S Serge Rider

#7444 Regacy code remove.


Former-commit-id: 351808ec
上级 4969ad56
......@@ -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<MySQLExportSettings, MySQLDatabaseExportInfo> implements IExportWizard {
......@@ -124,185 +110,10 @@ class MySQLExportWizard extends AbstractImportExportWizard<MySQLExportSettings,
UIUtils.launchProgram(getSettings().getOutputFolder().getAbsolutePath());
}
@Override
public void fillProcessParameters(List<String> 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<MySQLDatabaseExportInfo> getRunInfo() {
return getSettings().getExportObjects();
}
@Override
protected List<String> getCommandLine(MySQLDatabaseExportInfo arg) throws IOException
{
List<String> 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<MySQLTableBase> 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;
}
}
}
......@@ -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<MySQLExportW
@Override
public boolean isPageComplete()
{
return super.isPageComplete() && wizard.getOutputFolder() != null;
return super.isPageComplete() && wizard.getSettings().getOutputFolder() != null;
}
@Override
......@@ -107,29 +107,29 @@ class MySQLExportWizardPageSettings extends MySQLWizardPageSettings<MySQLExportW
Group outputGroup = UIUtils.createControlGroup(composite, MySQLUIMessages.tools_db_export_wizard_page_settings_group_output, 2, GridData.FILL_HORIZONTAL, 0);
outputFolderText = DialogUtils.createOutputFolderChooser(outputGroup, MySQLUIMessages.tools_db_export_wizard_page_settings_label_out_text, e -> 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<MySQLExportW
MySQLExportSettings settings = wizard.getSettings();
String fileName = outputFolderText.getText();
wizard.setOutputFolder(CommonUtils.isEmpty(fileName) ? null : new File(fileName));
wizard.getSettings().setOutputFolder(CommonUtils.isEmpty(fileName) ? null : new File(fileName));
settings.setOutputFilePattern(outputFileText.getText());
switch (methodCombo.getSelectionIndex()) {
......
......@@ -18,37 +18,28 @@
package org.jkiss.dbeaver.ext.mysql.tools;
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.MySQLCatalog;
import org.jkiss.dbeaver.ext.mysql.tasks.MySQLScriptExecuteSettings;
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.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 MySQLScriptExecuteWizard extends AbstractScriptExecuteWizard<MySQLScriptExecuteSettings, MySQLCatalog, MySQLCatalog> {
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<MySQLScriptEx
super.addPages();
}
@Override
public void fillProcessParameters(List<String> 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<MySQLCatalog> getRunInfo() {
return getDatabaseObjects();
}
@Override
protected List<String> getCommandLine(MySQLCatalog arg) throws IOException {
List<String> 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);
}
}
}
......@@ -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(
......
......@@ -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 <SETTINGS extends AbstractNativeToolSettings<BASE_OBJECT>, BASE_OBJECT extends DBSObject, PROCESS_ARG> List<String> getMySQLToolCommandLine(
AbstractToolWizard<SETTINGS, BASE_OBJECT, PROCESS_ARG> toolWizard, PROCESS_ARG arg) throws IOException
{
java.util.List<String> 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;
}
}
......@@ -33,22 +33,22 @@ import org.jkiss.dbeaver.ui.UIUtils;
import org.jkiss.dbeaver.ui.dialogs.BaseAuthDialog;
public abstract class MySQLWizardPageSettings<WIZARD extends AbstractToolWizard> extends AbstractToolWizardPage<WIZARD>
abstract class MySQLWizardPageSettings<WIZARD extends AbstractToolWizard> extends AbstractToolWizardPage<WIZARD>
{
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<WIZARD extends AbstractToolWizard>
@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<WIZARD extends AbstractToolWizard>
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);
}
});
}
......
......@@ -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<MySQLExpo
super.startProcessHandler(monitor, task, settings, arg, processBuilder, process, log);
String outFileName = GeneralUtils.replaceVariables(settings.getOutputFilePattern(), name -> {
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<MySQLTableBase> 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);
......
......@@ -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<OracleScriptExecuteSettings, DBSObject, DBPDataSourceContainer> {
class OracleScriptExecuteWizard extends AbstractScriptExecuteWizard<OracleScriptExecuteSettings, DBSObject, OracleDataSource> {
private OracleScriptExecuteWizardPageSettings mainPage;
......@@ -85,61 +76,4 @@ class OracleScriptExecuteWizard extends AbstractScriptExecuteWizard<OracleScript
super.addPages();
}
@Override
public void fillProcessParameters(List<String> 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<DBPDataSourceContainer> getRunInfo() {
return Collections.singletonList(getSettings().getDataSourceContainer());
}
@Override
protected List<String> getCommandLine(DBPDataSourceContainer arg) throws IOException {
List<String> 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;
}
}
......@@ -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<Oracl
@Override
public boolean isPageComplete() {
return super.isPageComplete() && wizard.getInputFile() != null;
return super.isPageComplete() && wizard.getSettings().getInputFile() != null;
}
@Override
......@@ -63,8 +62,8 @@ class OracleScriptExecuteWizardPageSettings extends AbstractToolWizardPage<Oracl
@Override
public void activatePage() {
if (wizard.getInputFile() != null) {
inputFileText.setText(wizard.getInputFile().getAbsolutePath());
if (wizard.getSettings().getInputFile() != null) {
inputFileText.setText(wizard.getSettings().getInputFile());
}
updateState();
......@@ -82,7 +81,7 @@ class OracleScriptExecuteWizardPageSettings extends AbstractToolWizardPage<Oracl
OracleScriptExecuteSettings settings = wizard.getSettings();
List<DBSObject> 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());
}
......
......@@ -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<OracleScriptExecuteSettings, DBSObject, DBPDataSourceContainer> {
public class OracleScriptExecuteHandler extends AbstractNativeToolHandler<OracleScriptExecuteSettings, DBSObject, OracleDataSource> {
@Override
public Collection<DBPDataSourceContainer> getRunInfo(OracleScriptExecuteSettings settings) {
return Collections.singletonList(settings.getDataSourceContainer());
public Collection<OracleDataSource> getRunInfo(OracleScriptExecuteSettings settings) {
return Collections.singletonList((OracleDataSource) settings.getDataSourceContainer().getDataSource());
}
@Override
......@@ -45,7 +45,7 @@ public class OracleScriptExecuteHandler extends AbstractNativeToolHandler<Oracle
}
@Override
public void fillProcessParameters(OracleScriptExecuteSettings settings, DBPDataSourceContainer arg, List<String> cmd) throws IOException {
public void fillProcessParameters(OracleScriptExecuteSettings settings, OracleDataSource arg, List<String> 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<Oracle
}
@Override
protected List<String> getCommandLine(OracleScriptExecuteSettings settings, DBPDataSourceContainer arg) throws IOException {
protected List<String> getCommandLine(OracleScriptExecuteSettings settings, OracleDataSource arg) throws IOException {
List<String> cmd = new ArrayList<>();
fillProcessParameters(settings, arg, cmd);
DBPConnectionConfiguration conInfo = settings.getDataSourceContainer().getActualConnectionConfiguration();
......@@ -99,7 +99,7 @@ public class OracleScriptExecuteHandler extends AbstractNativeToolHandler<Oracle
}
@Override
protected void startProcessHandler(DBRProgressMonitor monitor, DBTTask task, OracleScriptExecuteSettings settings, DBPDataSourceContainer arg, ProcessBuilder processBuilder, Process process, Log log) throws IOException {
protected void startProcessHandler(DBRProgressMonitor monitor, DBTTask task, OracleScriptExecuteSettings settings, OracleDataSource arg, ProcessBuilder processBuilder, Process process, Log log) throws IOException {
super.startProcessHandler(monitor, task, settings, arg, processBuilder, process, log);
new BinaryFileTransformerJob(monitor, task, new File(settings.getInputFile()), process.getOutputStream(), log).start();
}
......
......@@ -30,7 +30,7 @@ public class OracleScriptExecuteSettings extends AbstractScriptExecuteSettings<D
private static final Log log = Log.getLog(OracleScriptExecuteSettings.class);
@Override
protected DBPNativeClientLocation findNativeClientHome(String clientHomeId) {
public DBPNativeClientLocation findNativeClientHome(String clientHomeId) {
return OCIUtils.getOraHome(clientHomeId);
}
......
......@@ -17,64 +17,25 @@
package org.jkiss.dbeaver.ext.postgresql.tools;
import org.eclipse.ui.IExportWizard;
import org.jkiss.dbeaver.ext.postgresql.PostgreConstants;
import org.jkiss.dbeaver.ext.postgresql.PostgreDataSourceProvider;
import org.jkiss.dbeaver.ext.postgresql.PostgreServerHome;
import org.jkiss.dbeaver.ext.postgresql.tasks.PostgreBackupRestoreSettings;
import org.jkiss.dbeaver.ext.postgresql.tasks.PostgreDatabaseBackupRestoreInfo;
import org.jkiss.dbeaver.model.struct.DBSObject;
import org.jkiss.dbeaver.model.task.DBTTask;
import org.jkiss.dbeaver.tasks.ui.nativetool.AbstractImportExportWizard;
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.List;
abstract class PostgreBackupRestoreWizard<SETTINGS extends PostgreBackupRestoreSettings, PROCESS_ARG extends PostgreDatabaseBackupRestoreInfo>
extends AbstractImportExportWizard<SETTINGS, PROCESS_ARG> implements IExportWizard {
public PostgreBackupRestoreWizard(DBTTask task) {
PostgreBackupRestoreWizard(DBTTask task) {
super(task);
}
public PostgreBackupRestoreWizard(Collection<DBSObject> objects, String title) {
PostgreBackupRestoreWizard(Collection<DBSObject> objects, String title) {
super(objects, title);
}
@Override
public void fillProcessParameters(List<String> 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<String> getCommandLine(PROCESS_ARG arg) throws IOException
{
return PostgreToolScript.getPostgreToolCommandLine(this, arg);
}
@Override
public boolean isVerbose()
{
......
......@@ -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<PostgreDatabaseBackupSettings, PostgreDatabaseBackupInfo> implements IExportWizard {
......@@ -113,108 +104,9 @@ class PostgreBackupWizard extends PostgreBackupRestoreWizard<PostgreDatabaseBack
UIUtils.launchProgram(getSettings().getOutputFolder().getAbsolutePath());
}
@Override
public void fillProcessParameters(List<String> 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<String> getCommandLine(PostgreDatabaseBackupInfo arg) throws IOException {
List<String> 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<PostgreDatabaseBackupInfo> 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<PostgreTableBase> 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();
}
}
......@@ -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<PostgreBackupWizard> {
class PostgreBackupWizardPageSettings extends PostgreToolWizardPageSettings<PostgreBackupWizard> {
private Text outputFolderText;
private Text outputFileText;
......@@ -56,7 +56,7 @@ class PostgreBackupWizardPageSettings extends PostgreWizardPageSettings<PostgreB
@Override
public boolean isPageComplete()
{
return super.isPageComplete() && wizard.getOutputFolder() != null;
return super.isPageComplete() && wizard.getSettings().getOutputFolder() != null;
}
@Override
......@@ -121,27 +121,27 @@ class PostgreBackupWizardPageSettings extends PostgreWizardPageSettings<PostgreB
outputFolderText = DialogUtils.createOutputFolderChooser(
outputGroup,
PostgreMessages.wizard_backup_page_setting_label_output_folder,
wizard.getOutputFolder() != null ? wizard.getOutputFolder().getAbsolutePath() : null,
wizard.getSettings().getOutputFolder() != null ? wizard.getSettings().getOutputFolder().getAbsolutePath() : null,
e -> 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<PostgreB
super.saveState();
String fileName = outputFolderText.getText();
wizard.setOutputFolder(CommonUtils.isEmpty(fileName) ? null : new File(fileName));
wizard.getSettings().setOutputFolder(CommonUtils.isEmpty(fileName) ? null : new File(fileName));
wizard.getSettings().setOutputFilePattern(outputFileText.getText());
wizard.getSettings().setFormat(PostgreDatabaseBackupSettings.ExportFormat.values()[formatCombo.getSelectionIndex()]);
......
......@@ -23,21 +23,15 @@ import org.eclipse.ui.IExportWizard;
import org.eclipse.ui.IWorkbench;
import org.jkiss.dbeaver.ext.postgresql.PostgreMessages;
import org.jkiss.dbeaver.ext.postgresql.model.PostgreDatabase;
import org.jkiss.dbeaver.ext.postgresql.tasks.PostgreBackupRestoreSettings;
import org.jkiss.dbeaver.ext.postgresql.tasks.PostgreDatabaseRestoreInfo;
import org.jkiss.dbeaver.ext.postgresql.tasks.PostgreDatabaseRestoreSettings;
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.task.DBTTask;
import org.jkiss.dbeaver.registry.task.TaskPreferenceStore;
import org.jkiss.dbeaver.ui.UIUtils;
import java.io.File;
import java.io.IOException;
import java.util.Collection;
import java.util.Collections;
import java.util.List;
import java.util.Map;
class PostgreRestoreWizard extends PostgreBackupRestoreWizard<PostgreDatabaseRestoreSettings, PostgreDatabaseRestoreInfo> implements IExportWizard {
......@@ -108,46 +102,9 @@ class PostgreRestoreWizard extends PostgreBackupRestoreWizard<PostgreDatabaseRes
SWT.ICON_INFORMATION);
}
@Override
public void fillProcessParameters(List<String> cmd, PostgreDatabaseRestoreInfo arg) throws IOException {
super.fillProcessParameters(cmd, arg);
if (getSettings().isCleanFirst()) {
cmd.add("-c");
}
}
@Override
protected List<String> getCommandLine(PostgreDatabaseRestoreInfo arg) throws IOException {
List<String> 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<PostgreDatabaseRestoreInfo> 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();
}
}
}
......@@ -27,7 +27,7 @@ import org.jkiss.dbeaver.ui.controls.TextWithOpenFile;
import org.jkiss.utils.CommonUtils;
class PostgreRestoreWizardPageSettings extends PostgreWizardPageSettings<PostgreRestoreWizard> {
class PostgreRestoreWizardPageSettings extends PostgreToolWizardPageSettings<PostgreRestoreWizard> {
private TextWithOpenFile inputFileText;
private Combo formatCombo;
......
......@@ -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<PostgreScriptExecuteSettings, DBSObject, PostgreDatabase> {
......@@ -88,37 +80,4 @@ class PostgreScriptExecuteWizard extends AbstractScriptExecuteWizard<PostgreScri
super.addPages();
}
@Override
public void fillProcessParameters(List<String> 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<PostgreDatabase> getRunInfo() {
return Collections.singletonList(getSettings().getDatabase());
}
@Override
protected List<String> getCommandLine(PostgreDatabase arg) throws IOException {
List<String> cmd = PostgreToolScript.getPostgreToolCommandLine(this, arg);
cmd.add(arg.getName());
return cmd;
}
}
......@@ -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<PostgreScriptExecuteWizard> {
public class PostgreScriptExecuteWizardPageSettings extends PostgreToolWizardPageSettings<PostgreScriptExecuteWizard> {
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());
}
......
......@@ -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 <SETTINGS extends AbstractNativeToolSettings<BASE_OBJECT>, BASE_OBJECT extends DBSObject, PROCESS_ARG> List<String> getPostgreToolCommandLine(
AbstractToolWizard<SETTINGS, BASE_OBJECT, PROCESS_ARG> toolWizard, PROCESS_ARG arg) throws IOException
{
java.util.List<String> 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;
}
}
......@@ -37,10 +37,10 @@ import org.jkiss.dbeaver.ui.UIUtils;
import org.jkiss.dbeaver.ui.dialogs.BaseAuthDialog;
public abstract class PostgreWizardPageSettings<WIZARD extends AbstractToolWizard> extends AbstractToolWizardPage<WIZARD>
public abstract class PostgreToolWizardPageSettings<WIZARD extends AbstractToolWizard> extends AbstractToolWizardPage<WIZARD>
{
public PostgreWizardPageSettings(WIZARD wizard, String title)
public PostgreToolWizardPageSettings(WIZARD wizard, String title)
{
super(wizard, title);
}
......@@ -49,7 +49,7 @@ public abstract class PostgreWizardPageSettings<WIZARD extends AbstractToolWizar
{
try {
final SecuredPasswordEncrypter encrypter = new SecuredPasswordEncrypter();
final DBPConnectionConfiguration connectionInfo = wizard.getConnectionInfo();
final DBPConnectionConfiguration connectionInfo = wizard.getSettings().getDataSourceContainer().getActualConnectionConfiguration();
final String authProperty = DBConstants.INTERNAL_PROP_PREFIX + "-auth-" + wizard.getObjectsName() + "@";
String authUser = null;
String authPassword = null;
......@@ -69,7 +69,7 @@ public abstract class PostgreWizardPageSettings<WIZARD extends AbstractToolWizar
Group securityGroup = UIUtils.createControlGroup(
parent, PostgreMessages.wizard_backup_page_setting_group_security, 2, GridData.HORIZONTAL_ALIGN_BEGINNING, 0);
Label infoLabel = new Label(securityGroup, SWT.NONE);
infoLabel.setText(NLS.bind(PostgreMessages.wizard_backup_page_setting_group_security_label_info, wizard.getConnectionInfo().getUserName(),
infoLabel.setText(NLS.bind(PostgreMessages.wizard_backup_page_setting_group_security_label_info, connectionInfo.getUserName(),
wizard.getObjectsName()));
GridData gd = new GridData(GridData.FILL_HORIZONTAL);
gd.horizontalSpan = 2;
......@@ -81,21 +81,12 @@ public abstract class PostgreWizardPageSettings<WIZARD extends AbstractToolWizar
public void widgetSelected(SelectionEvent e)
{
BaseAuthDialog authDialog = new BaseAuthDialog(getShell(), PostgreMessages.wizard_backup_page_setting_group_security_btn_authentication, false, true);
authDialog.setUserName(wizard.getToolUserName());
authDialog.setUserPassword(wizard.getToolUserPassword());
authDialog.setUserName(wizard.getSettings().getToolUserName());
authDialog.setUserPassword(wizard.getSettings().getToolUserPassword());
authDialog.setSavePassword(savePassword);
if (authDialog.open() == IDialogConstants.OK_ID) {
wizard.setToolUserName(authDialog.getUserName());
wizard.setToolUserPassword(authDialog.getUserPassword());
if (authDialog.isSavePassword()) {
try {
connectionInfo.setProviderProperty(
authProperty,
encrypter.encrypt(wizard.getToolUserName() + ':' + wizard.getToolUserPassword()));
} catch (EncryptionException e1) {
// Never be here
}
}
wizard.getSettings().setToolUserName(authDialog.getUserName());
wizard.getSettings().setToolUserPassword(authDialog.getUserPassword());
}
}
});
......@@ -107,8 +98,8 @@ public abstract class PostgreWizardPageSettings<WIZARD extends AbstractToolWizar
public void widgetSelected(SelectionEvent e)
{
connectionInfo.getProviderProperties().remove(authProperty);
wizard.setToolUserName(connectionInfo.getUserName());
wizard.setToolUserPassword(connectionInfo.getUserPassword());
wizard.getSettings().setToolUserName(null);
wizard.getSettings().setToolUserPassword(null);
}
});
} catch (EncryptionException e) {
......
......@@ -8,6 +8,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;
......@@ -126,20 +127,20 @@ public class PostgreDatabaseBackupHandler extends PostgreNativeToolHandler<Postg
String outFileName = GeneralUtils.replaceVariables(settings.getOutputFilePattern(), name -> {
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<PostgreTableBase> 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);
......
......@@ -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) {
......
......@@ -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<SETTINGS extends AbstractImportExportSettings<DBSObject>, PROCESS_ARG>
extends AbstractToolWizard<SETTINGS, DBSObject, PROCESS_ARG> 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<DBSObject> objects, String title) {
super(objects, title);
}
......@@ -52,21 +44,6 @@ public abstract class AbstractImportExportWizard<SETTINGS extends AbstractImport
return false;
}
public File getOutputFolder() {
return getSettings().getOutputFolder();
}
public void setOutputFolder(File outputFolder) {
if (outputFolder != null) {
DialogUtils.setCurDialogFolder(outputFolder.getAbsolutePath());
}
this.getSettings().setOutputFolder(outputFolder);
}
public String getOutputFilePattern() {
return getSettings().getOutputFilePattern();
}
@Override
public void init(IWorkbench workbench, IStructuredSelection selection) {
setWindowTitle(taskTitle);
......@@ -103,11 +80,4 @@ public abstract class AbstractImportExportWizard<SETTINGS extends AbstractImport
return true;
}
@Override
protected void startProcessHandler(DBRProgressMonitor monitor, final PROCESS_ARG arg, ProcessBuilder processBuilder, Process process) {
logPage.startLogReader(
processBuilder,
process.getErrorStream());
}
}
......@@ -22,15 +22,12 @@ import org.eclipse.osgi.util.NLS;
import org.eclipse.swt.SWT;
import org.eclipse.ui.IImportWizard;
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.AbstractScriptExecuteSettings;
import org.jkiss.dbeaver.tasks.ui.nativetool.internal.TaskNativeUIMessages;
import org.jkiss.dbeaver.ui.UIUtils;
import org.jkiss.dbeaver.utils.GeneralUtils;
import java.io.File;
import java.util.Collection;
public abstract class AbstractScriptExecuteWizard<SETTINGS extends AbstractScriptExecuteSettings<BASE_OBJECT>, BASE_OBJECT extends DBSObject, PROCESS_ARG>
......@@ -52,15 +49,6 @@ public abstract class AbstractScriptExecuteWizard<SETTINGS extends AbstractScrip
return false;
}
public File getInputFile()
{
return new File(getSettings().getInputFile());
}
public void setInputFile(File inputFile) {
getSettings().setInputFile(inputFile == null ? null : inputFile.getAbsolutePath());
}
@Override
public void init(IWorkbench workbench, IStructuredSelection selection) {
setWindowTitle(taskTitle);
......@@ -69,7 +57,8 @@ public abstract class AbstractScriptExecuteWizard<SETTINGS extends AbstractScrip
@Override
public void addPages() {
//super.addPages(); // Do not add base wizard pages. They can be added explicitly thru addTaskConfigPages
// Do not add base wizard pages. They can be added explicitly thru addTaskConfigPages
//super.addPages();
addPage(logPage);
}
......@@ -81,27 +70,4 @@ public abstract class AbstractScriptExecuteWizard<SETTINGS extends AbstractScrip
SWT.ICON_INFORMATION);
}
@Override
protected void startProcessHandler(DBRProgressMonitor monitor, PROCESS_ARG arg, ProcessBuilder processBuilder, Process process)
{
logPage.startLogReader(
processBuilder,
process.getInputStream());
new TextFileTransformerJob(monitor, getInputFile(), process.getOutputStream(), getInputCharset(), getOutputCharset()).start();
}
@Override
protected boolean isMergeProcessStreams()
{
return true;
}
protected String getInputCharset() {
return GeneralUtils.UTF8_ENCODING;
}
protected String getOutputCharset() {
return GeneralUtils.UTF8_ENCODING;
}
}
......@@ -17,7 +17,6 @@
*/
package org.jkiss.dbeaver.tasks.ui.nativetool;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.jface.wizard.WizardPage;
import org.eclipse.osgi.util.NLS;
......@@ -27,35 +26,24 @@ import org.eclipse.swt.widgets.Display;
import org.jkiss.code.NotNull;
import org.jkiss.dbeaver.DBException;
import org.jkiss.dbeaver.Log;
import org.jkiss.dbeaver.model.DBPDataSourceContainer;
import org.jkiss.dbeaver.model.DBUtils;
import org.jkiss.dbeaver.model.app.DBPProject;
import org.jkiss.dbeaver.model.connection.DBPConnectionConfiguration;
import org.jkiss.dbeaver.model.connection.DBPNativeClientLocation;
import org.jkiss.dbeaver.model.connection.LocalNativeClientLocation;
import org.jkiss.dbeaver.model.navigator.DBNDatabaseNode;
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.model.task.DBTTask;
import org.jkiss.dbeaver.model.task.DBTTaskHandler;
import org.jkiss.dbeaver.registry.task.TaskPreferenceStore;
import org.jkiss.dbeaver.runtime.DBWorkbench;
import org.jkiss.dbeaver.runtime.ProgressStreamReader;
import org.jkiss.dbeaver.tasks.nativetool.AbstractNativeToolSettings;
import org.jkiss.dbeaver.tasks.ui.nativetool.internal.TaskNativeUIMessages;
import org.jkiss.dbeaver.tasks.ui.wizard.TaskConfigurationWizard;
import org.jkiss.dbeaver.tasks.ui.wizard.TaskWizardExecutor;
import org.jkiss.dbeaver.ui.UIUtils;
import org.jkiss.utils.CommonUtils;
import org.jkiss.utils.IOUtils;
import java.io.*;
import java.lang.reflect.InvocationTargetException;
import java.text.NumberFormat;
import java.util.Collection;
import java.util.Collections;
import java.util.List;
/**
......@@ -135,60 +123,6 @@ public abstract class AbstractToolWizard<SETTINGS extends AbstractNativeToolSett
return false;
}
protected boolean needsModelRefresh() {
return true;
}
public List<BASE_OBJECT> 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<PROCESS_ARG> getRunInfo();
public Collection<BASE_OBJECT> 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<SETTINGS extends AbstractNativeToolSett
updateErrorMessage();
}
public void updateErrorMessage() {
void updateErrorMessage() {
WizardPage currentPage = (WizardPage) getStartingPage();
if (isNativeClientHomeRequired()) {
String clientHomeId = getDataSourceContainer().getConnectionConfiguration().getClientHomeId();
List<DBPNativeClientLocation> nativeClientLocations = getDataSourceContainer().getDriver().getNativeClientLocations();
String clientHomeId = getSettings().getDataSourceContainer().getConnectionConfiguration().getClientHomeId();
List<DBPNativeClientLocation> 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<SETTINGS extends AbstractNativeToolSett
} else {
DBPNativeClientLocation clientHome = DBUtils.findObject(nativeClientLocations, clientHomeId);
if (clientHome == null) {
clientHome = findNativeClientHome(clientHomeId);
clientHome = getSettings().findNativeClientHome(clientHomeId);
}
if (clientHome == null) {
// Make local client home from location
......@@ -268,60 +202,30 @@ public abstract class AbstractToolWizard<SETTINGS extends AbstractNativeToolSett
return false;
}
if (isRunTaskOnFinish()) {
if (getCurrentTask() != null) {
return super.performFinish();
}
if (getContainer().getCurrentPage() != logPage) {
getContainer().showPage(logPage);
}
showLogPage();
if (getCurrentTask() == null) {
try {
DBTTaskHandler handler = null;
try {
handler = getTaskType().createHandler();
} catch (Throwable e) {
// No handler
}
if (handler != null) {
// Execute directly - without task serialize/deserialize
// We need it because some data producers cannot be serialized properly (e.g. ResultSetDatacontainer - see #7342)
DBTTask temporaryTask = getProject().getTaskManager().createTemporaryTask(getTaskType(), getTaskType().getName());
saveConfigurationToTask(temporaryTask);
TaskWizardExecutor executor = new TaskWizardExecutor(getRunnableContext(), temporaryTask, log, logPage.getLogWriter());
executor.executeTask();
return false;
}
} catch (Exception e) {
DBWorkbench.getPlatformUI().showError(e.getMessage(), "Error running task", e);
return false;
}
}
long startTime = System.currentTimeMillis();
try {
UIUtils.run(getContainer(), true, true, new ToolRunner());
} catch (InterruptedException ex) {
UIUtils.showMessageBox(getShell(), taskTitle, NLS.bind(TaskNativeUIMessages.tools_wizard_error_task_canceled, taskTitle, getObjectsName()), SWT.ICON_ERROR);
// Execute directly - without task serialize/deserialize
// We need it because some data producers cannot be serialized properly (e.g. ResultSetDatacontainer - see #7342)
DBTTask temporaryTask = getProject().getTaskManager().createTemporaryTask(getTaskType(), getTaskType().getName());
saveConfigurationToTask(temporaryTask);
TaskWizardExecutor executor = new TaskWizardExecutor(getRunnableContext(), temporaryTask, log, logPage.getLogWriter());
executor.executeTask();
return false;
} catch (InvocationTargetException ex) {
DBWorkbench.getPlatformUI().showError(
NLS.bind(TaskNativeUIMessages.tools_wizard_error_task_error_title, taskTitle),
TaskNativeUIMessages.tools_wizard_error_task_error_message + taskTitle,
ex.getTargetException());
} catch (Exception e) {
DBWorkbench.getPlatformUI().showError(e.getMessage(), "Error running task", e);
return false;
} finally {
getContainer().updateButtons();
}
long workTime = System.currentTimeMillis() - startTime;
notifyToolFinish(taskTitle + " finished", workTime);
if (isSuccess) {
onSuccess(workTime);
} else {
onError();
}
protected void showLogPage() {
if (getContainer().getCurrentPage() != logPage) {
getContainer().showPage(logPage);
}
return false;
}
protected void notifyToolFinish(String toolName, long workTime) {
......@@ -342,62 +246,10 @@ public abstract class AbstractToolWizard<SETTINGS extends AbstractNativeToolSett
return str.toString();
}
public boolean executeProcess(DBRProgressMonitor monitor, PROCESS_ARG arg)
throws IOException, CoreException, InterruptedException {
monitor.beginTask(getWindowTitle(), 1);
try {
final List<String> 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<SETTINGS extends AbstractNativeToolSett
SWT.ICON_ERROR);
}
abstract protected java.util.List<String> getCommandLine(PROCESS_ARG arg) throws IOException;
public abstract void fillProcessParameters(List<String> 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();
}
}
}
}
......@@ -44,7 +44,7 @@ public abstract class AbstractToolWizardPage<WIZARD extends AbstractToolWizard>
@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<WIZARD extends AbstractToolWizard>
}
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,
......
......@@ -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) {
......
......@@ -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(' ');
......
......@@ -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<SETTINGS extends AbstractNativeToolSettings<BASE_OBJECT>, 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<SETTINGS extends AbstractNativeT
return isSuccess;
}
public boolean isSecureString(SETTINGS 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);
}
public static abstract class DumpJob extends Thread {
protected DBRProgressMonitor monitor;
protected InputStream input;
......@@ -474,7 +460,7 @@ public abstract class AbstractNativeToolHandler<SETTINGS extends AbstractNativeT
// Dump command line
StringBuilder cmdString = new StringBuilder();
for (String cmd : command) {
if (isSecureString(settings, cmd)) {
if (NativeToolUtils.isSecureString(settings, cmd)) {
cmd = "******";
}
if (cmdString.length() > 0) cmdString.append(' ');
......
......@@ -45,7 +45,7 @@ public abstract class AbstractNativeToolSettings<BASE_OBJECT extends DBSObject>
private String toolUserPassword;
private String extraCommandArgs;
protected DBPNativeClientLocation findNativeClientHome(String clientHomeId) {
public DBPNativeClientLocation findNativeClientHome(String clientHomeId) {
return null;
}
......
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);
}
}
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册