提交 4533fdeb 编写于 作者: S serge-rider

Navigator utils additions. Object browser fix

上级 9d6840d2
......@@ -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<DataTransferWi
}
DBNNode selectedNode = rootNode;
if (mapping.getTarget() != null) {
selectedNode = DBeaverCore.getInstance().getNavigatorModel().getNodeByObject(mapping.getTarget());
selectedNode = NavigatorUtils.getNodeByObject(mapping.getTarget());
}
DBNNode node = BrowseObjectDialog.selectObject(
getShell(),
......
......@@ -52,6 +52,7 @@ import org.jkiss.dbeaver.ui.data.IValueController;
import org.jkiss.dbeaver.ui.data.IValueEditor;
import org.jkiss.dbeaver.ui.editors.data.DatabaseDataEditor;
import org.jkiss.dbeaver.ui.editors.object.struct.EditDictionaryPage;
import org.jkiss.dbeaver.ui.navigator.NavigatorUtils;
import org.jkiss.utils.CommonUtils;
import java.lang.reflect.InvocationTargetException;
......@@ -140,7 +141,7 @@ public class ReferenceValueEditor {
@Override
public void run(DBRProgressMonitor monitor)
throws InvocationTargetException, InterruptedException {
DBNDatabaseNode tableNode = DBeaverCore.getInstance().getNavigatorModel().getNodeByObject(
DBNDatabaseNode tableNode = NavigatorUtils.getNodeByObject(
monitor,
refTable,
true
......
......@@ -127,7 +127,11 @@ public class BrowseObjectDialog extends Dialog {
DBNNode node = (DBNNode) iter.next();
if (node instanceof DBSWrapper) {
DBSObject object = DBUtils.getAdapter(DBSObject.class, ((DBSWrapper) node).getObject());
if (object != null && matchesType(object.getClass(), true)) {
if (object != null) {
if (!matchesType(object.getClass(), true)) {
selectedObjects.clear();
break;
}
selectedObjects.add(node);
}
}
......@@ -191,4 +195,14 @@ public class BrowseObjectDialog extends Dialog {
}
}
public static List<DBNNode> 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;
}
}
}
......@@ -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() {
......
......@@ -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();
}
}
}
......
......@@ -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());
}
......
......@@ -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) {
......
......@@ -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(),
......
......@@ -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$
}
......
......@@ -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;
}
......
......@@ -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<OBJECT> 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<OBJECT> 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> T getAdapter(Class<T> adapter) {
if (adapter == DBPPropertySource.class) {
return getPropertyCollector();
return adapter.cast(getPropertyCollector());
}
return null;
}
......
......@@ -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 {
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册