From b7d002fb472e982a2ac6bc1430d56b3f06484430 Mon Sep 17 00:00:00 2001 From: serge-rider Date: Sat, 2 Mar 2019 23:35:35 +0300 Subject: [PATCH] #5378 Object editors open fix (Object input id uniqueness) Former-commit-id: 941114f576d4f5c33a200f86da736f066115a45e --- .../DataSourceToolsContributor.java | 25 +++++++++----- .../ui/editors/object/ObjectEditorInput.java | 34 ++++++++++++++++--- 2 files changed, 45 insertions(+), 14 deletions(-) diff --git a/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/ui/actions/datasource/DataSourceToolsContributor.java b/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/ui/actions/datasource/DataSourceToolsContributor.java index 6e67324817..1556d4ff27 100644 --- a/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/ui/actions/datasource/DataSourceToolsContributor.java +++ b/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/ui/actions/datasource/DataSourceToolsContributor.java @@ -23,6 +23,7 @@ import org.eclipse.jface.viewers.ISelectionProvider; import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.ui.*; import org.jkiss.dbeaver.model.navigator.DBNDatabaseNode; +import org.jkiss.dbeaver.model.navigator.DBNDatabaseObject; import org.jkiss.dbeaver.model.navigator.meta.DBXTreeNode; import org.jkiss.dbeaver.model.navigator.meta.DBXTreeObject; import org.jkiss.dbeaver.model.struct.DBSObject; @@ -35,8 +36,8 @@ import org.jkiss.dbeaver.ui.DBeaverIcons; import org.jkiss.dbeaver.ui.UIUtils; import org.jkiss.dbeaver.ui.actions.common.EmptyListAction; import org.jkiss.dbeaver.ui.actions.common.ExecuteToolHandler; -import org.jkiss.dbeaver.ui.editors.DatabaseEditorInput; import org.jkiss.dbeaver.ui.editors.IDatabaseEditorInput; +import org.jkiss.dbeaver.ui.editors.object.ObjectEditorInput; import org.jkiss.dbeaver.ui.navigator.NavigatorUtils; import org.jkiss.dbeaver.utils.RuntimeUtils; import org.jkiss.utils.CommonUtils; @@ -84,13 +85,15 @@ public class DataSourceToolsContributor extends DataSourceMenuContributor findObjectNodes(dsNode.getMeta(), navigatorObjectEditors, processedNodes); } if (!navigatorObjectEditors.isEmpty()) { - DBNDatabaseNode objectNode = dsNode; -// DBNDatabaseNode objectNode = NavigatorUtils.getNodeByObject(selectedObject); -// if (objectNode == null) { -// objectNode = dsNode; -// } menuItems.add(new Separator()); for (DBXTreeObject editorMeta : navigatorObjectEditors) { + + //DBNDatabaseNode objectNode = dsNode; + DBNDatabaseNode objectNode = NavigatorUtils.getNodeByObject(selectedObject); + if (objectNode == null) { + objectNode = dsNode; + } + menuItems.add(new ActionContributionItem(new OpenToolsEditorAction(activePage, objectNode, editorMeta))); } } @@ -189,12 +192,16 @@ public class DataSourceToolsContributor extends DataSourceMenuContributor @Override public void run() { - DatabaseEditorInput objectInput = new DatabaseEditorInput(databaseNode) { + ObjectEditorInput editorInput; + if (databaseNode instanceof DBNDatabaseObject) { + editorInput = new ObjectEditorInput((DBNDatabaseObject) databaseNode); + } else { + editorInput = new ObjectEditorInput(databaseNode, editorMeta); + } - }; try { workbenchPage.openEditor( - objectInput, + editorInput, editorMeta.getEditorId()); } catch (PartInitException e) { DBWorkbench.getPlatformUI().showError("Editor open", "Error opening tool editor '" + editorMeta.getEditorId() + "'", e.getStatus()); diff --git a/plugins/org.jkiss.dbeaver.ui.editors.base/src/org/jkiss/dbeaver/ui/editors/object/ObjectEditorInput.java b/plugins/org.jkiss.dbeaver.ui.editors.base/src/org/jkiss/dbeaver/ui/editors/object/ObjectEditorInput.java index 043bd6f37d..29cb8f0917 100644 --- a/plugins/org.jkiss.dbeaver.ui.editors.base/src/org/jkiss/dbeaver/ui/editors/object/ObjectEditorInput.java +++ b/plugins/org.jkiss.dbeaver.ui.editors.base/src/org/jkiss/dbeaver/ui/editors/object/ObjectEditorInput.java @@ -17,36 +17,60 @@ package org.jkiss.dbeaver.ui.editors.object; import org.eclipse.jface.resource.ImageDescriptor; +import org.jkiss.code.NotNull; +import org.jkiss.dbeaver.model.navigator.DBNDatabaseNode; import org.jkiss.dbeaver.model.navigator.DBNDatabaseObject; +import org.jkiss.dbeaver.model.navigator.meta.DBXTreeObject; import org.jkiss.dbeaver.ui.DBeaverIcons; import org.jkiss.dbeaver.ui.editors.DatabaseEditorInput; /** * ObjectEditorInput */ -public class ObjectEditorInput extends DatabaseEditorInput +public class ObjectEditorInput extends DatabaseEditorInput { - public ObjectEditorInput(DBNDatabaseObject dbmNode) + + private DBXTreeObject editorMeta; + + public ObjectEditorInput(@NotNull DBNDatabaseObject dbmNode) + { + super(dbmNode); + } + + public ObjectEditorInput(@NotNull DBNDatabaseNode dbmNode, @NotNull DBXTreeObject meta) { super(dbmNode); + this.editorMeta = meta; + } + + public DBXTreeObject getEditorMeta() { + if (editorMeta != null) { + return editorMeta; + } else { + return ((DBXTreeObject)getNavigatorNode().getMeta()); + } } @Override public ImageDescriptor getImageDescriptor() { - DBNDatabaseObject node = getNavigatorNode(); + DBNDatabaseNode node = getNavigatorNode(); // IEditorDescriptor editorDescriptor = node.getEditorDescriptor(); // if (editorDescriptor != null) { // return editorDescriptor.getImageDescriptor(); // } else { - return DBeaverIcons.getImageDescriptor(node.getNodeIconDefault()); + return DBeaverIcons.getImageDescriptor(getEditorMeta().getDefaultIcon()); // } } @Override public String getToolTipText() { - return getNavigatorNode().getMeta().getDescription(); + return getEditorMeta().getDescription(); } + @Override + public boolean equals(Object obj) { + return obj instanceof ObjectEditorInput && super.equals(obj) && getEditorMeta() == ((ObjectEditorInput) obj).getEditorMeta(); + } } \ No newline at end of file -- GitLab