提交 9c1a203f 编写于 作者: S Serge Rider

#7444 MySQL restore + scritp execute tasks


Former-commit-id: f8f83896
上级 3affb30e
......@@ -28,25 +28,28 @@ 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.*;
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)
{
public 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) {
super(new ArrayList<>(), isImport ? MySQLUIMessages.tools_script_execute_wizard_db_import : MySQLUIMessages.tools_script_execute_wizard_execute_script);
super(task);
this.getSettings().setImport(isImport);
}
......@@ -57,22 +60,20 @@ class MySQLScriptExecuteWizard extends AbstractScriptExecuteWizard<MySQLScriptEx
@Override
public void saveTaskState(DBRRunnableContext runnableContext, Map<String, Object> state) {
// TODO: implement
mainPage.saveState();
getSettings().saveSettings(runnableContext, new TaskPreferenceStore(state));
}
public MySQLScriptExecuteSettings.LogLevel getLogLevel()
{
public MySQLScriptExecuteSettings.LogLevel getLogLevel() {
return getSettings().getLogLevel();
}
public boolean isImport()
{
public boolean isImport() {
return getSettings().isImport();
}
@Override
public boolean isVerbose()
{
public boolean isVerbose() {
return getSettings().isVerbose();
}
......@@ -82,15 +83,14 @@ class MySQLScriptExecuteWizard extends AbstractScriptExecuteWizard<MySQLScriptEx
}
@Override
public void addPages()
{
public void addPages() {
addTaskConfigPages();
addPage(mainPage);
super.addPages();
}
@Override
public void fillProcessParameters(List<String> cmd, MySQLCatalog arg) throws IOException
{
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) {
......@@ -110,8 +110,7 @@ class MySQLScriptExecuteWizard extends AbstractScriptExecuteWizard<MySQLScriptEx
}
@Override
public MySQLServerHome findNativeClientHome(String clientHomeId)
{
public MySQLServerHome findNativeClientHome(String clientHomeId) {
return MySQLDataSourceProvider.getServerHome(clientHomeId);
}
......@@ -121,8 +120,7 @@ class MySQLScriptExecuteWizard extends AbstractScriptExecuteWizard<MySQLScriptEx
}
@Override
protected List<String> getCommandLine(MySQLCatalog arg) throws IOException
{
protected List<String> getCommandLine(MySQLCatalog arg) throws IOException {
List<String> cmd = MySQLToolScript.getMySQLToolCommandLine(this, arg);
cmd.add(arg.getName());
return cmd;
......@@ -143,4 +141,9 @@ class MySQLScriptExecuteWizard extends AbstractScriptExecuteWizard<MySQLScriptEx
}
}
@Override
public boolean isRunTaskOnFinish() {
return getCurrentTask() != null;
}
}
......@@ -86,11 +86,12 @@ public class MySQLScriptExecuteWizardPageSettings extends MySQLWizardPageSetting
});
if (wizard.getInputFile() != null) {
inputFileText.setText(wizard.getInputFile().getName());
inputFileText.setText(wizard.getInputFile().getAbsolutePath());
}
Group settingsGroup = UIUtils.createControlGroup(
composite, MySQLUIMessages.tools_script_execute_wizard_page_settings_group_settings, 2, GridData.HORIZONTAL_ALIGN_BEGINNING, 0);
settingsGroup.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
logLevelCombo = UIUtils.createLabelCombo(
settingsGroup, MySQLUIMessages.tools_script_execute_wizard_page_settings_label_log_level, SWT.DROP_DOWN | SWT.READ_ONLY);
for (MySQLScriptExecuteSettings.LogLevel logLevel : MySQLScriptExecuteSettings.LogLevel.values()) {
......@@ -101,16 +102,18 @@ public class MySQLScriptExecuteWizardPageSettings extends MySQLWizardPageSetting
@Override
public void widgetSelected(SelectionEvent e)
{
wizard.getSettings().setLogLevel(MySQLScriptExecuteSettings.LogLevel.valueOf(logLevelCombo.getText()));
wizard.getSettings().setLogLevel(CommonUtils.valueOf(MySQLScriptExecuteSettings.LogLevel.class, logLevelCombo.getText()));
}
});
createExtraArgsInput(settingsGroup);
Composite extraGroup = UIUtils.createComposite(composite, 2);
createSecurityGroup(extraGroup);
Group taskGroup = UIUtils.createControlGroup(
extraGroup, "Task", 2, GridData.HORIZONTAL_ALIGN_BEGINNING | GridData.VERTICAL_ALIGN_BEGINNING, 0);
wizard.createTaskSaveButtons(taskGroup, false, 1);
{
Group taskGroup = UIUtils.createControlGroup(
extraGroup, "Task", 2, GridData.HORIZONTAL_ALIGN_BEGINNING | GridData.VERTICAL_ALIGN_BEGINNING, 0);
wizard.createTaskSaveButtons(taskGroup, false, 1);
}
setControl(composite);
......@@ -127,11 +130,20 @@ public class MySQLScriptExecuteWizardPageSettings extends MySQLWizardPageSetting
}
@Override
protected void updateState()
{
protected void saveState() {
super.saveState();
MySQLScriptExecuteSettings settings = wizard.getSettings();
String fileName = inputFileText.getText();
wizard.setInputFile(CommonUtils.isEmpty(fileName) ? null : new File(fileName));
settings.setInputFile(fileName);
settings.setLogLevel(CommonUtils.valueOf(MySQLScriptExecuteSettings.LogLevel.class, logLevelCombo.getText()));
}
@Override
protected void updateState()
{
saveState();
getContainer().updateButtons();
}
......
......@@ -34,7 +34,7 @@ import org.jkiss.dbeaver.model.task.DBTTaskConfigPanel;
import org.jkiss.dbeaver.model.task.DBTTaskConfigurator;
import org.jkiss.dbeaver.model.task.DBTTaskType;
import org.jkiss.dbeaver.runtime.DBWorkbench;
import org.jkiss.dbeaver.tasks.ui.nativetool.AbstractImportExportWizard;
import org.jkiss.dbeaver.tasks.ui.nativetool.AbstractToolWizard;
import org.jkiss.dbeaver.ui.UIUtils;
import org.jkiss.dbeaver.ui.dialogs.connection.ClientHomesSelector;
import org.jkiss.dbeaver.ui.navigator.database.DatabaseObjectsSelectorPanel;
......@@ -74,7 +74,7 @@ public class MySQLTaskConfigurator implements DBTTaskConfigurator {
private final DBRRunnableContext runnableContext;
private final DBTTaskType taskType;
private AbstractImportExportWizard<?, ?> ieWizard;
private AbstractToolWizard ieWizard;
private ClientHomesSelector homesSelector;
private MySQLCatalog selectedCatalog;
private DBPDataSource curDataSource;
......@@ -87,7 +87,7 @@ public class MySQLTaskConfigurator implements DBTTaskConfigurator {
@Override
public void createControl(Object parent, Object wizard, Runnable propertyChangeListener) {
ieWizard = (AbstractImportExportWizard) wizard;
ieWizard = (AbstractToolWizard) wizard;
{
Group databasesGroup = UIUtils.createControlGroup((Composite) parent, "Select target database", 1, GridData.FILL_BOTH, 0);
......@@ -166,9 +166,8 @@ public class MySQLTaskConfigurator implements DBTTaskConfigurator {
if (selectorPanel != null && selectedCatalog != null) {
try {
DBNDatabaseNode[] catalogNode = new DBNDatabaseNode[1];
ieWizard.getRunnableContext().run(true, true, monitor -> {
catalogNode[0] = DBNUtils.getNodeByObject(monitor, selectedCatalog, false);
});
ieWizard.getRunnableContext().run(true, true, monitor ->
catalogNode[0] = DBNUtils.getNodeByObject(monitor, selectedCatalog, false));
if (catalogNode[0] != null) {
List<DBNNode> selCatalogs = Collections.singletonList(catalogNode[0]);
//selectorPanel.checkNodes(selCatalogs, true);
......
......@@ -347,18 +347,16 @@
<extension point="org.jkiss.dbeaver.task">
<category id="mysql" name="MySQL" description="MySQL database task"/>
<task id="mysqlDatabaseBackup" name="Database export" description="Database export task" icon="platform:/plugin/org.jkiss.dbeaver.ui/icons/file/export.png" type="mysql" handler="org.jkiss.dbeaver.ext.mysql.tasks.MySQLDatabaseExportHandler">
<task id="mysqlDatabaseBackup" name="MySQL dump" description="MySQL database export task" icon="platform:/plugin/org.jkiss.dbeaver.ui/icons/file/export.png" type="mysql" handler="org.jkiss.dbeaver.ext.mysql.tasks.MySQLDatabaseExportHandler">
<objectType name="org.jkiss.dbeaver.ext.mysql.model.MySQLCatalog"/>
<objectType name="org.jkiss.dbeaver.ext.mysql.model.MySQLTableBase"/>
</task>
<!--
<task id="mysqlDatabaseRestore" name="Database import" description="Database import task" icon="platform:/plugin/org.jkiss.dbeaver.ui/icons/file/import.png" type="mysql" handler="org.jkiss.dbeaver.ext.mysql.tasks.DatabaseImportHandler">
<task id="mysqlDatabaseRestore" name="MySQL restore" description="MySQL database import task" icon="platform:/plugin/org.jkiss.dbeaver.ui/icons/file/import.png" type="mysql" handler="org.jkiss.dbeaver.ext.mysql.tasks.MySQLScriptExecuteHandler">
<objectType name="org.jkiss.dbeaver.ext.mysql.model.MySQLCatalog"/>
</task>
<task id="mysqlScriptExecute" name="SQL script" description="SQL script execute" icon="platform:/plugin/org.jkiss.dbeaver.ui/icons/sql/sql_exec.png" type="mysql" handler="org.jkiss.dbeaver.ext.mysql.tasks.MySQLScriptExecuteHandler">
<task id="mysqlScriptExecute" name="MySQL script" description="MySQL script execute" icon="platform:/plugin/org.jkiss.dbeaver.ui/icons/sql/sql_script.png" type="mysql" handler="org.jkiss.dbeaver.ext.mysql.tasks.MySQLScriptExecuteHandler">
<objectType name="org.jkiss.dbeaver.model.struct.DBSDataManipulator"/>
</task>
-->
</extension>
</plugin>
......@@ -119,7 +119,7 @@ public class MySQLDatabaseExportHandler extends MySQLNativeToolHandler<MySQLExpo
}
@Override
protected void startProcessHandler(DBRProgressMonitor monitor, DBTTask task, MySQLExportSettings settings, final MySQLDatabaseExportInfo arg, ProcessBuilder processBuilder, Process process, Log log) {
protected void startProcessHandler(DBRProgressMonitor monitor, DBTTask task, MySQLExportSettings settings, final MySQLDatabaseExportInfo arg, ProcessBuilder processBuilder, Process process, Log log) throws IOException {
super.startProcessHandler(monitor, task, settings, arg, processBuilder, process, log);
String outFileName = GeneralUtils.replaceVariables(settings.getOutputFilePattern(), name -> {
switch (name) {
......
......@@ -11,7 +11,8 @@ import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
public abstract class MySQLNativeToolHandler<SETTINGS extends AbstractNativeToolSettings<BASE_OBJECT>, BASE_OBJECT extends DBSObject, PROCESS_ARG> extends AbstractNativeToolHandler<SETTINGS, BASE_OBJECT, PROCESS_ARG> {
public abstract class MySQLNativeToolHandler<SETTINGS extends AbstractNativeToolSettings<BASE_OBJECT>, BASE_OBJECT extends DBSObject, PROCESS_ARG>
extends AbstractNativeToolHandler<SETTINGS, BASE_OBJECT, PROCESS_ARG> {
@Override
protected void setupProcessParameters(SETTINGS settings, PROCESS_ARG arg, ProcessBuilder process) {
......
......@@ -61,16 +61,21 @@ public class MySQLScriptExecuteHandler extends MySQLNativeToolHandler<MySQLScrip
}
@Override
protected void startProcessHandler(DBRProgressMonitor monitor, DBTTask task, MySQLScriptExecuteSettings settings, MySQLCatalog arg, ProcessBuilder processBuilder, Process process, Log log) {
protected void startProcessHandler(DBRProgressMonitor monitor, DBTTask task, MySQLScriptExecuteSettings settings, MySQLCatalog arg, ProcessBuilder processBuilder, Process process, Log log) throws IOException {
File inputFile = new File(settings.getInputFile());
if (!inputFile.exists()) {
throw new IOException("File '" + inputFile.getAbsolutePath() + "' doesn't exist");
}
if (settings.isImport()) {
super.startProcessHandler(monitor, task, settings, arg, processBuilder, process, log);
new BinaryFileTransformerJob(
monitor,
task,
new File(settings.getInputFile()),
inputFile,
process.getOutputStream(), log).start();
} else {
super.startProcessHandler(monitor, task, settings, arg, processBuilder, process, log);
new TextFileTransformerJob(monitor, task, inputFile, process.getOutputStream(), getInputCharset(), getOutputCharset(), log).start();
}
}
......
......@@ -24,6 +24,7 @@ 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;
......@@ -35,10 +36,14 @@ import java.util.Collection;
public abstract class AbstractScriptExecuteWizard<SETTINGS extends AbstractScriptExecuteSettings<BASE_OBJECT>, BASE_OBJECT extends DBSObject, PROCESS_ARG>
extends AbstractToolWizard<SETTINGS, BASE_OBJECT, PROCESS_ARG> implements IImportWizard
{
public AbstractScriptExecuteWizard(Collection<BASE_OBJECT> dbObject, String task) {
protected AbstractScriptExecuteWizard(Collection<BASE_OBJECT> dbObject, String task) {
super(dbObject, task);
}
protected AbstractScriptExecuteWizard(DBTTask task) {
super(task);
}
@Override
protected abstract SETTINGS createSettings();
......@@ -54,7 +59,7 @@ public abstract class AbstractScriptExecuteWizard<SETTINGS extends AbstractScrip
public void setInputFile(File inputFile)
{
getSettings().setInputFile(inputFile.getAbsolutePath());
getSettings().setInputFile(inputFile == null ? null : inputFile.getAbsolutePath());
}
@Override
......@@ -65,7 +70,7 @@ public abstract class AbstractScriptExecuteWizard<SETTINGS extends AbstractScrip
@Override
public void addPages() {
super.addPages();
//super.addPages(); // Do not add base wizard pages. They can be added explicitly thru addTaskConfigPages
addPage(logPage);
}
......
......@@ -63,7 +63,14 @@ public abstract class AbstractToolWizardPage<WIZARD extends AbstractToolWizard>
}
protected void saveState() {
wizard.getSettings().setExtraCommandArgs(extraCommandArgsText.getText());
}
protected void updateState() {
saveState();
setPageComplete(true);
}
......
......@@ -53,11 +53,16 @@ public abstract class AbstractNativeToolHandler<SETTINGS extends AbstractNativeT
monitor.subTask(task.getType().getName());
Log.setLogWriter(logStream);
listener.taskStarted(task);
Throwable error = null;
try {
doExecute(monitor, task, settings, log);
} catch (Exception e) {
error = e;
throw new InvocationTargetException(e);
} finally {
listener.taskFinished(settings, error);
Log.setLogWriter(null);
}
......@@ -150,7 +155,7 @@ public abstract class AbstractNativeToolHandler<SETTINGS extends AbstractNativeT
return true;
}
protected void startProcessHandler(DBRProgressMonitor monitor, DBTTask task, SETTINGS settings, PROCESS_ARG arg, ProcessBuilder processBuilder, Process process, Log log) {
protected void startProcessHandler(DBRProgressMonitor monitor, DBTTask task, SETTINGS settings, PROCESS_ARG arg, ProcessBuilder processBuilder, Process process, Log log) throws IOException {
LogReaderJob logReaderJob = new LogReaderJob(
task,
settings,
......@@ -539,4 +544,12 @@ public abstract class AbstractNativeToolHandler<SETTINGS extends AbstractNativeT
}
}
protected String getInputCharset() {
return GeneralUtils.UTF8_ENCODING;
}
protected String getOutputCharset() {
return GeneralUtils.UTF8_ENCODING;
}
}
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册