From dc263f2c749cbac2046eedf9689b2a6b923cdd89 Mon Sep 17 00:00:00 2001 From: serge-rider Date: Sat, 7 Apr 2018 12:44:58 +0300 Subject: [PATCH] #3278 Commit/rollback notifications --- .../dbeaver/ui/DBeaverNotifications.java | 2 +- .../datasource/DataSourceCommitHandler.java | 5 ++- .../datasource/DataSourceRollbackHandler.java | 38 +++++++++---------- .../controls/txn/TransactionInfoDialog.java | 4 +- .../ui/controls/txn/TransactionLogDialog.java | 13 ++++++- 5 files changed, 36 insertions(+), 26 deletions(-) diff --git a/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/ui/DBeaverNotifications.java b/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/ui/DBeaverNotifications.java index 1f8b6c2a25..f303c6c9ec 100644 --- a/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/ui/DBeaverNotifications.java +++ b/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/ui/DBeaverNotifications.java @@ -40,7 +40,7 @@ public class DBeaverNotifications NotificationUtils.sendNotification(dataSource, id, text, messageType, null); } - public static void showInformation(DBPDataSource dataSource, String id, String text, DBPMessageType messageType, Runnable feedback) { + public static void showNotification(DBPDataSource dataSource, String id, String text, DBPMessageType messageType, Runnable feedback) { NotificationUtils.sendNotification(dataSource, id, text, messageType, feedback); } diff --git a/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/ui/actions/datasource/DataSourceCommitHandler.java b/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/ui/actions/datasource/DataSourceCommitHandler.java index 417372b5ff..bb5f335563 100644 --- a/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/ui/actions/datasource/DataSourceCommitHandler.java +++ b/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/ui/actions/datasource/DataSourceCommitHandler.java @@ -26,6 +26,7 @@ import org.jkiss.dbeaver.model.qm.QMUtils; import org.jkiss.dbeaver.runtime.TasksJob; import org.jkiss.dbeaver.ui.DBeaverNotifications; import org.jkiss.dbeaver.ui.actions.AbstractDataSourceHandler; +import org.jkiss.dbeaver.ui.controls.txn.TransactionLogDialog; import org.jkiss.dbeaver.utils.RuntimeUtils; import java.lang.reflect.InvocationTargetException; @@ -58,7 +59,9 @@ public class DataSourceCommitHandler extends AbstractDataSourceHandler "commit", "Transaction has been committed\n\n" + "Query count: " + txnInfo.getUpdateCount() + "\n" + - "Duration: " + RuntimeUtils.formatExecutionTime(System.currentTimeMillis() - txnInfo.getTransactionStartTime()) + "\n"); + "Duration: " + RuntimeUtils.formatExecutionTime(System.currentTimeMillis() - txnInfo.getTransactionStartTime()) + "\n", + null, + () -> TransactionLogDialog.showDialog(null, context, true)); } }); } diff --git a/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/ui/actions/datasource/DataSourceRollbackHandler.java b/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/ui/actions/datasource/DataSourceRollbackHandler.java index 72673d66bd..85e3a8fac3 100644 --- a/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/ui/actions/datasource/DataSourceRollbackHandler.java +++ b/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/ui/actions/datasource/DataSourceRollbackHandler.java @@ -28,6 +28,7 @@ import org.jkiss.dbeaver.model.runtime.DBRRunnableWithProgress; import org.jkiss.dbeaver.runtime.TasksJob; import org.jkiss.dbeaver.ui.DBeaverNotifications; import org.jkiss.dbeaver.ui.actions.AbstractDataSourceHandler; +import org.jkiss.dbeaver.ui.controls.txn.TransactionLogDialog; import org.jkiss.dbeaver.utils.RuntimeUtils; import java.lang.reflect.InvocationTargetException; @@ -45,27 +46,24 @@ public class DataSourceRollbackHandler extends AbstractDataSourceHandler } public static void execute(final DBCExecutionContext context) { - TasksJob.runTask("Rollback transaction", new DBRRunnableWithProgress() { - @Override - public void run(DBRProgressMonitor monitor) - throws InvocationTargetException, InterruptedException { - DBCTransactionManager txnManager = DBUtils.getTransactionManager(context); - if (txnManager != null) { - QMTransactionState txnInfo = QMUtils.getTransactionState(context); - try (DBCSession session = context.openSession(monitor, DBCExecutionPurpose.UTIL, "Rollback transaction")) { - txnManager.rollback(session, null); - } catch (DBCException e) { - throw new InvocationTargetException(e); - } - DBeaverNotifications.showNotification( - context.getDataSource(), - "rollback", - "Transaction has been rolled back\n\n" + - "Query count: " + txnInfo.getUpdateCount() + "\n" + - "Duration: " + RuntimeUtils.formatExecutionTime(System.currentTimeMillis() - txnInfo.getTransactionStartTime()) + "\n", - DBPMessageType.ERROR); - + TasksJob.runTask("Rollback transaction", monitor -> { + DBCTransactionManager txnManager = DBUtils.getTransactionManager(context); + if (txnManager != null) { + QMTransactionState txnInfo = QMUtils.getTransactionState(context); + try (DBCSession session = context.openSession(monitor, DBCExecutionPurpose.UTIL, "Rollback transaction")) { + txnManager.rollback(session, null); + } catch (DBCException e) { + throw new InvocationTargetException(e); } + DBeaverNotifications.showNotification( + context.getDataSource(), + "rollback", + "Transaction has been rolled back\n\n" + + "Query count: " + txnInfo.getUpdateCount() + "\n" + + "Duration: " + RuntimeUtils.formatExecutionTime(System.currentTimeMillis() - txnInfo.getTransactionStartTime()) + "\n", + DBPMessageType.ERROR, + () -> TransactionLogDialog.showDialog(null, context, true)); + } }); } diff --git a/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/ui/controls/txn/TransactionInfoDialog.java b/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/ui/controls/txn/TransactionInfoDialog.java index fa488efdde..9ac510f9dd 100644 --- a/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/ui/controls/txn/TransactionInfoDialog.java +++ b/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/ui/controls/txn/TransactionInfoDialog.java @@ -50,7 +50,7 @@ public abstract class TransactionInfoDialog extends Dialog { private final IWorkbenchPart activeEditor; protected QueryLogViewer logViewer; private Button showAllCheck; - private Button showPreviousCheck; + protected Button showPreviousCheck; public TransactionInfoDialog(Shell parentShell, IWorkbenchPart activeEditor) { @@ -93,7 +93,7 @@ public abstract class TransactionInfoDialog extends Dialog { } - private void updateTransactionFilter() { + protected void updateTransactionFilter() { DBCExecutionContext context = getCurrentContext(); QMEventFilter filter = context == null ? VOID_FILTER : createContextFilter(context); logViewer.setFilter(filter); diff --git a/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/ui/controls/txn/TransactionLogDialog.java b/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/ui/controls/txn/TransactionLogDialog.java index 0d86702133..9a5e4c4bfa 100644 --- a/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/ui/controls/txn/TransactionLogDialog.java +++ b/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/ui/controls/txn/TransactionLogDialog.java @@ -32,11 +32,13 @@ public class TransactionLogDialog extends TransactionInfoDialog { private static final String DIALOG_ID = "DBeaver.TransactionLogDialog";//$NON-NLS-1$ private final DBCExecutionContext context; + private final boolean showPreviousTxn; - public TransactionLogDialog(Shell parentShell, DBCExecutionContext context, IWorkbenchPart activeEditor) + public TransactionLogDialog(Shell parentShell, DBCExecutionContext context, IWorkbenchPart activeEditor, boolean showPreviousTxn) { super(parentShell, activeEditor); this.context = context; + this.showPreviousTxn = showPreviousTxn; } @Override @@ -63,10 +65,17 @@ public class TransactionLogDialog extends TransactionInfoDialog { super.createTransactionLogPanel(composite); + showPreviousCheck.setSelection(showPreviousTxn); + updateTransactionFilter(); + return parent; } public static void showDialog(Shell shell, DBCExecutionContext executionContext) { + showDialog(shell, executionContext, false); + } + + public static void showDialog(Shell shell, DBCExecutionContext executionContext, boolean showPreviousTxn) { IEditorPart activeEditor = DBeaverUI.getActiveWorkbenchWindow().getActivePage().getActiveEditor(); if (activeEditor == null) { DBUserInterface.getInstance().showError( @@ -77,7 +86,7 @@ public class TransactionLogDialog extends TransactionInfoDialog { "Not connected", "Transaction log is not available.\nConnect to a database."); } else { - final TransactionLogDialog dialog = new TransactionLogDialog(shell, executionContext, activeEditor); + final TransactionLogDialog dialog = new TransactionLogDialog(shell, executionContext, activeEditor, showPreviousTxn); dialog.open(); } } -- GitLab