提交 1b36c302 编写于 作者: S Serge Rider

#2372 DT job moved to core


Former-commit-id: e39266a5
上级 b2917510
/*
* DBeaver - Universal Database Manager
* Copyright (C) 2010-2019 Serge Rider (serge@jkiss.org)
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.jkiss.dbeaver.tools.transfer.ui.wizard;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.Status;
import org.jkiss.dbeaver.model.runtime.DBRProgressMonitor;
import org.jkiss.dbeaver.runtime.DBWorkbench;
import org.jkiss.dbeaver.ui.AbstractUIJob;
/**
* DataTransferErrorJob
*/
public class DataTransferErrorJob extends AbstractUIJob {
private Throwable error;
public DataTransferErrorJob(Throwable error)
{
super("Data Export Error");
this.error = error;
}
@Override
public IStatus runInUIThread(DBRProgressMonitor monitor)
{
DBWorkbench.getPlatformUI().showError(
"Data export error",
error.getMessage(), error);
return Status.OK_STATUS;
}
}
\ No newline at end of file
......@@ -16,11 +16,16 @@
*/
package org.jkiss.dbeaver.tools.transfer.ui.wizard;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.jobs.IJobChangeEvent;
import org.eclipse.core.runtime.jobs.JobChangeAdapter;
import org.eclipse.jface.dialogs.DialogSettings;
import org.eclipse.jface.dialogs.IDialogSettings;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.wizard.IWizardPage;
import org.eclipse.jface.wizard.Wizard;
import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.Display;
import org.eclipse.ui.IExportWizard;
import org.eclipse.ui.IWorkbench;
import org.jkiss.code.Nullable;
......@@ -30,6 +35,7 @@ import org.jkiss.dbeaver.model.runtime.DBRRunnableContext;
import org.jkiss.dbeaver.model.struct.DBSObject;
import org.jkiss.dbeaver.runtime.DBWorkbench;
import org.jkiss.dbeaver.runtime.RunnableContextDelegate;
import org.jkiss.dbeaver.runtime.ui.DBPPlatformUI;
import org.jkiss.dbeaver.tools.transfer.*;
import org.jkiss.dbeaver.tools.transfer.internal.DTMessages;
import org.jkiss.dbeaver.tools.transfer.registry.DataTransferNodeDescriptor;
......@@ -42,6 +48,7 @@ import org.jkiss.dbeaver.tools.transfer.ui.registry.DataTransferPageDescriptor;
import org.jkiss.dbeaver.tools.transfer.ui.registry.DataTransferPageType;
import org.jkiss.dbeaver.ui.DialogSettingsMap;
import org.jkiss.dbeaver.ui.UIUtils;
import org.jkiss.dbeaver.utils.RuntimeUtils;
import org.jkiss.utils.ArrayUtils;
import org.jkiss.utils.CommonUtils;
......@@ -267,7 +274,34 @@ public class DataTransferWizard extends Wizard implements IExportWizard {
totalJobs = settings.getMaxJobCount();
}
for (int i = 0; i < totalJobs; i++) {
new DataTransferJob(settings).schedule();
DataTransferJob job = new DataTransferJob(settings);
job.addJobChangeListener(new JobChangeAdapter() {
@Override
public void done(IJobChangeEvent event) {
// Run async to avoid blocking progress monitor dialog
UIUtils.asyncExec(() -> {
// Make a sound
Display.getCurrent().beep();
// Notify agent
long time = job.getElapsedTime();
boolean hasErrors = job.isHasErrors();
DBPPlatformUI platformUI = DBWorkbench.getPlatformUI();
if (time > platformUI.getLongOperationTimeout() * 1000) {
platformUI.notifyAgent(
"Data transfer completed", !hasErrors ? IStatus.INFO : IStatus.ERROR);
}
if (settings.isShowFinalMessage() && !hasErrors) {
// Show message box
UIUtils.showMessageBox(
null,
DTMessages.data_transfer_wizard_name,
"Data transfer completed (" + RuntimeUtils.formatExecutionTime(time) + ")",
SWT.ICON_INFORMATION);
}
});
}
});
job.schedule();
}
}
......
......@@ -14,21 +14,15 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.jkiss.dbeaver.tools.transfer.ui.wizard;
package org.jkiss.dbeaver.tools.transfer;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.Status;
import org.eclipse.osgi.util.NLS;
import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.Display;
import org.jkiss.dbeaver.runtime.DBWorkbench;
import org.jkiss.dbeaver.model.runtime.AbstractJob;
import org.jkiss.dbeaver.model.runtime.DBRProgressMonitor;
import org.jkiss.dbeaver.runtime.ui.DBPPlatformUI;
import org.jkiss.dbeaver.tools.transfer.*;
import org.jkiss.dbeaver.runtime.DBWorkbench;
import org.jkiss.dbeaver.tools.transfer.internal.DTMessages;
import org.jkiss.dbeaver.ui.UIUtils;
import org.jkiss.dbeaver.utils.RuntimeUtils;
import org.jkiss.utils.CommonUtils;
/**
......@@ -37,6 +31,8 @@ import org.jkiss.utils.CommonUtils;
public class DataTransferJob extends AbstractJob {
private DataTransferSettings settings;
private long elapsedTime;
private boolean hasErrors;
public DataTransferJob(DataTransferSettings settings)
{
......@@ -46,6 +42,18 @@ public class DataTransferJob extends AbstractJob {
setUser(true);
}
public DataTransferSettings getSettings() {
return settings;
}
public long getElapsedTime() {
return elapsedTime;
}
public boolean isHasErrors() {
return hasErrors;
}
@Override
public boolean belongsTo(Object family)
{
......@@ -55,7 +63,7 @@ public class DataTransferJob extends AbstractJob {
@Override
protected IStatus run(DBRProgressMonitor monitor)
{
boolean hasErrors = false;
hasErrors = false;
long startTime = System.currentTimeMillis();
for (; ;) {
DataTransferPipe transferPipe = settings.acquireDataPipe(monitor);
......@@ -66,33 +74,10 @@ public class DataTransferJob extends AbstractJob {
hasErrors = true;
}
}
showResult(System.currentTimeMillis() - startTime, hasErrors);
elapsedTime = System.currentTimeMillis() - startTime;
return Status.OK_STATUS;
}
private void showResult(final long time, final boolean hasErrors)
{
// Run async to avoid blocking progress monitor dialog
UIUtils.asyncExec(() -> {
// Make a sound
Display.getCurrent().beep();
// Notify agent
DBPPlatformUI platformUI = DBWorkbench.getPlatformUI();
if (time > platformUI.getLongOperationTimeout() * 1000) {
platformUI.notifyAgent(
"Data transfer completed", !hasErrors ? IStatus.INFO : IStatus.ERROR);
}
if (settings.isShowFinalMessage() && !hasErrors) {
// Show message box
UIUtils.showMessageBox(
null,
DTMessages.data_transfer_wizard_name,
"Data transfer completed (" + RuntimeUtils.formatExecutionTime(time) + ")",
SWT.ICON_INFORMATION);
}
});
}
private boolean transferData(DBRProgressMonitor monitor, DataTransferPipe transferPipe)
{
IDataTransferProducer producer = transferPipe.getProducer();
......@@ -120,7 +105,7 @@ public class DataTransferJob extends AbstractJob {
}
return true;
} catch (Exception e) {
new DataTransferErrorJob(e).schedule();
DBWorkbench.getPlatformUI().showError("Data export error", e.getMessage(), e);
return false;
}
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册