提交 24d1ead3 编写于 作者: S serge-rider

#6972 MySQL: export tasks create from scratch. Script execute model.


Former-commit-id: 7866814a
上级 99d501f2
......@@ -41,8 +41,8 @@ import org.jkiss.dbeaver.ui.DBeaverIcons;
import org.jkiss.dbeaver.ui.UIUtils;
import org.jkiss.dbeaver.ui.controls.CustomSashForm;
import java.util.*;
import java.util.List;
import java.util.*;
class MySQLExportWizardPageObjects extends MySQLWizardPageSettings<MySQLExportWizard>
......@@ -53,6 +53,7 @@ class MySQLExportWizardPageObjects extends MySQLWizardPageSettings<MySQLExportWi
private Map<MySQLCatalog, Set<MySQLTableBase>> checkedObjects = new HashMap<>();
private MySQLCatalog curCatalog;
private Button exportViewsCheck;
protected MySQLExportWizardPageObjects(MySQLExportWizard wizard)
{
......@@ -104,7 +105,6 @@ class MySQLExportWizardPageObjects extends MySQLWizardPageSettings<MySQLExportWi
createCheckButtons(buttonsPanel, catalogTable);
}
final Button exportViewsCheck;
{
Composite tablesPanel = UIUtils.createComposite(sash, 1);
tablesPanel.setLayoutData(new GridData(GridData.FILL_BOTH));
......@@ -134,6 +134,19 @@ class MySQLExportWizardPageObjects extends MySQLWizardPageSettings<MySQLExportWi
createCheckButtons(buttonsPanel, tablesTable);
}
loadSettings();
setControl(composite);
}
@Override
public void activatePage() {
loadSettings();
}
private void loadSettings() {
checkedObjects.clear();
catalogTable.removeAll();
MySQLDataSource dataSource = null;
Set<MySQLCatalog> activeCatalogs = new LinkedHashSet<>();
for (DBSObject object : wizard.getDatabaseObjects()) {
......@@ -176,7 +189,6 @@ class MySQLExportWizardPageObjects extends MySQLWizardPageSettings<MySQLExportWi
}
}
updateState();
setControl(composite);
}
private void updateCheckedTables() {
......
......@@ -109,6 +109,10 @@ public class MySQLTaskConfigurator implements DBTTaskConfigurator {
protected void onSelectionChange(Object element) {
selectedCatalog = element instanceof DBNDatabaseItem && ((DBNDatabaseItem) element).getObject() instanceof MySQLCatalog ?
(MySQLCatalog) ((DBNDatabaseItem) element).getObject() : null;
ieWizard.getDatabaseObjects().clear();
if (selectedCatalog != null) {
ieWizard.getDatabaseObjects().add(selectedCatalog);
}
updateHomeSelector();
propertyChangeListener.run();
}
......
......@@ -351,12 +351,14 @@
<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">
<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.ScriptExecuteHandler">
<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">
<objectType name="org.jkiss.dbeaver.model.struct.DBSDataManipulator"/>
</task>
-->
</extension>
</plugin>
......@@ -113,6 +113,11 @@ public class MySQLDatabaseExportHandler extends MySQLNativeToolHandler<MySQLExpo
return true;
}
@Override
protected boolean isLogInputStream() {
return false;
}
@Override
protected void startProcessHandler(DBRProgressMonitor monitor, DBTTask task, MySQLExportSettings settings, final MySQLDatabaseExportInfo arg, ProcessBuilder processBuilder, Process process, Log log) {
super.startProcessHandler(monitor, task, settings, arg, processBuilder, process, log);
......
package org.jkiss.dbeaver.ext.mysql.tasks;
import org.jkiss.dbeaver.Log;
import org.jkiss.dbeaver.ext.mysql.MySQLConstants;
import org.jkiss.dbeaver.ext.mysql.model.MySQLCatalog;
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.utils.RuntimeUtils;
import java.io.File;
import java.io.IOException;
import java.util.Collection;
import java.util.List;
public class MySQLScriptExecuteHandler extends MySQLNativeToolHandler<MySQLScriptExecuteSettings, MySQLCatalog, MySQLCatalog> {
@Override
public Collection<MySQLCatalog> getRunInfo(MySQLScriptExecuteSettings settings) {
return settings.getDatabaseObjects();
}
@Override
protected MySQLScriptExecuteSettings createTaskSettings(DBRRunnableContext context, DBTTask task) {
MySQLScriptExecuteSettings settings = new MySQLScriptExecuteSettings();
boolean isImport = task.getType().getId().equals(MySQLTasks.TASK_DATABASE_RESTORE);
settings.setImport(isImport);
settings.loadSettings(context, new TaskPreferenceStore(task));
return settings;
}
@Override
protected boolean validateTaskParameters(DBTTask task, MySQLScriptExecuteSettings settings, Log log) {
return true;
}
@Override
protected List<String> getCommandLine(MySQLScriptExecuteSettings settings, MySQLCatalog arg) throws IOException {
List<String> cmd = getMySQLToolCommandLine(this, settings, arg);
cmd.add(arg.getName());
return cmd;
}
@Override
public void fillProcessParameters(MySQLScriptExecuteSettings settings, MySQLCatalog arg, List<String> cmd) throws IOException {
String dumpPath = RuntimeUtils.getNativeClientBinary(settings.getClientHome(), MySQLConstants.BIN_FOLDER, "mysql").getAbsolutePath(); //$NON-NLS-1$
cmd.add(dumpPath);
if (settings.getLogLevel() == MySQLScriptExecuteSettings.LogLevel.Debug) {
cmd.add("--debug-info"); //$NON-NLS-1$
}
if (settings.isNoBeep()) {
cmd.add("--no-beep"); //$NON-NLS-1$
}
settings.addExtraCommandArgs(cmd);
}
@Override
public boolean isVerbose() {
return true;
}
@Override
protected void startProcessHandler(DBRProgressMonitor monitor, DBTTask task, MySQLScriptExecuteSettings settings, MySQLCatalog arg, ProcessBuilder processBuilder, Process process, Log log) {
if (settings.isImport()) {
super.startProcessHandler(monitor, task, settings, arg, processBuilder, process, log);
new BinaryFileTransformerJob(
monitor,
task,
new File(settings.getInputFile()),
process.getOutputStream(), log).start();
} else {
super.startProcessHandler(monitor, task, settings, arg, processBuilder, process, log);
}
}
}
......@@ -35,11 +35,8 @@ 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
{
protected File inputFile;
public AbstractScriptExecuteWizard(Collection<BASE_OBJECT> dbObject, String task) {
super(dbObject, task);
this.inputFile = null;
}
@Override
......@@ -52,12 +49,12 @@ public abstract class AbstractScriptExecuteWizard<SETTINGS extends AbstractScrip
public File getInputFile()
{
return inputFile;
return new File(getSettings().getInputFile());
}
public void setInputFile(File inputFile)
{
this.inputFile = inputFile;
getSettings().setInputFile(inputFile.getAbsolutePath());
}
@Override
......@@ -86,7 +83,7 @@ public abstract class AbstractScriptExecuteWizard<SETTINGS extends AbstractScrip
logPage.startLogReader(
processBuilder,
process.getInputStream());
new TextFileTransformerJob(monitor, inputFile, process.getOutputStream(), getInputCharset(), getOutputCharset()).start();
new TextFileTransformerJob(monitor, getInputFile(), process.getOutputStream(), getInputCharset(), getOutputCharset()).start();
}
@Override
......
......@@ -20,7 +20,6 @@ package org.jkiss.dbeaver.tasks.ui.nativetool;
import org.eclipse.jface.fieldassist.SimpleContentProposalProvider;
import org.eclipse.jface.fieldassist.TextContentAdapter;
import org.eclipse.jface.wizard.WizardPage;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.widgets.Composite;
......@@ -28,8 +27,9 @@ import org.eclipse.swt.widgets.Table;
import org.eclipse.swt.widgets.TableItem;
import org.eclipse.swt.widgets.Text;
import org.jkiss.dbeaver.ui.UIUtils;
import org.jkiss.dbeaver.ui.dialogs.ActiveWizardPage;
public abstract class AbstractToolWizardPage<WIZARD extends AbstractToolWizard> extends WizardPage {
public abstract class AbstractToolWizardPage<WIZARD extends AbstractToolWizard> extends ActiveWizardPage {
protected final WIZARD wizard;
......@@ -47,7 +47,6 @@ public abstract class AbstractToolWizardPage<WIZARD extends AbstractToolWizard>
return wizard.getClientHome() != null && super.isPageComplete();
}
protected void createCheckButtons(Composite buttonsPanel, final Table table) {
UIUtils.createDialogButton(buttonsPanel, "All", new CheckListener(table, true));
UIUtils.createDialogButton(buttonsPanel, "None", new CheckListener(table, false));
......
......@@ -146,8 +146,17 @@ public abstract class AbstractNativeToolHandler<SETTINGS extends AbstractNativeT
protected void setupProcessParameters(SETTINGS settings, PROCESS_ARG arg, ProcessBuilder process) {
}
protected boolean isLogInputStream() {
return true;
}
protected void startProcessHandler(DBRProgressMonitor monitor, DBTTask task, SETTINGS settings, PROCESS_ARG arg, ProcessBuilder processBuilder, Process process, Log log) {
new LogReaderJob(task, settings, processBuilder, process.getErrorStream()).start();
LogReaderJob logReaderJob = new LogReaderJob(
task,
settings,
processBuilder,
isLogInputStream() ? process.getInputStream() : process.getErrorStream());
logReaderJob.start();
}
public boolean executeProcess(DBRProgressMonitor monitor, DBTTask task, SETTINGS settings, PROCESS_ARG arg, Log log) throws IOException, InterruptedException {
......
......@@ -17,8 +17,32 @@
*/
package org.jkiss.dbeaver.tasks.nativetool;
import org.jkiss.dbeaver.model.preferences.DBPPreferenceStore;
import org.jkiss.dbeaver.model.runtime.DBRRunnableContext;
import org.jkiss.dbeaver.model.struct.DBSObject;
public class AbstractScriptExecuteSettings<BASE_OBJECT extends DBSObject> extends AbstractNativeToolSettings<BASE_OBJECT> {
private String inputFile;
public String getInputFile() {
return inputFile;
}
public void setInputFile(String inputFile) {
this.inputFile = inputFile;
}
@Override
public void loadSettings(DBRRunnableContext runnableContext, DBPPreferenceStore preferenceStore) {
super.loadSettings(runnableContext, preferenceStore);
inputFile = preferenceStore.getString("inputFile");
}
@Override
public void saveSettings(DBRRunnableContext runnableContext, DBPPreferenceStore preferenceStore) {
super.saveSettings(runnableContext, preferenceStore);
preferenceStore.setValue("inputFile", inputFile);
}
}
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册