提交 316121d0 编写于 作者: S Serge Rider

#5384 FK create dialog: container selector. Nav model refactoring

上级 99a08813
...@@ -296,23 +296,23 @@ public class DBeaverUI implements DBPPlatformUI { ...@@ -296,23 +296,23 @@ public class DBeaverUI implements DBPPlatformUI {
} }
@Override @Override
public DBNNode selectObject(Object parentShell, String title, DBNNode rootNode, DBNNode selectedNode, Class<?>[] allowedTypes, Class<?>[] resultTypes, Class<?>[] leafTypes) { public DBNNode selectObject(@NotNull Object parentShell, String title, DBNNode rootNode, DBNNode selectedNode, Class<?>[] allowedTypes, Class<?>[] resultTypes, Class<?>[] leafTypes) {
Shell shell = (parentShell instanceof Shell ? (Shell)parentShell : UIUtils.getActiveWorkbenchShell()); Shell shell = (parentShell instanceof Shell ? (Shell)parentShell : UIUtils.getActiveWorkbenchShell());
return BrowseObjectDialog.selectObject(shell, title, rootNode, selectedNode, allowedTypes, resultTypes, leafTypes); return BrowseObjectDialog.selectObject(shell, title, rootNode, selectedNode, allowedTypes, resultTypes, leafTypes);
} }
@Override @Override
public void openEntityEditor(DBSObject object) { public void openEntityEditor(@NotNull DBSObject object) {
NavigatorHandlerObjectOpen.openEntityEditor(object); NavigatorHandlerObjectOpen.openEntityEditor(object);
} }
@Override @Override
public void openEntityEditor(DBNNode selectedNode, String defaultPageId) { public void openEntityEditor(@NotNull DBNNode selectedNode, String defaultPageId) {
NavigatorHandlerObjectOpen.openEntityEditor(selectedNode, defaultPageId, UIUtils.getActiveWorkbenchWindow()); NavigatorHandlerObjectOpen.openEntityEditor(selectedNode, defaultPageId, UIUtils.getActiveWorkbenchWindow());
} }
@Override @Override
public void openConnectionEditor(DBPDataSourceContainer dataSourceContainer) { public void openConnectionEditor(@NotNull DBPDataSourceContainer dataSourceContainer) {
UIUtils.syncExec(() -> UIUtils.syncExec(() ->
NavigatorHandlerObjectOpen.openConnectionEditor( NavigatorHandlerObjectOpen.openConnectionEditor(
UIUtils.getActiveWorkbenchWindow(), UIUtils.getActiveWorkbenchWindow(),
...@@ -320,7 +320,7 @@ public class DBeaverUI implements DBPPlatformUI { ...@@ -320,7 +320,7 @@ public class DBeaverUI implements DBPPlatformUI {
} }
@Override @Override
public void executeProcess(final DBRProcessDescriptor processDescriptor) { public void executeProcess(@NotNull final DBRProcessDescriptor processDescriptor) {
processDescriptor.setProcessListener(new DBRProcessListener() { processDescriptor.setProcessListener(new DBRProcessListener() {
@Override @Override
public void onProcessStarted() { public void onProcessStarted() {
...@@ -356,10 +356,11 @@ public class DBeaverUI implements DBPPlatformUI { ...@@ -356,10 +356,11 @@ public class DBeaverUI implements DBPPlatformUI {
} }
@Override @Override
public void executeInUI(Runnable runnable) { public void executeInUI(@NotNull Runnable runnable) {
UIUtils.syncExec(runnable); UIUtils.syncExec(runnable);
} }
@NotNull
@Override @Override
public <RESULT> Job createLoadingService(ILoadService<RESULT> loadingService, ILoadVisualizer<RESULT> visualizer) { public <RESULT> Job createLoadingService(ILoadService<RESULT> loadingService, ILoadVisualizer<RESULT> visualizer) {
return LoadingJob.createService(loadingService, visualizer); return LoadingJob.createService(loadingService, visualizer);
......
...@@ -61,7 +61,7 @@ import org.jkiss.dbeaver.runtime.properties.PropertyCollector; ...@@ -61,7 +61,7 @@ import org.jkiss.dbeaver.runtime.properties.PropertyCollector;
import org.jkiss.dbeaver.ui.*; import org.jkiss.dbeaver.ui.*;
import org.jkiss.dbeaver.ui.controls.ListContentProvider; import org.jkiss.dbeaver.ui.controls.ListContentProvider;
import org.jkiss.dbeaver.ui.controls.autorefresh.AutoRefreshControl; import org.jkiss.dbeaver.ui.controls.autorefresh.AutoRefreshControl;
import org.jkiss.dbeaver.ui.controls.itemlist.DatabaseObjectListControl; import org.jkiss.dbeaver.ui.navigator.itemlist.DatabaseObjectListControl;
import org.jkiss.dbeaver.ui.editors.StringEditorInput; import org.jkiss.dbeaver.ui.editors.StringEditorInput;
import org.jkiss.dbeaver.ui.editors.SubEditorSite; import org.jkiss.dbeaver.ui.editors.SubEditorSite;
import org.jkiss.dbeaver.ui.editors.sql.SQLEditorBase; import org.jkiss.dbeaver.ui.editors.sql.SQLEditorBase;
......
...@@ -30,7 +30,7 @@ import org.jkiss.dbeaver.model.exec.DBCSession; ...@@ -30,7 +30,7 @@ import org.jkiss.dbeaver.model.exec.DBCSession;
import org.jkiss.dbeaver.model.runtime.DBRProgressMonitor; import org.jkiss.dbeaver.model.runtime.DBRProgressMonitor;
import org.jkiss.dbeaver.model.runtime.load.DatabaseLoadService; import org.jkiss.dbeaver.model.runtime.load.DatabaseLoadService;
import org.jkiss.dbeaver.ui.LoadingJob; import org.jkiss.dbeaver.ui.LoadingJob;
import org.jkiss.dbeaver.ui.controls.itemlist.DatabaseObjectListControl; import org.jkiss.dbeaver.ui.navigator.itemlist.DatabaseObjectListControl;
import java.lang.reflect.InvocationTargetException; import java.lang.reflect.InvocationTargetException;
import java.util.Collection; import java.util.Collection;
......
...@@ -27,6 +27,7 @@ import org.eclipse.swt.events.SelectionEvent; ...@@ -27,6 +27,7 @@ import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.*; import org.eclipse.swt.widgets.*;
import org.jkiss.code.Nullable;
import org.jkiss.dbeaver.DBException; import org.jkiss.dbeaver.DBException;
import org.jkiss.dbeaver.Log; import org.jkiss.dbeaver.Log;
import org.jkiss.dbeaver.model.DBIcon; import org.jkiss.dbeaver.model.DBIcon;
...@@ -35,10 +36,11 @@ import org.jkiss.dbeaver.model.DBPEvaluationContext; ...@@ -35,10 +36,11 @@ import org.jkiss.dbeaver.model.DBPEvaluationContext;
import org.jkiss.dbeaver.model.DBUtils; import org.jkiss.dbeaver.model.DBUtils;
import org.jkiss.dbeaver.model.app.DBPProject; import org.jkiss.dbeaver.model.app.DBPProject;
import org.jkiss.dbeaver.model.impl.DBObjectNameCaseTransformer; import org.jkiss.dbeaver.model.impl.DBObjectNameCaseTransformer;
import org.jkiss.dbeaver.model.navigator.*; import org.jkiss.dbeaver.model.navigator.DBNDataSource;
import org.jkiss.dbeaver.model.navigator.DBNDatabaseNode;
import org.jkiss.dbeaver.model.navigator.DBNNode;
import org.jkiss.dbeaver.model.runtime.VoidProgressMonitor; import org.jkiss.dbeaver.model.runtime.VoidProgressMonitor;
import org.jkiss.dbeaver.model.struct.*; import org.jkiss.dbeaver.model.struct.*;
import org.jkiss.dbeaver.model.struct.rdb.DBSSchema;
import org.jkiss.dbeaver.runtime.DBWorkbench; import org.jkiss.dbeaver.runtime.DBWorkbench;
import org.jkiss.dbeaver.runtime.ui.UIServiceSQL; import org.jkiss.dbeaver.runtime.ui.UIServiceSQL;
import org.jkiss.dbeaver.tools.transfer.database.*; import org.jkiss.dbeaver.tools.transfer.database.*;
...@@ -50,6 +52,7 @@ import org.jkiss.dbeaver.ui.SharedTextColors; ...@@ -50,6 +52,7 @@ import org.jkiss.dbeaver.ui.SharedTextColors;
import org.jkiss.dbeaver.ui.UIIcon; import org.jkiss.dbeaver.ui.UIIcon;
import org.jkiss.dbeaver.ui.UIUtils; import org.jkiss.dbeaver.ui.UIUtils;
import org.jkiss.dbeaver.ui.controls.CustomComboBoxCellEditor; import org.jkiss.dbeaver.ui.controls.CustomComboBoxCellEditor;
import org.jkiss.dbeaver.ui.controls.ObjectContainerSelectorPanel;
import org.jkiss.dbeaver.ui.controls.TreeContentProvider; import org.jkiss.dbeaver.ui.controls.TreeContentProvider;
import org.jkiss.dbeaver.ui.dialogs.ActiveWizardPage; import org.jkiss.dbeaver.ui.dialogs.ActiveWizardPage;
import org.jkiss.dbeaver.ui.dialogs.EnterNameDialog; import org.jkiss.dbeaver.ui.dialogs.EnterNameDialog;
...@@ -64,9 +67,8 @@ public class DatabaseConsumerPageMapping extends ActiveWizardPage<DataTransferWi ...@@ -64,9 +67,8 @@ public class DatabaseConsumerPageMapping extends ActiveWizardPage<DataTransferWi
private static final String TARGET_NAME_BROWSE = "[browse]"; private static final String TARGET_NAME_BROWSE = "[browse]";
private TreeViewer mappingViewer; private TreeViewer mappingViewer;
private Label containerIcon;
private Text containerName;
private Button autoAssignButton; private Button autoAssignButton;
private ObjectContainerSelectorPanel containerPanel;
private static abstract class MappingLabelProvider extends CellLabelProvider { private static abstract class MappingLabelProvider extends CellLabelProvider {
@Override @Override
...@@ -101,71 +103,49 @@ public class DatabaseConsumerPageMapping extends ActiveWizardPage<DataTransferWi ...@@ -101,71 +103,49 @@ public class DatabaseConsumerPageMapping extends ActiveWizardPage<DataTransferWi
{ {
// Target container // Target container
Composite containerPanel = new Composite(composite, SWT.NONE); // Use first source object as cur selection (it's better than nothing)
containerPanel.setLayout(new GridLayout(4, false)); containerPanel = new ObjectContainerSelectorPanel(composite, DTMessages.data_transfer_db_consumer_target_container) {
containerPanel.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); @Nullable
UIUtils.createControlLabel(containerPanel, DTMessages.data_transfer_db_consumer_target_container);
containerIcon = new Label(containerPanel, SWT.NONE);
containerIcon.setImage(DBeaverIcons.getImage(DBIcon.TYPE_UNKNOWN));
containerName = new Text(containerPanel, SWT.BORDER | SWT.READ_ONLY);
containerName.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
containerName.setText("");
Button browseButton = new Button(containerPanel, SWT.PUSH);
browseButton.setImage(DBeaverIcons.getImage(DBIcon.TREE_FOLDER));
browseButton.setText("...");
browseButton.addSelectionListener(new SelectionAdapter() {
@Override @Override
public void widgetSelected(SelectionEvent e) protected DBNNode getSelectedNode() {
{ DBNNode selectedNode = settings.getContainerNode();
DBPProject activeProject = DBWorkbench.getPlatform().getWorkspace().getActiveProject(); if (selectedNode == null && !settings.getDataMappings().isEmpty()) {
if (activeProject != null) { // Use first source object as cur selection (it's better than nothing)
final DBNModel navigatorModel = DBWorkbench.getPlatform().getNavigatorModel(); DBSDataContainer firstSource = settings.getDataMappings().keySet().iterator().next();
final DBNProject rootNode = navigatorModel.getRoot().getProjectNode( selectedNode = DBWorkbench.getPlatform().getNavigatorModel().getNodeByObject(firstSource);
activeProject); while (selectedNode != null) {
DBNNode selectedNode = settings.getContainerNode(); if (selectedNode instanceof DBSWrapper && ((DBSWrapper) selectedNode).getObject() instanceof DBSObjectContainer) {
if (selectedNode == null && !settings.getDataMappings().isEmpty()) { break;
// Use first source object as cur selection (it's better than nothing) } else {
DBSDataContainer firstSource = settings.getDataMappings().keySet().iterator().next(); selectedNode = selectedNode.getParentNode();
selectedNode = navigatorModel.getNodeByObject(firstSource);
while (selectedNode != null) {
if (selectedNode instanceof DBSWrapper && ((DBSWrapper) selectedNode).getObject() instanceof DBSObjectContainer) {
break;
} else {
selectedNode = selectedNode.getParentNode();
}
} }
} }
DBNNode node = DBWorkbench.getPlatformUI().selectObject( }
getShell(), return selectedNode;
DTMessages.data_transfer_db_consumer_choose_container, }
rootNode.getDatabases(),
selectedNode, @Override
new Class[] {DBSObjectContainer.class}, protected void setSelectedNode(DBNDatabaseNode node) {
null, new Class[] { DBSSchema.class }); settings.setContainerNode(node);
if (node instanceof DBNDatabaseNode) { DBNDataSource dataSourceNode = DBNDataSource.getDataSourceNode(node);
settings.setContainerNode((DBNDatabaseNode) node); setContainerInfo(
DBNDataSource dataSourceNode = DBNDataSource.getDataSourceNode(node); dataSourceNode == null ? node.getNodeIconDefault() : dataSourceNode.getNodeIconDefault(),
containerIcon.setImage(DBeaverIcons.getImage(dataSourceNode == null ? node.getNodeIconDefault() : dataSourceNode.getNodeIconDefault())); settings.getContainerFullName());
containerName.setText(settings.getContainerFullName()); // Reset mappings
// Reset mappings for (DatabaseMappingContainer mappingContainer : settings.getDataMappings().values()) {
for (DatabaseMappingContainer mappingContainer : settings.getDataMappings().values()) { if (mappingContainer.getMappingType() != DatabaseMappingType.unspecified) {
if (mappingContainer.getMappingType() != DatabaseMappingType.unspecified) { try {
try { mappingContainer.refreshMappingType(getContainer(), DatabaseMappingType.unspecified);
mappingContainer.refreshMappingType(getContainer(), DatabaseMappingType.unspecified); } catch (DBException e1) {
} catch (DBException e1) { log.error(e1);
log.error(e1);
}
}
} }
mappingViewer.refresh();
updatePageCompletion();
} }
} }
mappingViewer.refresh();
updatePageCompletion();
} }
});
};
} }
createMappingsTree(composite); createMappingsTree(composite);
...@@ -454,7 +434,7 @@ public class DatabaseConsumerPageMapping extends ActiveWizardPage<DataTransferWi ...@@ -454,7 +434,7 @@ public class DatabaseConsumerPageMapping extends ActiveWizardPage<DataTransferWi
return new CustomComboBoxCellEditor( return new CustomComboBoxCellEditor(
mappingViewer, mappingViewer,
mappingViewer.getTree(), mappingViewer.getTree(),
mappingTypes.toArray(new String[mappingTypes.size()]), mappingTypes.toArray(new String[0]),
SWT.DROP_DOWN | SWT.READ_ONLY); SWT.DROP_DOWN | SWT.READ_ONLY);
} }
@Override @Override
...@@ -543,7 +523,7 @@ public class DatabaseConsumerPageMapping extends ActiveWizardPage<DataTransferWi ...@@ -543,7 +523,7 @@ public class DatabaseConsumerPageMapping extends ActiveWizardPage<DataTransferWi
CustomComboBoxCellEditor editor = new CustomComboBoxCellEditor( CustomComboBoxCellEditor editor = new CustomComboBoxCellEditor(
mappingViewer, mappingViewer,
mappingViewer.getTree(), mappingViewer.getTree(),
items.toArray(new String[items.size()]), items.toArray(new String[0]),
SWT.DROP_DOWN | (allowsCreate ? SWT.NONE : SWT.READ_ONLY)); SWT.DROP_DOWN | (allowsCreate ? SWT.NONE : SWT.READ_ONLY));
return editor; return editor;
} }
...@@ -727,7 +707,7 @@ public class DatabaseConsumerPageMapping extends ActiveWizardPage<DataTransferWi ...@@ -727,7 +707,7 @@ public class DatabaseConsumerPageMapping extends ActiveWizardPage<DataTransferWi
} }
DatabaseMappingObject getSelectedMapping() private DatabaseMappingObject getSelectedMapping()
{ {
IStructuredSelection selection = (IStructuredSelection) mappingViewer.getSelection(); IStructuredSelection selection = (IStructuredSelection) mappingViewer.getSelection();
return selection.isEmpty() ? null : (DatabaseMappingObject) selection.getFirstElement(); return selection.isEmpty() ? null : (DatabaseMappingObject) selection.getFirstElement();
...@@ -741,8 +721,9 @@ public class DatabaseConsumerPageMapping extends ActiveWizardPage<DataTransferWi ...@@ -741,8 +721,9 @@ public class DatabaseConsumerPageMapping extends ActiveWizardPage<DataTransferWi
DBNDatabaseNode containerNode = settings.getContainerNode(); DBNDatabaseNode containerNode = settings.getContainerNode();
if (containerNode != null) { if (containerNode != null) {
DBNDataSource dataSourceNode = DBNDataSource.getDataSourceNode(containerNode); DBNDataSource dataSourceNode = DBNDataSource.getDataSourceNode(containerNode);
containerIcon.setImage(DBeaverIcons.getImage(dataSourceNode == null ? containerNode.getNodeIconDefault() : dataSourceNode.getNodeIcon())); containerPanel.setContainerInfo(
containerName.setText(settings.getContainerFullName()); dataSourceNode == null ? containerNode.getNodeIconDefault() : dataSourceNode.getNodeIcon(),
settings.getContainerFullName());
} }
if (mappingViewer.getInput() == null) { if (mappingViewer.getInput() == null) {
......
...@@ -21,7 +21,6 @@ import org.eclipse.core.runtime.IStatus; ...@@ -21,7 +21,6 @@ import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.MultiStatus; import org.eclipse.core.runtime.MultiStatus;
import org.eclipse.core.runtime.Status; import org.eclipse.core.runtime.Status;
import org.eclipse.core.runtime.jobs.Job; import org.eclipse.core.runtime.jobs.Job;
import org.eclipse.draw2d.Figure;
import org.eclipse.draw2d.IFigure; import org.eclipse.draw2d.IFigure;
import org.eclipse.draw2d.PrintFigureOperation; import org.eclipse.draw2d.PrintFigureOperation;
import org.eclipse.draw2d.geometry.Dimension; import org.eclipse.draw2d.geometry.Dimension;
...@@ -85,7 +84,7 @@ import org.jkiss.dbeaver.runtime.DBWorkbench; ...@@ -85,7 +84,7 @@ import org.jkiss.dbeaver.runtime.DBWorkbench;
import org.jkiss.dbeaver.ui.*; import org.jkiss.dbeaver.ui.*;
import org.jkiss.dbeaver.ui.controls.ProgressLoaderVisualizer; import org.jkiss.dbeaver.ui.controls.ProgressLoaderVisualizer;
import org.jkiss.dbeaver.ui.controls.ProgressPageControl; import org.jkiss.dbeaver.ui.controls.ProgressPageControl;
import org.jkiss.dbeaver.ui.controls.itemlist.ObjectSearcher; import org.jkiss.dbeaver.ui.navigator.itemlist.ObjectSearcher;
import org.jkiss.dbeaver.ui.dialogs.DialogUtils; import org.jkiss.dbeaver.ui.dialogs.DialogUtils;
import org.jkiss.utils.ArrayUtils; import org.jkiss.utils.ArrayUtils;
import org.jkiss.utils.CommonUtils; import org.jkiss.utils.CommonUtils;
......
...@@ -32,7 +32,7 @@ import org.jkiss.dbeaver.model.exec.DBCSession; ...@@ -32,7 +32,7 @@ import org.jkiss.dbeaver.model.exec.DBCSession;
import org.jkiss.dbeaver.model.runtime.DBRProgressMonitor; import org.jkiss.dbeaver.model.runtime.DBRProgressMonitor;
import org.jkiss.dbeaver.model.runtime.load.DatabaseLoadService; import org.jkiss.dbeaver.model.runtime.load.DatabaseLoadService;
import org.jkiss.dbeaver.ui.LoadingJob; import org.jkiss.dbeaver.ui.LoadingJob;
import org.jkiss.dbeaver.ui.controls.itemlist.DatabaseObjectListControl; import org.jkiss.dbeaver.ui.navigator.itemlist.DatabaseObjectListControl;
import java.lang.reflect.InvocationTargetException; import java.lang.reflect.InvocationTargetException;
import java.util.Collection; import java.util.Collection;
......
...@@ -31,7 +31,7 @@ import org.jkiss.dbeaver.model.exec.DBCSession; ...@@ -31,7 +31,7 @@ import org.jkiss.dbeaver.model.exec.DBCSession;
import org.jkiss.dbeaver.model.runtime.DBRProgressMonitor; import org.jkiss.dbeaver.model.runtime.DBRProgressMonitor;
import org.jkiss.dbeaver.model.runtime.load.DatabaseLoadService; import org.jkiss.dbeaver.model.runtime.load.DatabaseLoadService;
import org.jkiss.dbeaver.ui.LoadingJob; import org.jkiss.dbeaver.ui.LoadingJob;
import org.jkiss.dbeaver.ui.controls.itemlist.DatabaseObjectListControl; import org.jkiss.dbeaver.ui.navigator.itemlist.DatabaseObjectListControl;
import java.lang.reflect.InvocationTargetException; import java.lang.reflect.InvocationTargetException;
import java.util.Collection; import java.util.Collection;
......
...@@ -22,8 +22,8 @@ import org.eclipse.core.runtime.jobs.Job; ...@@ -22,8 +22,8 @@ import org.eclipse.core.runtime.jobs.Job;
import org.jkiss.code.NotNull; import org.jkiss.code.NotNull;
import org.jkiss.code.Nullable; import org.jkiss.code.Nullable;
import org.jkiss.dbeaver.model.DBPDataSourceContainer; import org.jkiss.dbeaver.model.DBPDataSourceContainer;
import org.jkiss.dbeaver.model.connection.DBPAuthInfo;
import org.jkiss.dbeaver.model.access.DBAPasswordChangeInfo; import org.jkiss.dbeaver.model.access.DBAPasswordChangeInfo;
import org.jkiss.dbeaver.model.connection.DBPAuthInfo;
import org.jkiss.dbeaver.model.connection.DBPDriver; import org.jkiss.dbeaver.model.connection.DBPDriver;
import org.jkiss.dbeaver.model.connection.DBPDriverDependencies; import org.jkiss.dbeaver.model.connection.DBPDriverDependencies;
import org.jkiss.dbeaver.model.navigator.DBNNode; import org.jkiss.dbeaver.model.navigator.DBNNode;
...@@ -105,7 +105,6 @@ public interface DBPPlatformUI { ...@@ -105,7 +105,6 @@ public interface DBPPlatformUI {
/** /**
* FIXME: this is a hack. We need to call platform (workbench) to refresh part's contexts (enabled commands). * FIXME: this is a hack. We need to call platform (workbench) to refresh part's contexts (enabled commands).
* There is no such thing as part in abstract UI. Need some better solution. * There is no such thing as part in abstract UI. Need some better solution.
* @part IWorkbenchPart
*/ */
void refreshPartState(Object part); void refreshPartState(Object part);
} }
\ No newline at end of file
...@@ -109,27 +109,27 @@ public class ConsoleUserInterface implements DBPPlatformUI { ...@@ -109,27 +109,27 @@ public class ConsoleUserInterface implements DBPPlatformUI {
} }
@Override @Override
public DBNNode selectObject(Object parentShell, String title, DBNNode rootNode, DBNNode selectedNode, Class<?>[] allowedTypes, Class<?>[] resultTypes, Class<?>[] leafTypes) { public DBNNode selectObject(@NotNull Object parentShell, String title, DBNNode rootNode, DBNNode selectedNode, Class<?>[] allowedTypes, Class<?>[] resultTypes, Class<?>[] leafTypes) {
return null; return null;
} }
@Override @Override
public void openEntityEditor(DBSObject object) { public void openEntityEditor(@NotNull DBSObject object) {
throw new IllegalStateException("Editors not supported in console mode"); throw new IllegalStateException("Editors not supported in console mode");
} }
@Override @Override
public void openEntityEditor(DBNNode selectedNode, String defaultPageId) { public void openEntityEditor(@NotNull DBNNode selectedNode, String defaultPageId) {
throw new IllegalStateException("Editors not supported in console mode"); throw new IllegalStateException("Editors not supported in console mode");
} }
@Override @Override
public void openConnectionEditor(DBPDataSourceContainer dataSourceContainer) { public void openConnectionEditor(@NotNull DBPDataSourceContainer dataSourceContainer) {
// do nothing // do nothing
} }
@Override @Override
public void executeProcess(DBRProcessDescriptor processDescriptor) { public void executeProcess(@NotNull DBRProcessDescriptor processDescriptor) {
try { try {
processDescriptor.execute(); processDescriptor.execute();
} catch (DBException e) { } catch (DBException e) {
...@@ -138,10 +138,11 @@ public class ConsoleUserInterface implements DBPPlatformUI { ...@@ -138,10 +138,11 @@ public class ConsoleUserInterface implements DBPPlatformUI {
} }
@Override @Override
public void executeInUI(Runnable runnable) { public void executeInUI(@NotNull Runnable runnable) {
runnable.run(); runnable.run();
} }
@NotNull
@Override @Override
public <RESULT> Job createLoadingService(ILoadService<RESULT> loadingService, ILoadVisualizer<RESULT> visualizer) { public <RESULT> Job createLoadingService(ILoadService<RESULT> loadingService, ILoadVisualizer<RESULT> visualizer) {
throw new IllegalStateException("Loading jobs not supported in console mode"); throw new IllegalStateException("Loading jobs not supported in console mode");
......
...@@ -51,7 +51,7 @@ import org.jkiss.dbeaver.ui.LoadingJob; ...@@ -51,7 +51,7 @@ import org.jkiss.dbeaver.ui.LoadingJob;
import org.jkiss.dbeaver.ui.UIUtils; import org.jkiss.dbeaver.ui.UIUtils;
import org.jkiss.dbeaver.ui.controls.ListContentProvider; import org.jkiss.dbeaver.ui.controls.ListContentProvider;
import org.jkiss.dbeaver.ui.controls.ProgressPageControl; import org.jkiss.dbeaver.ui.controls.ProgressPageControl;
import org.jkiss.dbeaver.ui.controls.itemlist.ObjectListControl; import org.jkiss.dbeaver.ui.navigator.itemlist.ObjectListControl;
import org.jkiss.dbeaver.ui.editors.AbstractDatabaseObjectEditor; import org.jkiss.dbeaver.ui.editors.AbstractDatabaseObjectEditor;
import org.jkiss.dbeaver.ui.editors.DatabaseEditorUtils; import org.jkiss.dbeaver.ui.editors.DatabaseEditorUtils;
import org.jkiss.dbeaver.ui.navigator.NavigatorUtils; import org.jkiss.dbeaver.ui.navigator.NavigatorUtils;
......
...@@ -27,6 +27,7 @@ import org.eclipse.swt.graphics.Image; ...@@ -27,6 +27,7 @@ import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.graphics.Point; import org.eclipse.swt.graphics.Point;
import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.widgets.*; import org.eclipse.swt.widgets.*;
import org.jkiss.code.Nullable;
import org.jkiss.dbeaver.DBException; import org.jkiss.dbeaver.DBException;
import org.jkiss.dbeaver.Log; import org.jkiss.dbeaver.Log;
import org.jkiss.dbeaver.model.DBPDataSourceInfo; import org.jkiss.dbeaver.model.DBPDataSourceInfo;
...@@ -44,6 +45,7 @@ import org.jkiss.dbeaver.runtime.DBWorkbench; ...@@ -44,6 +45,7 @@ import org.jkiss.dbeaver.runtime.DBWorkbench;
import org.jkiss.dbeaver.ui.DBeaverIcons; import org.jkiss.dbeaver.ui.DBeaverIcons;
import org.jkiss.dbeaver.ui.UIUtils; import org.jkiss.dbeaver.ui.UIUtils;
import org.jkiss.dbeaver.ui.controls.CSmartCombo; import org.jkiss.dbeaver.ui.controls.CSmartCombo;
import org.jkiss.dbeaver.ui.controls.ObjectContainerSelectorPanel;
import org.jkiss.dbeaver.ui.editors.internal.EditorsMessages; import org.jkiss.dbeaver.ui.editors.internal.EditorsMessages;
import org.jkiss.utils.ArrayUtils; import org.jkiss.utils.ArrayUtils;
import org.jkiss.utils.CommonUtils; import org.jkiss.utils.CommonUtils;
...@@ -123,15 +125,16 @@ public class EditForeignKeyPage extends BaseObjectEditPage { ...@@ -123,15 +125,16 @@ public class EditForeignKeyPage extends BaseObjectEditPage {
panel.setLayoutData(new GridData(GridData.FILL_BOTH)); panel.setLayoutData(new GridData(GridData.FILL_BOTH));
{ {
final Composite tableGroup = UIUtils.createPlaceholder(panel, 2, 5); final Composite tableGroup = UIUtils.createComposite(panel, 2);
tableGroup.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); tableGroup.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
UIUtils.createLabelText(tableGroup, EditorsMessages.dialog_struct_edit_fk_label_table, DBUtils.getObjectFullName(foreignKey.getParentObject(), DBPEvaluationContext.UI), SWT.READ_ONLY | SWT.BORDER); UIUtils.createLabelText(tableGroup, EditorsMessages.dialog_struct_edit_fk_label_table, DBUtils.getObjectFullName(foreignKey.getParentObject(), DBPEvaluationContext.UI), SWT.READ_ONLY | SWT.BORDER);
try { try {
if (ownerTableNode != null) { if (ownerTableNode != null) {
createSchemaSelector(tableGroup); createSchemaSelector(tableGroup);
} else if (foreignKey instanceof DBVEntityForeignKey) { } else if (foreignKey instanceof DBVEntityForeignKey) {
// Virtual key - add container selector // Virtual key - add container selector
createContainerSelector(tableGroup);
} }
} catch (Throwable e) { } catch (Throwable e) {
log.debug("Can't create schema selector", e); log.debug("Can't create schema selector", e);
...@@ -318,7 +321,23 @@ public class EditForeignKeyPage extends BaseObjectEditPage { ...@@ -318,7 +321,23 @@ public class EditForeignKeyPage extends BaseObjectEditPage {
} }
private void createContainerSelector(Composite tableGroup) throws DBException { private void createContainerSelector(Composite tableGroup) throws DBException {
ObjectContainerSelectorPanel containerPanel = new ObjectContainerSelectorPanel(tableGroup, "Reference table container") {
@Nullable
@Override
protected DBNNode getSelectedNode() {
return DBWorkbench.getPlatform().getNavigatorModel().getNodeByObject(
ownerTableNode != null ? ownerTableNode.getObject() : foreignKey.getDataSource());
}
@Override
protected void setSelectedNode(DBNDatabaseNode node) {
ownerTableNode = node;
setContainerInfo(node.getNodeIconDefault(), node.getNodeFullName());
}
};
GridData gd = new GridData(GridData.FILL_HORIZONTAL);
gd.horizontalSpan = 2;
containerPanel.setLayoutData(gd);
} }
private void loadTableList(DBNDatabaseNode newContainerNode) { private void loadTableList(DBNDatabaseNode newContainerNode) {
......
...@@ -37,7 +37,7 @@ import org.jkiss.dbeaver.model.runtime.load.DatabaseLoadService; ...@@ -37,7 +37,7 @@ import org.jkiss.dbeaver.model.runtime.load.DatabaseLoadService;
import org.jkiss.dbeaver.ui.LoadingJob; import org.jkiss.dbeaver.ui.LoadingJob;
import org.jkiss.dbeaver.ui.UIUtils; import org.jkiss.dbeaver.ui.UIUtils;
import org.jkiss.dbeaver.ui.controls.TreeContentProvider; import org.jkiss.dbeaver.ui.controls.TreeContentProvider;
import org.jkiss.dbeaver.ui.controls.itemlist.DatabaseObjectListControl; import org.jkiss.dbeaver.ui.navigator.itemlist.DatabaseObjectListControl;
import org.jkiss.dbeaver.ui.controls.resultset.IResultSetPanel; import org.jkiss.dbeaver.ui.controls.resultset.IResultSetPanel;
import org.jkiss.dbeaver.ui.controls.resultset.IResultSetPresentation; import org.jkiss.dbeaver.ui.controls.resultset.IResultSetPresentation;
import org.jkiss.utils.CommonUtils; import org.jkiss.utils.CommonUtils;
......
...@@ -28,7 +28,7 @@ import org.jkiss.dbeaver.model.exec.plan.DBCPlanNode; ...@@ -28,7 +28,7 @@ import org.jkiss.dbeaver.model.exec.plan.DBCPlanNode;
import org.jkiss.dbeaver.model.struct.DBSObject; import org.jkiss.dbeaver.model.struct.DBSObject;
import org.jkiss.dbeaver.ui.LoadingJob; import org.jkiss.dbeaver.ui.LoadingJob;
import org.jkiss.dbeaver.ui.controls.ObjectViewerRenderer; import org.jkiss.dbeaver.ui.controls.ObjectViewerRenderer;
import org.jkiss.dbeaver.ui.controls.itemlist.DatabaseObjectListControl; import org.jkiss.dbeaver.ui.navigator.itemlist.DatabaseObjectListControl;
import org.jkiss.dbeaver.ui.navigator.actions.NavigatorHandlerObjectOpen; import org.jkiss.dbeaver.ui.navigator.actions.NavigatorHandlerObjectOpen;
import org.jkiss.utils.CommonUtils; import org.jkiss.utils.CommonUtils;
......
...@@ -29,8 +29,6 @@ Require-Bundle: org.eclipse.equinox.preferences, ...@@ -29,8 +29,6 @@ Require-Bundle: org.eclipse.equinox.preferences,
Export-Package: org.jkiss.dbeaver.ui.controls, Export-Package: org.jkiss.dbeaver.ui.controls,
org.jkiss.dbeaver.ui.actions, org.jkiss.dbeaver.ui.actions,
org.jkiss.dbeaver.ui.actions.datasource, org.jkiss.dbeaver.ui.actions.datasource,
org.jkiss.dbeaver.ui.controls.itemlist,
org.jkiss.dbeaver.ui.navigator,
org.jkiss.dbeaver.ui.editors.entity, org.jkiss.dbeaver.ui.editors.entity,
org.jkiss.dbeaver.ui.editors.entity.handlers, org.jkiss.dbeaver.ui.editors.entity.handlers,
org.jkiss.dbeaver.ui.editors.entity.properties, org.jkiss.dbeaver.ui.editors.entity.properties,
...@@ -40,6 +38,7 @@ Export-Package: org.jkiss.dbeaver.ui.controls, ...@@ -40,6 +38,7 @@ Export-Package: org.jkiss.dbeaver.ui.controls,
org.jkiss.dbeaver.ui.navigator.database, org.jkiss.dbeaver.ui.navigator.database,
org.jkiss.dbeaver.ui.navigator.database.load, org.jkiss.dbeaver.ui.navigator.database.load,
org.jkiss.dbeaver.ui.navigator.dialogs, org.jkiss.dbeaver.ui.navigator.dialogs,
org.jkiss.dbeaver.ui.navigator.itemlist,
org.jkiss.dbeaver.ui.navigator.project, org.jkiss.dbeaver.ui.navigator.project,
org.jkiss.dbeaver.ui.preferences, org.jkiss.dbeaver.ui.preferences,
org.jkiss.dbeaver.ui.project, org.jkiss.dbeaver.ui.project,
......
...@@ -36,7 +36,7 @@ import org.jkiss.dbeaver.model.navigator.*; ...@@ -36,7 +36,7 @@ import org.jkiss.dbeaver.model.navigator.*;
import org.jkiss.dbeaver.model.runtime.VoidProgressMonitor; import org.jkiss.dbeaver.model.runtime.VoidProgressMonitor;
import org.jkiss.dbeaver.runtime.DBWorkbench; import org.jkiss.dbeaver.runtime.DBWorkbench;
import org.jkiss.dbeaver.ui.*; import org.jkiss.dbeaver.ui.*;
import org.jkiss.dbeaver.ui.controls.itemlist.ItemListControl; import org.jkiss.dbeaver.ui.navigator.itemlist.ItemListControl;
import org.jkiss.dbeaver.ui.editors.INavigatorEditorInput; import org.jkiss.dbeaver.ui.editors.INavigatorEditorInput;
import org.jkiss.dbeaver.ui.editors.NodeEditorInput; import org.jkiss.dbeaver.ui.editors.NodeEditorInput;
import org.jkiss.dbeaver.ui.navigator.INavigatorModelView; import org.jkiss.dbeaver.ui.navigator.INavigatorModelView;
......
...@@ -35,7 +35,7 @@ import org.jkiss.dbeaver.ui.IRefreshablePart; ...@@ -35,7 +35,7 @@ import org.jkiss.dbeaver.ui.IRefreshablePart;
import org.jkiss.dbeaver.ui.ISearchContextProvider; import org.jkiss.dbeaver.ui.ISearchContextProvider;
import org.jkiss.dbeaver.ui.controls.ProgressPageControl; import org.jkiss.dbeaver.ui.controls.ProgressPageControl;
import org.jkiss.dbeaver.ui.controls.folders.TabbedFolderPage; import org.jkiss.dbeaver.ui.controls.folders.TabbedFolderPage;
import org.jkiss.dbeaver.ui.controls.itemlist.ItemListControl; import org.jkiss.dbeaver.ui.navigator.itemlist.ItemListControl;
import org.jkiss.dbeaver.ui.editors.IDatabaseEditor; import org.jkiss.dbeaver.ui.editors.IDatabaseEditor;
import org.jkiss.dbeaver.ui.navigator.INavigatorModelView; import org.jkiss.dbeaver.ui.navigator.INavigatorModelView;
......
...@@ -139,6 +139,9 @@ public class BrowseObjectDialog extends Dialog { ...@@ -139,6 +139,9 @@ public class BrowseObjectDialog extends Dialog {
}); });
if (selectedNode != null) { if (selectedNode != null) {
treeViewer.setSelection(new StructuredSelection(selectedNode)); treeViewer.setSelection(new StructuredSelection(selectedNode));
if (!(selectedNode instanceof DBNDataSource) || ((DBNDataSource) selectedNode).getDataSourceContainer().isConnected()) {
treeViewer.expandToLevel(selectedNode, 1);
}
selectedObjects.add(selectedNode); selectedObjects.add(selectedNode);
} }
treeViewer.addSelectionChangedListener(event -> { treeViewer.addSelectionChangedListener(event -> {
......
...@@ -40,7 +40,7 @@ import org.jkiss.dbeaver.model.runtime.load.AbstractLoadService; ...@@ -40,7 +40,7 @@ import org.jkiss.dbeaver.model.runtime.load.AbstractLoadService;
import org.jkiss.dbeaver.model.struct.DBSWrapper; import org.jkiss.dbeaver.model.struct.DBSWrapper;
import org.jkiss.dbeaver.ui.*; import org.jkiss.dbeaver.ui.*;
import org.jkiss.dbeaver.ui.controls.ListContentProvider; import org.jkiss.dbeaver.ui.controls.ListContentProvider;
import org.jkiss.dbeaver.ui.controls.itemlist.DatabaseObjectListControl; import org.jkiss.dbeaver.ui.navigator.itemlist.DatabaseObjectListControl;
import org.jkiss.dbeaver.ui.dialogs.AbstractPopupPanel; import org.jkiss.dbeaver.ui.dialogs.AbstractPopupPanel;
import org.jkiss.utils.CommonUtils; import org.jkiss.utils.CommonUtils;
......
...@@ -14,7 +14,7 @@ ...@@ -14,7 +14,7 @@
* See the License for the specific language governing permissions and * See the License for the specific language governing permissions and
* limitations under the License. * limitations under the License.
*/ */
package org.jkiss.dbeaver.ui.controls.itemlist; package org.jkiss.dbeaver.ui.navigator.itemlist;
import org.eclipse.jface.action.*; import org.eclipse.jface.action.*;
import org.eclipse.jface.viewers.IContentProvider; import org.eclipse.jface.viewers.IContentProvider;
...@@ -57,24 +57,21 @@ public abstract class DatabaseObjectListControl<OBJECT_TYPE extends DBPObject> e ...@@ -57,24 +57,21 @@ public abstract class DatabaseObjectListControl<OBJECT_TYPE extends DBPObject> e
private void createContextMenu() private void createContextMenu()
{ {
NavigatorUtils.createContextMenu(site, getItemsViewer(), new IMenuListener() { NavigatorUtils.createContextMenu(site, getItemsViewer(), manager -> {
@Override IAction copyAction = new Action(WorkbenchMessages.Workbench_copy) {
public void menuAboutToShow(IMenuManager manager) { @Override
IAction copyAction = new Action(WorkbenchMessages.Workbench_copy) { public void run()
@Override {
public void run() String text = getRenderer().getSelectedText();
{ if (!CommonUtils.isEmpty(text)) {
String text = getRenderer().getSelectedText(); UIUtils.setClipboardContents(getDisplay(), TextTransfer.getInstance(), text);
if (!CommonUtils.isEmpty(text)) {
UIUtils.setClipboardContents(getDisplay(), TextTransfer.getInstance(), text);
}
} }
}; }
copyAction.setEnabled(!getSelectionProvider().getSelection().isEmpty()); };
manager.add(copyAction); copyAction.setEnabled(!getSelectionProvider().getSelection().isEmpty());
manager.add(new Separator()); manager.add(copyAction);
fillCustomActions(manager); manager.add(new Separator());
} fillCustomActions(manager);
}); });
} }
......
...@@ -14,7 +14,7 @@ ...@@ -14,7 +14,7 @@
* See the License for the specific language governing permissions and * See the License for the specific language governing permissions and
* limitations under the License. * limitations under the License.
*/ */
package org.jkiss.dbeaver.ui.controls.itemlist; package org.jkiss.dbeaver.ui.navigator.itemlist;
import org.eclipse.jface.action.*; import org.eclipse.jface.action.*;
import org.eclipse.jface.viewers.*; import org.eclipse.jface.viewers.*;
......
...@@ -14,7 +14,7 @@ ...@@ -14,7 +14,7 @@
* See the License for the specific language governing permissions and * See the License for the specific language governing permissions and
* limitations under the License. * limitations under the License.
*/ */
package org.jkiss.dbeaver.ui.controls.itemlist; package org.jkiss.dbeaver.ui.navigator.itemlist;
import org.eclipse.jface.viewers.*; import org.eclipse.jface.viewers.*;
import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Composite;
......
...@@ -15,7 +15,7 @@ ...@@ -15,7 +15,7 @@
* See the License for the specific language governing permissions and * See the License for the specific language governing permissions and
* limitations under the License. * limitations under the License.
*/ */
package org.jkiss.dbeaver.ui.controls.itemlist; package org.jkiss.dbeaver.ui.navigator.itemlist;
import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.Status; import org.eclipse.core.runtime.Status;
......
...@@ -14,7 +14,7 @@ ...@@ -14,7 +14,7 @@
* See the License for the specific language governing permissions and * See the License for the specific language governing permissions and
* limitations under the License. * limitations under the License.
*/ */
package org.jkiss.dbeaver.ui.controls.itemlist; package org.jkiss.dbeaver.ui.navigator.itemlist;
import org.jkiss.dbeaver.model.DBPNamedObject; import org.jkiss.dbeaver.model.DBPNamedObject;
import org.jkiss.dbeaver.model.DBPObject; import org.jkiss.dbeaver.model.DBPObject;
......
...@@ -38,7 +38,7 @@ import org.jkiss.dbeaver.runtime.DBWorkbench; ...@@ -38,7 +38,7 @@ import org.jkiss.dbeaver.runtime.DBWorkbench;
import org.jkiss.dbeaver.ui.LoadingJob; import org.jkiss.dbeaver.ui.LoadingJob;
import org.jkiss.dbeaver.ui.UIUtils; import org.jkiss.dbeaver.ui.UIUtils;
import org.jkiss.dbeaver.ui.controls.TreeContentProvider; import org.jkiss.dbeaver.ui.controls.TreeContentProvider;
import org.jkiss.dbeaver.ui.controls.itemlist.NodeListControl; import org.jkiss.dbeaver.ui.navigator.itemlist.NodeListControl;
import org.jkiss.dbeaver.ui.navigator.INavigatorModelView; import org.jkiss.dbeaver.ui.navigator.INavigatorModelView;
import org.jkiss.dbeaver.ui.search.internal.UISearchMessages; import org.jkiss.dbeaver.ui.search.internal.UISearchMessages;
import org.jkiss.utils.CommonUtils; import org.jkiss.utils.CommonUtils;
......
/*
* DBeaver - Universal Database Manager
* Copyright (C) 2010-2019 Serge Rider (serge@jkiss.org)
* Copyright (C) 2011-2012 Eugene Fradkin (eugene.fradkin@gmail.com)
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.jkiss.dbeaver.ui.controls;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Text;
import org.jkiss.code.Nullable;
import org.jkiss.dbeaver.model.DBIcon;
import org.jkiss.dbeaver.model.DBPImage;
import org.jkiss.dbeaver.model.app.DBPProject;
import org.jkiss.dbeaver.model.navigator.DBNDatabaseNode;
import org.jkiss.dbeaver.model.navigator.DBNModel;
import org.jkiss.dbeaver.model.navigator.DBNNode;
import org.jkiss.dbeaver.model.navigator.DBNProject;
import org.jkiss.dbeaver.model.struct.DBSObjectContainer;
import org.jkiss.dbeaver.model.struct.rdb.DBSSchema;
import org.jkiss.dbeaver.runtime.DBWorkbench;
import org.jkiss.dbeaver.ui.DBeaverIcons;
import org.jkiss.dbeaver.ui.UIUtils;
/**
* ObjectContainerSelectorPanel
*/
public abstract class ObjectContainerSelectorPanel extends Composite
{
private final Label containerIcon;
private final Text containerName;
protected ObjectContainerSelectorPanel(Composite parent, String containerTitle) {
super(parent, SWT.NONE);
GridLayout layout = new GridLayout(4, false);
layout.marginHeight = 0;
layout.marginWidth = 0;
this.setLayout(layout);
this.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
UIUtils.createControlLabel(this, containerTitle);
containerIcon = new Label(this, SWT.NONE);
containerIcon.setImage(DBeaverIcons.getImage(DBIcon.TYPE_UNKNOWN));
containerName = new Text(this, SWT.BORDER | SWT.READ_ONLY);
containerName.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
containerName.setText("");
Button browseButton = new Button(this, SWT.PUSH);
browseButton.setImage(DBeaverIcons.getImage(DBIcon.TREE_FOLDER));
browseButton.setText("...");
browseButton.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e)
{
DBPProject activeProject = DBWorkbench.getPlatform().getWorkspace().getActiveProject();
if (activeProject != null) {
final DBNModel navigatorModel = DBWorkbench.getPlatform().getNavigatorModel();
final DBNProject rootNode = navigatorModel.getRoot().getProjectNode(activeProject);
DBNNode selectedNode = getSelectedNode();
DBNNode node = DBWorkbench.getPlatformUI().selectObject(
getShell(),
containerTitle,
rootNode.getDatabases(),
selectedNode,
new Class[] {DBSObjectContainer.class},
null, new Class[] { DBSSchema.class });
if (node instanceof DBNDatabaseNode) {
setSelectedNode((DBNDatabaseNode) node);
}
}
}
});
}
public void setContainerInfo(DBPImage image, String name) {
containerIcon.setImage(DBeaverIcons.getImage(image));
containerName.setText(name);
}
protected abstract void setSelectedNode(DBNDatabaseNode node);
@Nullable
protected abstract DBNNode getSelectedNode();
}
\ No newline at end of file
...@@ -31,7 +31,6 @@ import org.jkiss.dbeaver.model.DBPImage; ...@@ -31,7 +31,6 @@ import org.jkiss.dbeaver.model.DBPImage;
import org.jkiss.dbeaver.ui.DBeaverIcons; import org.jkiss.dbeaver.ui.DBeaverIcons;
import org.jkiss.dbeaver.ui.UIUtils; import org.jkiss.dbeaver.ui.UIUtils;
import org.jkiss.dbeaver.ui.internal.UIMessages; import org.jkiss.dbeaver.ui.internal.UIMessages;
import org.jkiss.dbeaver.ui.internal.UINavigatorMessages;
import org.jkiss.utils.CommonUtils; import org.jkiss.utils.CommonUtils;
import java.util.ArrayList; import java.util.ArrayList;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册