From 4533fdeba2e89ef65f702cb6597e07b47af6bd43 Mon Sep 17 00:00:00 2001 From: serge-rider Date: Wed, 3 Jan 2018 17:44:29 +0300 Subject: [PATCH] Navigator utils additions. Object browser fix --- .../database/DatabaseConsumerPageMapping.java | 3 +- .../ui/data/editors/ReferenceValueEditor.java | 3 +- .../ui/dialogs/BrowseObjectDialog.java | 16 +++++++++- .../ui/editors/entity/EntityHyperlink.java | 3 +- .../TabbedFolderPageProperties.java | 6 ++-- .../sql/syntax/SQLCompletionAnalyzer.java | 3 +- .../dbeaver/ui/navigator/NavigatorUtils.java | 23 +++++++++++++- .../ui/preferences/TargetPrefPage.java | 3 +- .../bookmarks/BookmarksHandlerImpl.java | 3 +- .../ext/erd/editor/ERDEditorViewer.java | 3 +- .../dbeaver/ext/erd/model/ERDObject.java | 31 +++++++------------ .../oracle/views/OracleCompilerDialog.java | 5 +-- 12 files changed, 68 insertions(+), 34 deletions(-) diff --git a/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/tools/transfer/database/DatabaseConsumerPageMapping.java b/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/tools/transfer/database/DatabaseConsumerPageMapping.java index 3e5e0e4dc7..10cccebb65 100644 --- a/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/tools/transfer/database/DatabaseConsumerPageMapping.java +++ b/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/tools/transfer/database/DatabaseConsumerPageMapping.java @@ -56,6 +56,7 @@ import org.jkiss.dbeaver.ui.dialogs.ActiveWizardPage; import org.jkiss.dbeaver.ui.dialogs.BrowseObjectDialog; import org.jkiss.dbeaver.ui.dialogs.EnterNameDialog; import org.jkiss.dbeaver.ui.dialogs.sql.ViewSQLDialog; +import org.jkiss.dbeaver.ui.navigator.NavigatorUtils; import org.jkiss.utils.CommonUtils; import java.util.ArrayList; @@ -601,7 +602,7 @@ public class DatabaseConsumerPageMapping extends ActiveWizardPage selectObjects(Shell parentShell, String title, DBNNode rootNode, DBNNode selectedNode, Class[] allowedTypes, Class[] resultTypes) + { + BrowseObjectDialog scDialog = new BrowseObjectDialog(parentShell, title, rootNode, selectedNode, false, allowedTypes, resultTypes); + if (scDialog.open() == IDialogConstants.OK_ID) { + return scDialog.getSelectedObjects(); + } else { + return null; + } + } + } diff --git a/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/ui/editors/entity/EntityHyperlink.java b/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/ui/editors/entity/EntityHyperlink.java index cdc9dd6fa7..5059fb8042 100644 --- a/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/ui/editors/entity/EntityHyperlink.java +++ b/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/ui/editors/entity/EntityHyperlink.java @@ -22,7 +22,6 @@ import org.eclipse.jface.text.IRegion; import org.eclipse.jface.text.hyperlink.IHyperlink; import org.eclipse.ui.IWorkbenchSite; import org.jkiss.dbeaver.DBException; -import org.jkiss.dbeaver.core.DBeaverCore; import org.jkiss.dbeaver.core.DBeaverUI; import org.jkiss.dbeaver.model.DBPEvaluationContext; import org.jkiss.dbeaver.model.DBUtils; @@ -89,7 +88,7 @@ public class EntityHyperlink implements IHyperlink monitor.beginTask("Resolve object " + reference.getName(), 1); try { DBSObject object = reference.resolveObject(monitor); - node = DBeaverCore.getInstance().getNavigatorModel().getNodeByObject(monitor, object, true); + node = NavigatorUtils.getNodeByObject(monitor, object, true); if (node != null) { DBeaverUI.asyncExec(new Runnable() { diff --git a/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/ui/editors/entity/properties/TabbedFolderPageProperties.java b/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/ui/editors/entity/properties/TabbedFolderPageProperties.java index 25f068786d..33ae3607ee 100644 --- a/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/ui/editors/entity/properties/TabbedFolderPageProperties.java +++ b/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/ui/editors/entity/properties/TabbedFolderPageProperties.java @@ -146,8 +146,10 @@ public class TabbedFolderPageProperties extends TabbedFolderPage implements IRef public void refreshPart(Object source, boolean force) { if (force) { curPropertySource = input.getPropertySource(); - propertyTree.loadProperties(curPropertySource); - refreshProperties(); + if (propertyTree != null) { + propertyTree.loadProperties(curPropertySource); + refreshProperties(); + } } } diff --git a/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/ui/editors/sql/syntax/SQLCompletionAnalyzer.java b/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/ui/editors/sql/syntax/SQLCompletionAnalyzer.java index 4d8b64f6a3..8e81113cb7 100644 --- a/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/ui/editors/sql/syntax/SQLCompletionAnalyzer.java +++ b/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/ui/editors/sql/syntax/SQLCompletionAnalyzer.java @@ -35,6 +35,7 @@ import org.jkiss.dbeaver.ui.DBeaverIcons; import org.jkiss.dbeaver.ui.TextUtils; import org.jkiss.dbeaver.ui.editors.sql.SQLEditorBase; import org.jkiss.dbeaver.ui.editors.sql.SQLPreferenceConstants; +import org.jkiss.dbeaver.ui.navigator.NavigatorUtils; import org.jkiss.utils.CommonUtils; import java.util.*; @@ -530,7 +531,7 @@ class SQLCompletionAnalyzer private SQLCompletionProposal makeProposalsFromObject(DBSObject object) { - DBNNode node = DBeaverCore.getInstance().getNavigatorModel().getNodeByObject(monitor, object, false); + DBNNode node = NavigatorUtils.getNodeByObject(monitor, object, false); return makeProposalsFromObject(object, node == null ? null : node.getNodeIconDefault()); } diff --git a/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/ui/navigator/NavigatorUtils.java b/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/ui/navigator/NavigatorUtils.java index 8af1c39262..b1dd1ed49a 100644 --- a/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/ui/navigator/NavigatorUtils.java +++ b/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/ui/navigator/NavigatorUtils.java @@ -70,7 +70,7 @@ import java.util.*; */ public class NavigatorUtils { - public static final String MB_NAVIGATOR_ADDITIONS = "navigator_additions"; + private static final String MB_NAVIGATOR_ADDITIONS = "navigator_additions"; private static final Log log = Log.getLog(NavigatorUtils.class); @@ -542,6 +542,27 @@ public class NavigatorUtils { return true; } + public static DBNDatabaseNode getNodeByObject(DBSObject object) { + return DBeaverCore.getInstance().getNavigatorModel().getNodeByObject(object); + } + + public static DBNDatabaseNode getNodeByObject(DBRProgressMonitor monitor, DBSObject object, boolean addFiltered) { + return DBeaverCore.getInstance().getNavigatorModel().getNodeByObject(monitor, object, addFiltered); + } + + public static DBNDatabaseNode getChildFolder(DBRProgressMonitor monitor, DBNDatabaseNode node, Class folderType) { + try { + for (DBNDatabaseNode childNode : node.getChildren(monitor)) { + if (childNode instanceof DBNDatabaseFolder && folderType.getName().equals(((DBNDatabaseFolder) childNode).getMeta().getType())) { + return childNode; + } + } + } catch (DBException e) { + log.error("Error reading child folder", e); + } + return null; + } + public static DBNDataSource getDataSourceNode(DBNNode node) { for (DBNNode pn = node; pn != null; pn = pn.getParentNode()) { if (pn instanceof DBNDataSource) { diff --git a/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/ui/preferences/TargetPrefPage.java b/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/ui/preferences/TargetPrefPage.java index 0a54f7a37f..a8c087c302 100644 --- a/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/ui/preferences/TargetPrefPage.java +++ b/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/ui/preferences/TargetPrefPage.java @@ -45,6 +45,7 @@ import org.jkiss.dbeaver.model.preferences.DBPPreferenceStore; import org.jkiss.dbeaver.ui.UIUtils; import org.jkiss.dbeaver.ui.dialogs.connection.SelectDataSourceDialog; import org.jkiss.dbeaver.ui.editors.IDatabaseEditorInput; +import org.jkiss.dbeaver.ui.navigator.NavigatorUtils; import org.jkiss.dbeaver.utils.PrefUtils; /** @@ -292,7 +293,7 @@ public abstract class TargetPrefPage extends AbstractPrefPage implements IWorkbe if (dialog.open() != IDialogConstants.CANCEL_ID) { DBPDataSourceContainer dataSource = dialog.getDataSource(); if (dataSource != null) { - DBNNode dsNode = DBeaverCore.getInstance().getNavigatorModel().getNodeByObject(dataSource); + DBNNode dsNode = NavigatorUtils.getNodeByObject(dataSource); if (dsNode instanceof DBNDataSource) { prefDialog = PreferencesUtil.createPropertyDialogOn( getShell(), diff --git a/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/ui/resources/bookmarks/BookmarksHandlerImpl.java b/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/ui/resources/bookmarks/BookmarksHandlerImpl.java index fe666cbfee..c15a12bd33 100644 --- a/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/ui/resources/bookmarks/BookmarksHandlerImpl.java +++ b/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/ui/resources/bookmarks/BookmarksHandlerImpl.java @@ -35,6 +35,7 @@ import org.jkiss.dbeaver.model.runtime.DBRProgressMonitor; import org.jkiss.dbeaver.model.runtime.DBRRunnableWithProgress; import org.jkiss.dbeaver.runtime.ui.DBUserInterface; import org.jkiss.dbeaver.ui.actions.navigator.NavigatorHandlerObjectOpen; +import org.jkiss.dbeaver.ui.navigator.NavigatorUtils; import org.jkiss.dbeaver.ui.resources.AbstractResourceHandler; import org.jkiss.dbeaver.ui.resources.ResourceUtils; import org.jkiss.dbeaver.utils.ContentUtils; @@ -117,7 +118,7 @@ public class BookmarksHandlerImpl extends AbstractResourceHandler { if (dataSourceContainer == null) { throw new DBException("Can't find datasource '" + storage.getDataSourceId() + "'"); //$NON-NLS-2$ } - final DBNDataSource dsNode = (DBNDataSource)DBeaverCore.getInstance().getNavigatorModel().getNodeByObject(dataSourceContainer); + final DBNDataSource dsNode = (DBNDataSource) NavigatorUtils.getNodeByObject(dataSourceContainer); if (dsNode == null) { throw new DBException("Can't find datasource node for '" + dataSourceContainer.getName() + "'"); //$NON-NLS-2$ } diff --git a/plugins/org.jkiss.dbeaver.ext.erd/src/org/jkiss/dbeaver/ext/erd/editor/ERDEditorViewer.java b/plugins/org.jkiss.dbeaver.ext.erd/src/org/jkiss/dbeaver/ext/erd/editor/ERDEditorViewer.java index 6961237c7f..fecca798c1 100644 --- a/plugins/org.jkiss.dbeaver.ext.erd/src/org/jkiss/dbeaver/ext/erd/editor/ERDEditorViewer.java +++ b/plugins/org.jkiss.dbeaver.ext.erd/src/org/jkiss/dbeaver/ext/erd/editor/ERDEditorViewer.java @@ -26,6 +26,7 @@ import org.jkiss.dbeaver.Log; import org.jkiss.dbeaver.core.DBeaverCore; import org.jkiss.dbeaver.ext.erd.part.EntityPart; import org.jkiss.dbeaver.model.struct.DBSEntity; +import org.jkiss.dbeaver.ui.navigator.NavigatorUtils; import java.util.ArrayList; import java.util.Iterator; @@ -149,7 +150,7 @@ public class ERDEditorViewer extends Viewer private Object convertObject(Object object) { if (object instanceof EntityPart) { final DBSEntity entity = ((EntityPart) object).getTable().getObject(); - return entity == null ? null : DBeaverCore.getInstance().getNavigatorModel().getNodeByObject(entity); + return entity == null ? null : NavigatorUtils.getNodeByObject(entity); } return object; } diff --git a/plugins/org.jkiss.dbeaver.ext.erd/src/org/jkiss/dbeaver/ext/erd/model/ERDObject.java b/plugins/org.jkiss.dbeaver.ext.erd/src/org/jkiss/dbeaver/ext/erd/model/ERDObject.java index 5c5fbb2b69..97634e6265 100644 --- a/plugins/org.jkiss.dbeaver.ext.erd/src/org/jkiss/dbeaver/ext/erd/model/ERDObject.java +++ b/plugins/org.jkiss.dbeaver.ext.erd/src/org/jkiss/dbeaver/ext/erd/model/ERDObject.java @@ -21,20 +21,16 @@ package org.jkiss.dbeaver.ext.erd.model; import org.eclipse.core.runtime.IAdaptable; import org.jkiss.dbeaver.Log; -import org.jkiss.dbeaver.core.DBeaverCore; import org.jkiss.dbeaver.core.DBeaverUI; import org.jkiss.dbeaver.model.DBPNamedObject; import org.jkiss.dbeaver.model.navigator.DBNDatabaseNode; import org.jkiss.dbeaver.model.preferences.DBPPropertySource; -import org.jkiss.dbeaver.model.runtime.DBRProgressMonitor; -import org.jkiss.dbeaver.model.runtime.DBRRunnableWithProgress; import org.jkiss.dbeaver.model.struct.DBSObject; import org.jkiss.dbeaver.runtime.properties.PropertyCollector; import org.jkiss.dbeaver.ui.navigator.NavigatorUtils; import java.beans.PropertyChangeListener; import java.beans.PropertyChangeSupport; -import java.lang.reflect.InvocationTargetException; /** * Provides base class support for model objects to participate in event handling framework @@ -50,7 +46,7 @@ public abstract class ERDObject implements IAdaptable, DBPNamedObject public static final String OUTPUT = "OUTPUT"; public static final String NAME = "NAME"; - protected transient PropertyChangeSupport listeners = new PropertyChangeSupport(this); + private transient PropertyChangeSupport listeners = new PropertyChangeSupport(this); protected OBJECT object; private PropertyCollector propertyCollector = null; @@ -97,28 +93,23 @@ public abstract class ERDObject implements IAdaptable, DBPNamedObject public void openEditor() { if (object instanceof DBSObject) { - DBeaverUI.runUIJob("Open object editor", new DBRRunnableWithProgress() { - @Override - public void run(DBRProgressMonitor monitor) - throws InvocationTargetException, InterruptedException - { - DBNDatabaseNode node = DBeaverCore.getInstance().getNavigatorModel().getNodeByObject( - monitor, - (DBSObject) object, - true - ); - if (node != null) { - NavigatorUtils.openNavigatorNode(node, DBeaverUI.getActiveWorkbenchWindow()); - } + DBeaverUI.runUIJob("Open object editor", monitor -> { + DBNDatabaseNode node = NavigatorUtils.getNodeByObject( + monitor, + (DBSObject) object, + true + ); + if (node != null) { + NavigatorUtils.openNavigatorNode(node, DBeaverUI.getActiveWorkbenchWindow()); } }); } } @Override - public Object getAdapter(Class adapter) { + public T getAdapter(Class adapter) { if (adapter == DBPPropertySource.class) { - return getPropertyCollector(); + return adapter.cast(getPropertyCollector()); } return null; } diff --git a/plugins/org.jkiss.dbeaver.ext.oracle/src/org/jkiss/dbeaver/ext/oracle/views/OracleCompilerDialog.java b/plugins/org.jkiss.dbeaver.ext.oracle/src/org/jkiss/dbeaver/ext/oracle/views/OracleCompilerDialog.java index 5ff1ece5ac..8aa566ef2e 100644 --- a/plugins/org.jkiss.dbeaver.ext.oracle/src/org/jkiss/dbeaver/ext/oracle/views/OracleCompilerDialog.java +++ b/plugins/org.jkiss.dbeaver.ext.oracle/src/org/jkiss/dbeaver/ext/oracle/views/OracleCompilerDialog.java @@ -44,6 +44,7 @@ import org.jkiss.dbeaver.ui.actions.navigator.NavigatorHandlerObjectOpen; import org.jkiss.dbeaver.ui.controls.ListContentProvider; import org.jkiss.dbeaver.ui.controls.ObjectCompilerLogViewer; import org.jkiss.dbeaver.ui.dialogs.BaseDialog; +import org.jkiss.dbeaver.ui.navigator.NavigatorUtils; import org.jkiss.utils.CommonUtils; import java.lang.reflect.InvocationTargetException; @@ -110,7 +111,7 @@ public class OracleCompilerDialog extends BaseDialog public void update(ViewerCell cell) { DBSObject unit = (DBSObject) cell.getElement(); - final DBNDatabaseNode node = DBeaverCore.getInstance().getNavigatorModel().getNodeByObject(unit); + final DBNDatabaseNode node = NavigatorUtils.getNodeByObject(unit); if (node != null) { cell.setText(node.getNodeName()); cell.setImage(DBeaverIcons.getImage(node.getNodeIconDefault())); @@ -124,7 +125,7 @@ public class OracleCompilerDialog extends BaseDialog public void update(ViewerCell cell) { DBSObject unit = (DBSObject) cell.getElement(); - final DBNDatabaseNode node = DBeaverCore.getInstance().getNavigatorModel().getNodeByObject(unit); + final DBNDatabaseNode node = NavigatorUtils.getNodeByObject(unit); if (node != null) { cell.setText(node.getNodeType()); } else { -- GitLab