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

#4342 Make connections leaf items in connection selector dialog

上级 28a93dac
......@@ -277,9 +277,9 @@ public class DBeaverUI implements DBPPlatformUI {
}
@Override
public DBNNode selectObject(Object parentShell, String title, DBNNode rootNode, DBNNode selectedNode, Class<?>[] allowedTypes, Class<?>[] resultTypes) {
public DBNNode selectObject(Object parentShell, String title, DBNNode rootNode, DBNNode selectedNode, Class<?>[] allowedTypes, Class<?>[] resultTypes, Class<?>[] leafTypes) {
Shell shell = (parentShell instanceof Shell ? (Shell)parentShell : UIUtils.getActiveWorkbenchShell());
return BrowseObjectDialog.selectObject(shell, title, rootNode, selectedNode, allowedTypes, resultTypes);
return BrowseObjectDialog.selectObject(shell, title, rootNode, selectedNode, allowedTypes, resultTypes, leafTypes);
}
@Override
......
......@@ -49,6 +49,7 @@ public class BrowseObjectDialog extends Dialog {
private boolean singleSelection;
private Class<?>[] allowedTypes;
private Class<?>[] resultTypes;
private Class<?>[] leafTypes;
private List<DBNNode> selectedObjects = new ArrayList<>();
private DatabaseNavigatorTree navigatorTree;
......@@ -59,7 +60,8 @@ public class BrowseObjectDialog extends Dialog {
DBNNode selectedNode,
boolean singleSelection,
Class<?>[] allowedTypes,
Class<?>[] resultTypes)
Class<?>[] resultTypes,
Class<?>[] leafTypes)
{
super(parentShell);
this.title = title;
......@@ -68,6 +70,7 @@ public class BrowseObjectDialog extends Dialog {
this.singleSelection = singleSelection;
this.allowedTypes = allowedTypes;
this.resultTypes = resultTypes == null ? allowedTypes : resultTypes;
this.leafTypes = leafTypes;
}
@Override
......@@ -85,7 +88,20 @@ public class BrowseObjectDialog extends Dialog {
GridData gd = new GridData(GridData.FILL_BOTH);
group.setLayoutData(gd);
navigatorTree = new DatabaseNavigatorTree(group, rootNode, (singleSelection ? SWT.SINGLE : SWT.MULTI) | SWT.BORDER, false, new DatabaseNavigatorTreeFilter());
DatabaseNavigatorTreeFilter filter = new DatabaseNavigatorTreeFilter() {
@Override
public boolean isLeafObject(Object object) {
if (leafTypes != null && leafTypes.length > 0) {
for (Class<?> leafType : leafTypes) {
if (leafType.isAssignableFrom(object.getClass())) {
return true;
}
}
}
return super.isLeafObject(object);
}
};
navigatorTree = new DatabaseNavigatorTree(group, rootNode, (singleSelection ? SWT.SINGLE : SWT.MULTI) | SWT.BORDER, false, filter);
gd = new GridData(GridData.FILL_BOTH);
gd.widthHint = 500;
gd.heightHint = 500;
......@@ -184,9 +200,9 @@ public class BrowseObjectDialog extends Dialog {
}
*/
public static DBNNode selectObject(Shell parentShell, String title, DBNNode rootNode, DBNNode selectedNode, Class<?>[] allowedTypes, Class<?>[] resultTypes)
public static DBNNode selectObject(Shell parentShell, String title, DBNNode rootNode, DBNNode selectedNode, Class<?>[] allowedTypes, Class<?>[] resultTypes, Class<?>[] leafTypes)
{
BrowseObjectDialog scDialog = new BrowseObjectDialog(parentShell, title, rootNode, selectedNode, true, allowedTypes, resultTypes);
BrowseObjectDialog scDialog = new BrowseObjectDialog(parentShell, title, rootNode, selectedNode, true, allowedTypes, resultTypes, leafTypes);
if (scDialog.open() == IDialogConstants.OK_ID) {
List<DBNNode> result = scDialog.getSelectedObjects();
return result.isEmpty() ? null : result.get(0);
......@@ -197,7 +213,7 @@ 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);
BrowseObjectDialog scDialog = new BrowseObjectDialog(parentShell, title, rootNode, selectedNode, false, allowedTypes, resultTypes, null);
if (scDialog.open() == IDialogConstants.OK_ID) {
return scDialog.getSelectedObjects();
} else {
......
......@@ -99,6 +99,11 @@ public class SelectDataSourceDialog extends AbstractPopupPanel {
return true;
}
@Override
public boolean isLeafObject(Object object) {
return object instanceof DBPDataSourceContainer;
}
@Override
public boolean select(Object element) {
return element instanceof DBNProject || element instanceof DBNProjectDatabases || element instanceof DBNLocalFolder;
......
......@@ -27,4 +27,6 @@ public interface INavigatorFilter extends IFilter
boolean filterFolders();
boolean isLeafObject(Object object);
}
......@@ -28,10 +28,10 @@ import org.jkiss.dbeaver.model.runtime.VoidProgressMonitor;
import org.jkiss.dbeaver.runtime.ui.DBUserInterface;
import org.jkiss.dbeaver.ui.UIUtils;
import org.jkiss.dbeaver.ui.navigator.NavigatorUtils;
import org.jkiss.dbeaver.ui.navigator.database.load.TreeNodeSpecial;
import org.jkiss.dbeaver.ui.navigator.database.load.TreeLoadService;
import org.jkiss.dbeaver.ui.navigator.database.load.TreeLoadVisualizer;
import org.jkiss.dbeaver.ui.navigator.database.load.TreeNodeLazyExpander;
import org.jkiss.dbeaver.ui.navigator.database.load.TreeNodeSpecial;
import org.jkiss.utils.ArrayUtils;
/**
......@@ -149,6 +149,11 @@ class DatabaseNavigatorContentProvider implements IStructuredContentProvider, IT
@Override
public boolean hasChildren(Object parent)
{
if (parent instanceof DBNDatabaseNode) {
if (navigatorTree.getNavigatorFilter() != null && navigatorTree.getNavigatorFilter().isLeafObject(((DBNDatabaseNode) parent).getObject())) {
return false;
}
}
return parent instanceof DBNNode && ((DBNNode) parent).hasChildren(true);
}
......
......@@ -117,6 +117,10 @@ public class DatabaseNavigatorTree extends Composite implements INavigatorListen
treeViewer.setInput(new DatabaseNavigatorContent(rootNode));
}
INavigatorFilter getNavigatorFilter() {
return navigatorFilter;
}
@Nullable
public Text getFilterControl() {
return filterControl;
......
......@@ -16,7 +16,6 @@
*/
package org.jkiss.dbeaver.ui.navigator.database;
import org.eclipse.jface.viewers.IFilter;
import org.jkiss.dbeaver.model.access.DBAUser;
import org.jkiss.dbeaver.model.navigator.DBNDatabaseItem;
import org.jkiss.dbeaver.model.struct.DBSEntity;
......@@ -27,6 +26,8 @@ import org.jkiss.dbeaver.model.struct.rdb.DBSSequence;
import org.jkiss.dbeaver.model.struct.rdb.DBSTableIndex;
import org.jkiss.dbeaver.ui.navigator.INavigatorFilter;
import java.util.Collections;
/**
* Default database navigator filter
*/
......@@ -36,6 +37,11 @@ public class DatabaseNavigatorTreeFilter implements INavigatorFilter {
return false;
}
@Override
public boolean isLeafObject(Object object) {
return false;
}
@Override
public boolean select(Object element) {
if (!(element instanceof DBNDatabaseItem)) {
......
......@@ -38,6 +38,7 @@ import org.jkiss.dbeaver.model.navigator.DBNNode;
import org.jkiss.dbeaver.model.navigator.DBNProject;
import org.jkiss.dbeaver.model.runtime.VoidProgressMonitor;
import org.jkiss.dbeaver.model.struct.*;
import org.jkiss.dbeaver.model.struct.rdb.DBSSchema;
import org.jkiss.dbeaver.runtime.ui.DBUserInterface;
import org.jkiss.dbeaver.tools.transfer.database.*;
import org.jkiss.dbeaver.tools.transfer.wizard.DataTransferPipe;
......@@ -141,7 +142,7 @@ public class DatabaseConsumerPageMapping extends ActiveWizardPage<DataTransferWi
rootNode.getDatabases(),
selectedNode,
new Class[] {DBSObjectContainer.class},
null);
null, new Class[] { DBSSchema.class });
if (node instanceof DBNDatabaseNode) {
settings.setContainerNode((DBNDatabaseNode) node);
containerIcon.setImage(DBeaverIcons.getImage(node.getNodeIconDefault()));
......@@ -599,7 +600,7 @@ public class DatabaseConsumerPageMapping extends ActiveWizardPage<DataTransferWi
rootNode,
selectedNode,
new Class[] {DBSObjectContainer.class, DBSDataManipulator.class},
new Class[] {DBSDataManipulator.class});
new Class[] {DBSDataManipulator.class}, null);
if (node != null && node instanceof DBSWrapper) {
DBSObject object = ((DBSWrapper) node).getObject();
try {
......
......@@ -166,7 +166,7 @@ public class DatabaseProducerPageInputObjects extends ActiveWizardPage<DataTrans
rootNode,
lastSelection,
new Class[] {DBSObjectContainer.class, DBSDataContainer.class},
new Class[] {chooseConsumer ? DBSDataManipulator.class : DBSDataContainer.class});
new Class[] {chooseConsumer ? DBSDataManipulator.class : DBSDataContainer.class}, null);
if (node instanceof DBNDatabaseNode) {
lastSelection = (DBNDatabaseNode) node;
DBSObject object = ((DBNDatabaseNode) node).getObject();
......
......@@ -78,7 +78,7 @@ public class EntityAddCommand extends Command
dsNode,
null,
new Class[]{DBSTable.class},
new Class[]{DBSTable.class});
new Class[]{DBSTable.class}, null);
if (tableNode instanceof DBNDatabaseNode && ((DBNDatabaseNode) tableNode).getObject() instanceof DBSEntity) {
entity = ERDUtils.makeEntityFromObject(
monitor,
......
......@@ -125,7 +125,7 @@ public class PostgreDebugPanelFunction implements DBGConfigurationPanel {
dsNode,
curNode,
new Class[]{DBSInstance.class, DBSObjectContainer.class, PostgreProcedure.class},
new Class[]{PostgreProcedure.class});
new Class[]{PostgreProcedure.class}, null);
if (node instanceof DBNDatabaseNode && ((DBNDatabaseNode) node).getObject() instanceof PostgreProcedure) {
functionCombo.removeAll();
selectedFunction = (PostgreProcedure) ((DBNDatabaseNode) node).getObject();
......
......@@ -73,7 +73,7 @@ public interface DBPPlatformUI {
/**
* UI utilities
*/
DBNNode selectObject(Object parentShell, String title, DBNNode rootNode, DBNNode selectedNode, Class<?>[] allowedTypes, Class<?>[] resultTypes);
DBNNode selectObject(Object parentShell, String title, DBNNode rootNode, DBNNode selectedNode, Class<?>[] allowedTypes, Class<?>[] resultTypes, Class<?>[] leafTypes);
void openEntityEditor(DBSObject object);
void openEntityEditor(DBNNode selectedNode, @Nullable String defaultPageId);
......
......@@ -87,7 +87,7 @@ public class ConsoleUserInterface implements DBPPlatformUI {
}
@Override
public DBNNode selectObject(Object parentShell, String title, DBNNode rootNode, DBNNode selectedNode, Class<?>[] allowedTypes, Class<?>[] resultTypes) {
public DBNNode selectObject(Object parentShell, String title, DBNNode rootNode, DBNNode selectedNode, Class<?>[] allowedTypes, Class<?>[] resultTypes, Class<?>[] leafTypes) {
return null;
}
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册