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

#2705 Shwo confirmation on changed node refresh

上级 db39eb99
...@@ -139,12 +139,6 @@ public class NavigatorHandlerObjectOpen extends NavigatorHandlerObjectBase imple ...@@ -139,12 +139,6 @@ public class NavigatorHandlerObjectOpen extends NavigatorHandlerObjectBase imple
openConnectionEditor(workbenchWindow, dataSourceContainer); openConnectionEditor(workbenchWindow, dataSourceContainer);
return null; return null;
} }
/*
if (!selectedNode.isPersisted()) {
log.debug("Node '" + selectedNode.getNodeName() + "' s not persisted. Open not possible.");
return null;
}
*/
try { try {
String defaultFolderId = null; String defaultFolderId = null;
if (selectedNode instanceof DBNDatabaseFolder && !(selectedNode.getParentNode() instanceof DBNDatabaseFolder) && selectedNode.getParentNode() instanceof DBNDatabaseNode) { if (selectedNode instanceof DBNDatabaseFolder && !(selectedNode.getParentNode() instanceof DBNDatabaseFolder) && selectedNode.getParentNode() instanceof DBNDatabaseNode) {
...@@ -152,36 +146,14 @@ public class NavigatorHandlerObjectOpen extends NavigatorHandlerObjectBase imple ...@@ -152,36 +146,14 @@ public class NavigatorHandlerObjectOpen extends NavigatorHandlerObjectBase imple
selectedNode = selectedNode.getParentNode(); selectedNode = selectedNode.getParentNode();
} }
DatabaseEditorInputFactory.setLookupEditor(true); IEditorPart editor = findEntityEditor(workbenchWindow, selectedNode);
try { if (editor != null) {
for (IEditorReference ref : workbenchWindow.getActivePage().getEditorReferences()) { if (editor instanceof ITabbedFolderContainer && defaultFolderId != null) {
IEditorInput editorInput; // Activate default folder
try { ((ITabbedFolderContainer) editor).switchFolder(defaultFolderId);
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;
}
}
} }
} workbenchWindow.getActivePage().activate(editor);
finally { return editor;
DatabaseEditorInputFactory.setLookupEditor(false);
} }
if (selectedNode instanceof DBNDatabaseObject) { if (selectedNode instanceof DBNDatabaseObject) {
...@@ -222,6 +194,35 @@ public class NavigatorHandlerObjectOpen extends NavigatorHandlerObjectBase imple ...@@ -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 { private static void refreshDatabaseNode(@NotNull DBNDatabaseNode selectedNode) throws InvocationTargetException, InterruptedException {
final DBNDatabaseNode nodeToRefresh = selectedNode; final DBNDatabaseNode nodeToRefresh = selectedNode;
DBeaverUI.runInProgressService(new DBRRunnableWithProgress() { DBeaverUI.runInProgressService(new DBRRunnableWithProgress() {
......
...@@ -24,12 +24,16 @@ import org.eclipse.core.runtime.Status; ...@@ -24,12 +24,16 @@ import org.eclipse.core.runtime.Status;
import org.eclipse.core.runtime.jobs.IJobChangeEvent; import org.eclipse.core.runtime.jobs.IJobChangeEvent;
import org.eclipse.core.runtime.jobs.Job; import org.eclipse.core.runtime.jobs.Job;
import org.eclipse.core.runtime.jobs.JobChangeAdapter; import org.eclipse.core.runtime.jobs.JobChangeAdapter;
import org.eclipse.jface.dialogs.IDialogConstants;
import org.eclipse.jface.viewers.ISelection; import org.eclipse.jface.viewers.ISelection;
import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.ui.IEditorPart; import org.eclipse.ui.IEditorPart;
import org.eclipse.ui.IWorkbenchPart; import org.eclipse.ui.IWorkbenchPart;
import org.eclipse.ui.handlers.HandlerUtil; import org.eclipse.ui.handlers.HandlerUtil;
import org.jkiss.dbeaver.DBeaverPreferences;
import org.jkiss.dbeaver.Log; 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.DBNDatabaseNode;
import org.jkiss.dbeaver.model.navigator.DBNEvent; import org.jkiss.dbeaver.model.navigator.DBNEvent;
import org.jkiss.dbeaver.model.navigator.DBNNode; import org.jkiss.dbeaver.model.navigator.DBNNode;
...@@ -37,8 +41,13 @@ import org.jkiss.dbeaver.model.runtime.AbstractJob; ...@@ -37,8 +41,13 @@ 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.runtime.ui.DBUserInterface; import org.jkiss.dbeaver.runtime.ui.DBUserInterface;
import org.jkiss.dbeaver.ui.IRefreshablePart; 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.editors.IDatabaseEditorInput;
import org.jkiss.dbeaver.ui.navigator.INavigatorModelView; import org.jkiss.dbeaver.ui.navigator.INavigatorModelView;
import org.jkiss.dbeaver.ui.navigator.NavigatorUtils;
import java.util.*; import java.util.*;
...@@ -133,6 +142,27 @@ public class NavigatorHandlerRefresh extends AbstractHandler { ...@@ -133,6 +142,27 @@ public class NavigatorHandlerRefresh extends AbstractHandler {
continue; 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() + "'..."); setName("Refresh '" + node.getNodeName() + "'...");
try { try {
DBNNode refreshed = node.refreshNode(monitor, DBNEvent.FORCE_REFRESH); 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.
先完成此消息的编辑!
想要评论请 注册