提交 85d32ea3 编写于 作者: S serge-rider

#2705 Shwo confirmation on changed node refresh

上级 db39eb99
......@@ -139,12 +139,6 @@ public class NavigatorHandlerObjectOpen extends NavigatorHandlerObjectBase imple
openConnectionEditor(workbenchWindow, dataSourceContainer);
return null;
}
/*
if (!selectedNode.isPersisted()) {
log.debug("Node '" + selectedNode.getNodeName() + "' s not persisted. Open not possible.");
return null;
}
*/
try {
String defaultFolderId = null;
if (selectedNode instanceof DBNDatabaseFolder && !(selectedNode.getParentNode() instanceof DBNDatabaseFolder) && selectedNode.getParentNode() instanceof DBNDatabaseNode) {
......@@ -152,36 +146,14 @@ public class NavigatorHandlerObjectOpen extends NavigatorHandlerObjectBase imple
selectedNode = selectedNode.getParentNode();
}
DatabaseEditorInputFactory.setLookupEditor(true);
try {
for (IEditorReference ref : workbenchWindow.getActivePage().getEditorReferences()) {
IEditorInput editorInput;
try {
editorInput = ref.getEditorInput();
} catch (Throwable e) {
continue;
}
if (editorInput instanceof INavigatorEditorInput) {
boolean matches;
if (editorInput instanceof DatabaseLazyEditorInput) {
matches = selectedNode.getNodeItemPath().equals(((DatabaseLazyEditorInput) editorInput).getNodePath());
} else {
matches = ((INavigatorEditorInput) editorInput).getNavigatorNode() == selectedNode;
}
if (matches) {
final IEditorPart editor = ref.getEditor(true);
if (editor instanceof ITabbedFolderContainer && defaultFolderId != null) {
// Activate default folder
((ITabbedFolderContainer) editor).switchFolder(defaultFolderId);
}
workbenchWindow.getActivePage().activate(editor);
return editor;
}
}
IEditorPart editor = findEntityEditor(workbenchWindow, selectedNode);
if (editor != null) {
if (editor instanceof ITabbedFolderContainer && defaultFolderId != null) {
// Activate default folder
((ITabbedFolderContainer) editor).switchFolder(defaultFolderId);
}
}
finally {
DatabaseEditorInputFactory.setLookupEditor(false);
workbenchWindow.getActivePage().activate(editor);
return editor;
}
if (selectedNode instanceof DBNDatabaseObject) {
......@@ -222,6 +194,35 @@ public class NavigatorHandlerObjectOpen extends NavigatorHandlerObjectBase imple
}
}
public static IEditorPart findEntityEditor(IWorkbenchWindow workbenchWindow, DBNNode node) {
DatabaseEditorInputFactory.setLookupEditor(true);
try {
for (IEditorReference ref : workbenchWindow.getActivePage().getEditorReferences()) {
IEditorInput editorInput;
try {
editorInput = ref.getEditorInput();
} catch (Throwable e) {
continue;
}
if (editorInput instanceof INavigatorEditorInput) {
boolean matches;
if (editorInput instanceof DatabaseLazyEditorInput) {
matches = node.getNodeItemPath().equals(((DatabaseLazyEditorInput) editorInput).getNodePath());
} else {
matches = ((INavigatorEditorInput) editorInput).getNavigatorNode() == node;
}
if (matches) {
return ref.getEditor(true);
}
}
}
}
finally {
DatabaseEditorInputFactory.setLookupEditor(false);
}
return null;
}
private static void refreshDatabaseNode(@NotNull DBNDatabaseNode selectedNode) throws InvocationTargetException, InterruptedException {
final DBNDatabaseNode nodeToRefresh = selectedNode;
DBeaverUI.runInProgressService(new DBRRunnableWithProgress() {
......
......@@ -24,12 +24,16 @@ import org.eclipse.core.runtime.Status;
import org.eclipse.core.runtime.jobs.IJobChangeEvent;
import org.eclipse.core.runtime.jobs.Job;
import org.eclipse.core.runtime.jobs.JobChangeAdapter;
import org.eclipse.jface.dialogs.IDialogConstants;
import org.eclipse.jface.viewers.ISelection;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.ui.IEditorPart;
import org.eclipse.ui.IWorkbenchPart;
import org.eclipse.ui.handlers.HandlerUtil;
import org.jkiss.dbeaver.DBeaverPreferences;
import org.jkiss.dbeaver.Log;
import org.jkiss.dbeaver.core.DBeaverUI;
import org.jkiss.dbeaver.model.navigator.DBNDatabaseFolder;
import org.jkiss.dbeaver.model.navigator.DBNDatabaseNode;
import org.jkiss.dbeaver.model.navigator.DBNEvent;
import org.jkiss.dbeaver.model.navigator.DBNNode;
......@@ -37,8 +41,13 @@ import org.jkiss.dbeaver.model.runtime.AbstractJob;
import org.jkiss.dbeaver.model.runtime.DBRProgressMonitor;
import org.jkiss.dbeaver.runtime.ui.DBUserInterface;
import org.jkiss.dbeaver.ui.IRefreshablePart;
import org.jkiss.dbeaver.ui.UIConfirmation;
import org.jkiss.dbeaver.ui.UITask;
import org.jkiss.dbeaver.ui.dialogs.ConfirmationDialog;
import org.jkiss.dbeaver.ui.editors.EditorUtils;
import org.jkiss.dbeaver.ui.editors.IDatabaseEditorInput;
import org.jkiss.dbeaver.ui.navigator.INavigatorModelView;
import org.jkiss.dbeaver.ui.navigator.NavigatorUtils;
import java.util.*;
......@@ -133,6 +142,27 @@ public class NavigatorHandlerRefresh extends AbstractHandler {
continue;
}
}
// Check for dirty editor (some local changes) and ask for confirmation
if (node instanceof DBNDatabaseFolder && !(node.getParentNode() instanceof DBNDatabaseFolder) && node.getParentNode() instanceof DBNDatabaseNode) {
// USe parent if this node is a folder
node = node.getParentNode();
}
IEditorPart nodeEditor = NavigatorHandlerObjectOpen.findEntityEditor(DBeaverUI.getActiveWorkbenchWindow(), node);
if (nodeEditor != null && nodeEditor.isDirty()) {
if (!new UIConfirmation() {
@Override
protected Boolean runTask() {
return ConfirmationDialog.showConfirmDialog(
null,
DBeaverPreferences.CONFIRM_ENTITY_REVERT,
ConfirmationDialog.QUESTION,
nodeEditor.getTitle()) == IDialogConstants.YES_ID;
}
}.execute()) {
continue;
}
}
setName("Refresh '" + node.getNodeName() + "'...");
try {
DBNNode refreshed = node.refreshNode(monitor, DBNEvent.FORCE_REFRESH);
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册