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

Invalidate notifications feedback

上级 04b1e1aa
......@@ -31,10 +31,7 @@ import org.jkiss.dbeaver.DBException;
import org.jkiss.dbeaver.DBeaverPreferences;
import org.jkiss.dbeaver.Log;
import org.jkiss.dbeaver.ModelPreferences;
import org.jkiss.dbeaver.model.DBPDataSource;
import org.jkiss.dbeaver.model.DBPErrorAssistant;
import org.jkiss.dbeaver.model.DBPImage;
import org.jkiss.dbeaver.model.DBUtils;
import org.jkiss.dbeaver.model.*;
import org.jkiss.dbeaver.model.access.DBAAuthInfo;
import org.jkiss.dbeaver.model.access.DBAPasswordChangeInfo;
import org.jkiss.dbeaver.model.exec.DBCExecutionContext;
......@@ -44,6 +41,7 @@ import org.jkiss.dbeaver.model.runtime.DBRProcessListener;
import org.jkiss.dbeaver.model.runtime.load.ILoadService;
import org.jkiss.dbeaver.model.runtime.load.ILoadVisualizer;
import org.jkiss.dbeaver.model.struct.DBSObject;
import org.jkiss.dbeaver.registry.DataSourceDescriptor;
import org.jkiss.dbeaver.runtime.ui.DBPPlatformUI;
import org.jkiss.dbeaver.runtime.ui.DBUserInterface;
import org.jkiss.dbeaver.ui.LoadingJob;
......@@ -306,6 +304,14 @@ public class DBeaverUI implements DBPPlatformUI {
dialog.open();
}
@Override
public void openConnectionEditor(DBPDataSourceContainer dataSourceContainer) {
UIUtils.syncExec(() ->
NavigatorHandlerObjectOpen.openConnectionEditor(
UIUtils.getActiveWorkbenchWindow(),
(DataSourceDescriptor) dataSourceContainer));
}
@Override
public void executeProcess(final DBRProcessDescriptor processDescriptor) {
processDescriptor.setProcessListener(new DBRProcessListener() {
......
......@@ -34,6 +34,7 @@ import org.jkiss.dbeaver.model.IDataSourceContainerProviderEx;
import org.jkiss.dbeaver.model.exec.DBCExecutionContext;
import org.jkiss.dbeaver.runtime.jobs.DisconnectJob;
import org.jkiss.dbeaver.runtime.jobs.InvalidateJob;
import org.jkiss.dbeaver.runtime.ui.DBUserInterface;
import org.jkiss.dbeaver.ui.UITask;
import org.jkiss.dbeaver.ui.UIUtils;
import org.jkiss.dbeaver.ui.actions.AbstractDataSourceHandler;
......@@ -74,6 +75,7 @@ public class DataSourceInvalidateHandler extends AbstractDataSourceHandler
return;
}
final InvalidateJob invalidateJob = new InvalidateJob(dataSource);
invalidateJob.setFeedbackHandler(() -> DBUserInterface.getInstance().openConnectionEditor(dataSource.getContainer()));
invalidateJob.addJobChangeListener(new JobChangeAdapter() {
@Override
public void done(IJobChangeEvent event) {
......
......@@ -249,7 +249,7 @@ public class NavigatorHandlerObjectOpen extends NavigatorHandlerObjectBase imple
});
}
private static void openConnectionEditor(IWorkbenchWindow workbenchWindow, DataSourceDescriptor dataSourceContainer) {
public static void openConnectionEditor(IWorkbenchWindow workbenchWindow, DataSourceDescriptor dataSourceContainer) {
EditConnectionDialog dialog = new EditConnectionDialog(
workbenchWindow,
new EditConnectionWizard(dataSourceContainer));
......
......@@ -35,6 +35,7 @@ import org.jkiss.dbeaver.model.sql.*;
import org.jkiss.dbeaver.model.struct.*;
import org.jkiss.dbeaver.model.struct.rdb.*;
import org.jkiss.dbeaver.runtime.jobs.InvalidateJob;
import org.jkiss.dbeaver.runtime.ui.DBUserInterface;
import org.jkiss.dbeaver.utils.GeneralUtils;
import org.jkiss.dbeaver.utils.RuntimeUtils;
import org.jkiss.utils.ArrayUtils;
......@@ -1574,7 +1575,8 @@ public final class DBUtils {
} else {
monitor = new VoidProgressMonitor();
}
InvalidateJob.invalidateDataSource(monitor, dataSource, false);
InvalidateJob.invalidateDataSource(monitor, dataSource, false,
() -> DBUserInterface.getInstance().openConnectionEditor(dataSource.getContainer()));
if (i < tryCount - 1) {
log.error("Operation failed. Retry count remains = " + (tryCount - i - 1), lastError);
}
......
......@@ -57,6 +57,7 @@ public class InvalidateJob extends DataSourceJob
private long timeSpent;
private List<ContextInvalidateResult> invalidateResults = new ArrayList<>();
private Runnable feedbackHandler;
public InvalidateJob(
DBPDataSource dataSource)
......@@ -72,6 +73,14 @@ public class InvalidateJob extends DataSourceJob
return timeSpent;
}
public Runnable getFeedbackHandler() {
return feedbackHandler;
}
public void setFeedbackHandler(Runnable feedbackHandler) {
this.feedbackHandler = feedbackHandler;
}
@Override
protected IStatus run(DBRProgressMonitor monitor)
{
......@@ -79,12 +88,12 @@ public class InvalidateJob extends DataSourceJob
// Disable disconnect on failure. It is the worst case anyway.
// Not sure that we should force disconnect even here.
this.invalidateResults = invalidateDataSource(monitor, dataSource, false);
this.invalidateResults = invalidateDataSource(monitor, dataSource, false, feedbackHandler);
return Status.OK_STATUS;
}
public static List<ContextInvalidateResult> invalidateDataSource(DBRProgressMonitor monitor, DBPDataSource dataSource, boolean disconnectOnFailure) {
public static List<ContextInvalidateResult> invalidateDataSource(DBRProgressMonitor monitor, DBPDataSource dataSource, boolean disconnectOnFailure, Runnable feedback) {
long timeSpent = 0;
List<ContextInvalidateResult> invalidateResults = new ArrayList<>();
......@@ -157,7 +166,8 @@ public class InvalidateJob extends DataSourceJob
dataSource,
DBeaverNotifications.NT_RECONNECT,
"Datasource invalidate failed",
DBPMessageType.ERROR);
DBPMessageType.ERROR,
feedback);
} else {
DBeaverNotifications.showNotification(
dataSource,
......
......@@ -25,6 +25,7 @@ import org.jkiss.dbeaver.model.exec.DBCExecutionContext;
import org.jkiss.dbeaver.model.runtime.AbstractJob;
import org.jkiss.dbeaver.model.runtime.DBRProgressMonitor;
import org.jkiss.dbeaver.model.struct.DBSInstance;
import org.jkiss.dbeaver.runtime.ui.DBUserInterface;
import java.util.List;
......@@ -56,7 +57,8 @@ public class PingJob extends AbstractJob
} catch (Exception e) {
log.debug("Context [" + dataSource.getName() + "::" + context.getContextName() + "] check failed: " + e.getMessage());
if (e instanceof DBException) {
final List<InvalidateJob.ContextInvalidateResult> results = InvalidateJob.invalidateDataSource(monitor, dataSource, false);
final List<InvalidateJob.ContextInvalidateResult> results = InvalidateJob.invalidateDataSource(monitor, dataSource, false,
() -> DBUserInterface.getInstance().openConnectionEditor(dataSource.getContainer()));
log.debug("Connection invalidated: " + results);
}
}
......
......@@ -21,6 +21,7 @@ import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.jobs.Job;
import org.jkiss.code.NotNull;
import org.jkiss.code.Nullable;
import org.jkiss.dbeaver.model.DBPDataSourceContainer;
import org.jkiss.dbeaver.model.DBPImage;
import org.jkiss.dbeaver.model.access.DBAAuthInfo;
import org.jkiss.dbeaver.model.access.DBAPasswordChangeInfo;
......@@ -77,6 +78,7 @@ public interface DBPPlatformUI {
void openEntityEditor(DBSObject object);
void openEntityEditor(DBNNode selectedNode, @Nullable String defaultPageId);
void openSQLViewer(@Nullable DBCExecutionContext context, String title, @Nullable DBPImage image, String text);
void openConnectionEditor(DBPDataSourceContainer dataSourceContainer);
// Process execution
void executeProcess(DBRProcessDescriptor processDescriptor);
......
......@@ -21,6 +21,7 @@ import org.eclipse.core.runtime.jobs.Job;
import org.jkiss.code.NotNull;
import org.jkiss.code.Nullable;
import org.jkiss.dbeaver.DBException;
import org.jkiss.dbeaver.model.DBPDataSourceContainer;
import org.jkiss.dbeaver.model.DBPImage;
import org.jkiss.dbeaver.model.access.DBAAuthInfo;
import org.jkiss.dbeaver.model.access.DBAPasswordChangeInfo;
......@@ -105,6 +106,11 @@ public class ConsoleUserInterface implements DBPPlatformUI {
System.out.println(text);
}
@Override
public void openConnectionEditor(DBPDataSourceContainer dataSourceContainer) {
// do nothing
}
@Override
public void executeProcess(DBRProcessDescriptor processDescriptor) {
try {
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册