提交 9e7e23cd 编写于 作者: S Serge Rider

#7790 Reference panel refresh fix

上级 c76a3f5f
......@@ -20,15 +20,16 @@ import org.eclipse.jface.action.IContributionManager;
import org.eclipse.jface.dialogs.IDialogSettings;
import org.eclipse.jface.viewers.ISelectionChangedListener;
import org.eclipse.jface.viewers.ISelectionProvider;
import org.eclipse.jface.viewers.SelectionChangedEvent;
import org.eclipse.swt.SWT;
import org.eclipse.swt.layout.FillLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.jkiss.dbeaver.ui.UIUtils;
import org.jkiss.dbeaver.ui.controls.resultset.IResultSetPanel;
import org.jkiss.dbeaver.ui.controls.resultset.IResultSetPresentation;
import org.jkiss.dbeaver.ui.controls.resultset.ResultSetListenerAdapter;
import org.jkiss.dbeaver.ui.controls.resultset.ResultSetUtils;
import org.jkiss.dbeaver.ui.controls.resultset.*;
import org.jkiss.utils.CommonUtils;
import java.util.List;
/**
* RSV references panel
......@@ -71,11 +72,23 @@ public class ReferencesPanel implements IResultSetPanel {
presentation.getControl().addDisposeListener(e -> presentation.getController().removeListener(dataListener));
if (presentation instanceof ISelectionProvider) {
ISelectionChangedListener selectionListener = event -> {
ISelectionChangedListener selectionListener = new ISelectionChangedListener() {
private List<ResultSetRow> prevSelection;
@Override
public void selectionChanged(SelectionChangedEvent event) {
if (presentation.getController().getVisiblePanel() != ReferencesPanel.this) {
return;
}
if (!(event.getSelection() instanceof IResultSetSelection)) {
return;
}
List<ResultSetRow> selectedItems = ((IResultSetSelection) event.getSelection()).getSelectedRows();
if (CommonUtils.equalObjects(prevSelection, selectedItems)) {
return;
}
this.prevSelection = selectedItems;
getResultsContainer().refreshReferences();
}
};
((ISelectionProvider) presentation).addSelectionChangedListener(selectionListener);
presentation.getControl().addDisposeListener(e -> ((ISelectionProvider) presentation).removeSelectionChangedListener(selectionListener));
......
......@@ -42,7 +42,6 @@ import org.jkiss.dbeaver.model.runtime.DBRProgressMonitor;
import org.jkiss.dbeaver.model.struct.*;
import org.jkiss.dbeaver.model.virtual.DBVEntity;
import org.jkiss.dbeaver.model.virtual.DBVUtils;
import org.jkiss.dbeaver.runtime.DBWorkbench;
import org.jkiss.dbeaver.ui.DBeaverIcons;
import org.jkiss.dbeaver.ui.UIIcon;
import org.jkiss.dbeaver.ui.UIUtils;
......@@ -51,7 +50,6 @@ import org.jkiss.dbeaver.ui.controls.resultset.*;
import org.jkiss.dbeaver.utils.GeneralUtils;
import org.jkiss.utils.CommonUtils;
import java.lang.reflect.InvocationTargetException;
import java.util.*;
class ReferencesResultsContainer implements IResultSetContainer {
......@@ -317,37 +315,41 @@ class ReferencesResultsContainer implements IResultSetContainer {
//log.error("No active reference key");
return;
}
try {
UIUtils.runInProgressService(monitor -> {
new AbstractJob("Read references") {
{
//setUser(true);
//setSystem(false);
}
@Override
protected IStatus run(DBRProgressMonitor monitor) {
try {
DBSEntity realEntity = DBVUtils.getRealEntity(monitor, activeReferenceKey.refEntity);
if (!(realEntity instanceof DBSDataContainer)) {
log.error("Referencing entity is not a data container");
return;
return Status.OK_STATUS;
}
dataContainer = (DBSDataContainer) realEntity;
List<ResultSetRow> selectedRows = parentController.getSelection().getSelectedRows();
if (!force && CommonUtils.equalObjects(lastSelectedRows, selectedRows)) {
return;
return Status.OK_STATUS;
}
lastSelectedRows = selectedRows;
if (selectedRows.isEmpty()) {
UIUtils.asyncExec(() -> {
this.dataViewer.clearData();
this.dataViewer.showEmptyPresentation();
dataViewer.clearData();
dataViewer.showEmptyPresentation();
});
} else {
if (activeReferenceKey.isReference) {
this.dataViewer.navigateReference(
dataViewer.navigateReference(
monitor,
parentController.getModel(),
activeReferenceKey.refAssociation,
selectedRows,
false);
} else {
this.dataViewer.navigateAssociation(
dataViewer.navigateAssociation(
monitor,
parentController.getModel(),
activeReferenceKey.refAssociation,
......@@ -355,15 +357,12 @@ class ReferencesResultsContainer implements IResultSetContainer {
}
}
} catch (DBException e) {
throw new InvocationTargetException(e);
} catch (Exception e) {
return GeneralUtils.makeExceptionStatus(e);
}
});
} catch (InvocationTargetException e) {
DBWorkbench.getPlatformUI().showError("Can't show references", "Error opening '" + dataContainer.getName() + "' references", e.getTargetException());
} catch (InterruptedException e) {
// Ignore
return Status.OK_STATUS;
}
}.schedule();
}
static class ReferenceKey {
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册