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

Invalidate notifications feedback

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