提交 0fd996e8 编写于 作者: J jurgen

Connect/disconnect jobs redesigned

上级 09a7a1a5
......@@ -30,7 +30,9 @@ import org.jkiss.dbeaver.runtime.AbstractJob;
import org.jkiss.dbeaver.runtime.RuntimeUtils;
/**
* Connect job
* Connect job.
* Always returns OK status.
* To get real status use getConectStatus.
*/
public class ConnectJob extends EventProcessorJob
{
......@@ -77,11 +79,6 @@ public class ConnectJob extends EventProcessorJob
}
catch (Throwable ex) {
connectStatus = RuntimeUtils.makeExceptionStatus(ex);
// UIUtils.showErrorDialog(
// null,
// NLS.bind(CoreMessages.runtime_jobs_connect_status_error, container.getName()),
// null,
// ex);
}
return Status.OK_STATUS;
}
......
......@@ -24,13 +24,16 @@ import org.jkiss.dbeaver.core.CoreMessages;
import org.jkiss.dbeaver.model.DBPConnectionEventType;
import org.jkiss.dbeaver.model.runtime.DBRProgressMonitor;
import org.jkiss.dbeaver.registry.DataSourceDescriptor;
import org.jkiss.dbeaver.ui.UIUtils;
import org.jkiss.dbeaver.runtime.RuntimeUtils;
/**
* Disconnect job
* Disconnect job.
* Always returns OK status.
* To get real status use getConectStatus.
*/
public class DisconnectJob extends EventProcessorJob
{
private IStatus connectStatus;
public DisconnectJob(DataSourceDescriptor container)
{
......@@ -38,6 +41,10 @@ public class DisconnectJob extends EventProcessorJob
setUser(true);
}
public IStatus getConnectStatus() {
return connectStatus;
}
@Override
protected IStatus run(DBRProgressMonitor monitor)
{
......@@ -47,14 +54,10 @@ public class DisconnectJob extends EventProcessorJob
container.disconnect(monitor);
processEvents(DBPConnectionEventType.AFTER_DISCONNECT);
}
connectStatus = Status.OK_STATUS;
}
catch (Exception ex) {
UIUtils.showErrorDialog(
null,
NLS.bind(CoreMessages.runtime_jobs_disconnect_error, container.getName()),
null,
ex);
catch (Throwable ex) {
connectStatus = RuntimeUtils.makeExceptionStatus(ex);
}
return Status.OK_STATUS;
}
......
......@@ -81,7 +81,8 @@ public class DataSourceConnectHandler extends DataSourceHandler
@Override
public void done(IJobChangeEvent event)
{
if (event.getResult().isOK()) {
IStatus result = connectJob.getConnectStatus();
if (result.isOK()) {
if (!dataSourceDescriptor.isSavePassword()) {
// Rest password back to null
// TODO: to be correct we need to reset password info.
......@@ -93,13 +94,18 @@ public class DataSourceConnectHandler extends DataSourceHandler
}
}
if (onFinish != null) {
onFinish.onProcessFinish(event.getResult());
onFinish.onProcessFinish(result);
} else if (!result.isOK()) {
UIUtils.showErrorDialog(
null,
connectJob.getName(),
null,//NLS.bind(CoreMessages.runtime_jobs_connect_status_error, dataSourceContainer.getName()),
result);
}
}
};
if (monitor != null) {
connectJob.runSync(monitor);
final IStatus result = connectJob.getConnectStatus();
jobChangeAdapter.done(new IJobChangeEvent() {
@Override
public long getDelay() {
......@@ -116,17 +122,6 @@ public class DataSourceConnectHandler extends DataSourceHandler
return connectJob.getConnectStatus();
}
});
if (!result.isOK()) {
if (onFinish != null) {
onFinish.onProcessFinish(result);
} else {
UIUtils.showErrorDialog(
null,
connectJob.getName(),
null,//NLS.bind(CoreMessages.runtime_jobs_connect_status_error, dataSourceContainer.getName()),
result);
}
}
} else {
connectJob.addJobChangeListener(jobChangeAdapter);
// Schedule in UI because connect may be initiated during application startup
......
......@@ -19,6 +19,7 @@ package org.jkiss.dbeaver.ui.actions.datasource;
import org.eclipse.core.commands.ExecutionEvent;
import org.eclipse.core.commands.ExecutionException;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.jobs.IJobChangeEvent;
import org.eclipse.core.runtime.jobs.Job;
import org.eclipse.core.runtime.jobs.JobChangeAdapter;
......@@ -26,6 +27,7 @@ import org.jkiss.code.Nullable;
import org.jkiss.dbeaver.model.struct.DBSDataSourceContainer;
import org.jkiss.dbeaver.registry.DataSourceDescriptor;
import org.jkiss.dbeaver.runtime.jobs.DisconnectJob;
import org.jkiss.dbeaver.ui.UIUtils;
import org.jkiss.dbeaver.ui.actions.DataSourceHandler;
import org.jkiss.utils.ArrayUtils;
......@@ -48,13 +50,20 @@ public class DataSourceDisconnectHandler extends DataSourceHandler
// Already connecting/disconnecting - just return
return;
}
DisconnectJob disconnectJob = new DisconnectJob(dataSourceDescriptor);
final DisconnectJob disconnectJob = new DisconnectJob(dataSourceDescriptor);
disconnectJob.addJobChangeListener(new JobChangeAdapter() {
@Override
public void done(IJobChangeEvent event)
{
IStatus result = disconnectJob.getConnectStatus();
if (onFinish != null) {
onFinish.run();
} else if (!result.isOK()) {
UIUtils.showErrorDialog(
null,
disconnectJob.getName(),
null,
result);
}
}
});
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册