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

#9822 Tunnel action handler impl + UI connection service additions

上级 9e0393e3
......@@ -17,6 +17,7 @@
package org.jkiss.dbeaver.ui.actions.datasource;
import org.jkiss.code.NotNull;
import org.jkiss.dbeaver.Log;
import org.jkiss.dbeaver.model.DBPDataSourceContainer;
import org.jkiss.dbeaver.model.exec.DBCExecutionContext;
......@@ -35,27 +36,27 @@ public class UIServiceConnectionsImpl implements DBServiceConnections, UIService
private static final Log log = Log.getLog(UIServiceConnectionsImpl.class);
@Override
public void openConnectionEditor(DBPDataSourceContainer dataSourceContainer) {
EditConnectionDialog.openEditConnectionDialog(UIUtils.getActiveWorkbenchWindow(), dataSourceContainer);
public void openConnectionEditor(@NotNull DBPDataSourceContainer dataSourceContainer, String defaultPageName) {
EditConnectionDialog.openEditConnectionDialog(UIUtils.getActiveWorkbenchWindow(), dataSourceContainer, defaultPageName);
}
@Override
public void connectDataSource(DBPDataSourceContainer dataSourceContainer, DBRProgressListener onFinish) {
public void connectDataSource(@NotNull DBPDataSourceContainer dataSourceContainer, DBRProgressListener onFinish) {
DataSourceHandler.connectToDataSource(null, dataSourceContainer, onFinish);
}
@Override
public void disconnectDataSource(DBPDataSourceContainer dataSourceContainer) {
public void disconnectDataSource(@NotNull DBPDataSourceContainer dataSourceContainer) {
DataSourceHandler.disconnectDataSource(dataSourceContainer, null);
}
@Override
public void closeActiveTransaction(DBRProgressMonitor monitor, DBCExecutionContext context, boolean commitTxn) {
public void closeActiveTransaction(@NotNull DBRProgressMonitor monitor, @NotNull DBCExecutionContext context, boolean commitTxn) {
DataSourceHandler.closeActiveTransaction(monitor, context, commitTxn);
}
@Override
public boolean checkAndCloseActiveTransaction(DBCExecutionContext[] contexts) {
public boolean checkAndCloseActiveTransaction(@NotNull DBCExecutionContext[] contexts) {
return DataSourceHandler.checkAndCloseActiveTransaction(contexts);
}
......
......@@ -56,7 +56,7 @@ import java.util.*;
/**
* Settings connection page. Hosts particular drivers' connection pages
*/
class ConnectionPageSettings extends ActiveWizardPage<ConnectionWizard> implements IDataSourceConnectionEditorSite, ICompositeDialogPage, IDataSourceConnectionTester {
class ConnectionPageSettings extends ActiveWizardPage<ConnectionWizard> implements IDataSourceConnectionEditorSite, ICompositeDialogPage, ICompositeDialogPageContainer, IDataSourceConnectionTester {
private static final Log log = Log.getLog(DriverDescriptor.class);
public static final String PAGE_NAME = ConnectionPageSettings.class.getSimpleName();
......@@ -410,4 +410,14 @@ class ConnectionPageSettings extends ActiveWizardPage<ConnectionWizard> implemen
public String toString() {
return getName();
}
@Override
public void showSubPage(IDialogPage subPage) {
for (TabItem pageTab : tabFolder.getItems()) {
if (pageTab.getData() == subPage) {
tabFolder.setSelection(pageTab);
break;
}
}
}
}
......@@ -235,6 +235,7 @@ public abstract class ConnectionWizard extends ActiveWizard implements INewWizar
final IWizardPage page = getPage(pageId);
if (page != null) {
getContainer().showPage(page);
return true;
}
return false;
}
......
......@@ -50,6 +50,7 @@ public class EditConnectionDialog extends MultiPageWizardDialog {
private static String lastActivePage;
private Button testButton;
private String defaultPageName;
private EditConnectionDialog(IWorkbenchWindow window, ConnectionWizard wizard) {
super(window, wizard);
......@@ -74,8 +75,15 @@ public class EditConnectionDialog extends MultiPageWizardDialog {
protected Control createContents(Composite parent) {
Control contents = super.createContents(parent);
if (!CommonUtils.isEmpty(lastActivePage)) {
getWizard().openSettingsPage(lastActivePage);
String activePage = defaultPageName;
if (CommonUtils.isEmpty(activePage)) {
activePage = lastActivePage;
}
if (!CommonUtils.isEmpty(activePage)) {
String finalActivePage = activePage;
UIUtils.asyncExec(() -> {
getWizard().openSettingsPage(finalActivePage);
});
}
return contents;
......@@ -132,15 +140,19 @@ public class EditConnectionDialog extends MultiPageWizardDialog {
getWizard().testConnection();
}
public static boolean openEditConnectionDialog(IWorkbenchWindow window, DBPDataSourceContainer dataSource) {
public static boolean openEditConnectionDialog(IWorkbenchWindow window, DBPDataSourceContainer dataSource, String defaultPageName) {
EditConnectionDialog dialog = openDialogs.get(dataSource);
if (dialog != null) {
if (defaultPageName != null) {
dialog.showPage(defaultPageName);
}
dialog.getShell().forceActive();
return true;
}
EditConnectionWizard wizard = new EditConnectionWizard((DataSourceDescriptor) dataSource);
dialog = new EditConnectionDialog(window, wizard);
dialog.defaultPageName = defaultPageName;
openDialogs.put(dataSource, dialog);
try {
return dialog.open() == IDialogConstants.OK_ID;
......
......@@ -17,6 +17,8 @@
package org.jkiss.dbeaver.runtime.ui;
import org.jkiss.code.NotNull;
import org.jkiss.code.Nullable;
import org.jkiss.dbeaver.model.DBPDataSourceContainer;
import org.jkiss.dbeaver.model.exec.DBCExecutionContext;
import org.jkiss.dbeaver.model.runtime.DBRProgressListener;
......@@ -27,14 +29,14 @@ import org.jkiss.dbeaver.model.runtime.DBRProgressMonitor;
*/
public interface UIServiceConnections {
void openConnectionEditor(DBPDataSourceContainer dataSourceContainer);
void openConnectionEditor(@NotNull DBPDataSourceContainer dataSourceContainer, @Nullable String defaultPageName);
void connectDataSource(DBPDataSourceContainer dataSourceContainer, DBRProgressListener onFinish);
void connectDataSource(@NotNull DBPDataSourceContainer dataSourceContainer, DBRProgressListener onFinish);
void disconnectDataSource(DBPDataSourceContainer dataSourceContainer);
void disconnectDataSource(@NotNull DBPDataSourceContainer dataSourceContainer);
void closeActiveTransaction(DBRProgressMonitor monitor, DBCExecutionContext context, boolean commitTxn);
void closeActiveTransaction(@NotNull DBRProgressMonitor monitor, @NotNull DBCExecutionContext context, boolean commitTxn);
boolean checkAndCloseActiveTransaction(DBCExecutionContext[] contexts);
boolean checkAndCloseActiveTransaction(@NotNull DBCExecutionContext[] contexts);
}
\ No newline at end of file
......@@ -39,7 +39,6 @@ import org.jkiss.dbeaver.model.DBUtils;
import org.jkiss.dbeaver.model.edit.DBEObjectEditor;
import org.jkiss.dbeaver.model.navigator.*;
import org.jkiss.dbeaver.model.struct.DBSObject;
import org.jkiss.dbeaver.model.struct.DBSObjectContainer;
import org.jkiss.dbeaver.runtime.DBWorkbench;
import org.jkiss.dbeaver.runtime.ui.UIServiceConnections;
import org.jkiss.dbeaver.runtime.ui.UIServiceSQL;
......@@ -271,7 +270,7 @@ public class NavigatorHandlerObjectOpen extends NavigatorHandlerObjectBase imple
public static void openConnectionEditor(IWorkbenchWindow workbenchWindow, DBPDataSourceContainer dataSourceContainer) {
UIServiceConnections serviceConnections = DBWorkbench.getService(UIServiceConnections.class);
if (serviceConnections != null) {
serviceConnections.openConnectionEditor(dataSourceContainer);
serviceConnections.openConnectionEditor(dataSourceContainer, null);
}
}
......
......@@ -18,10 +18,14 @@
package org.jkiss.dbeaver.ui.navigator.actions.node;
import org.eclipse.swt.widgets.Event;
import org.jkiss.dbeaver.model.DBPDataSourceContainer;
import org.jkiss.dbeaver.model.DBPImage;
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.net.DBWHandlerConfiguration;
import org.jkiss.dbeaver.runtime.DBWorkbench;
import org.jkiss.dbeaver.runtime.ui.UIServiceConnections;
import org.jkiss.dbeaver.ui.UIIcon;
import org.jkiss.dbeaver.ui.navigator.INavigatorModelView;
import org.jkiss.dbeaver.ui.navigator.actions.NavigatorNodeActionHandlerAbstract;
......@@ -62,7 +66,13 @@ public class NNAHDataSourceTunnel extends NavigatorNodeActionHandlerAbstract {
@Override
public void handleNodeAction(INavigatorModelView view, DBNNode node, Event event, boolean defaultAction) {
if (node instanceof DBNDatabaseNode) {
DBPDataSourceContainer dataSourceContainer = ((DBNDatabaseNode) node).getDataSourceContainer();
UIServiceConnections serviceConnections = DBWorkbench.getService(UIServiceConnections.class);
if (serviceConnections != null) {
serviceConnections.openConnectionEditor(dataSourceContainer, "ConnectionPageNetworkHandler.ssh_tunnel");
}
}
}
}
/*
* DBeaver - Universal Database Manager
* Copyright (C) 2010-2020 DBeaver Corp and others
*
* 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;
import org.eclipse.jface.dialogs.IDialogPage;
/**
* ICompositeDialogPageContainer
*/
public interface ICompositeDialogPageContainer extends ICompositeDialogPage {
void showSubPage(IDialogPage subPage);
}
\ No newline at end of file
......@@ -41,6 +41,7 @@ import org.eclipse.ui.IWorkbenchWindow;
import org.eclipse.ui.IWorkbenchWizard;
import org.jkiss.dbeaver.runtime.DBWorkbench;
import org.jkiss.dbeaver.ui.ICompositeDialogPage;
import org.jkiss.dbeaver.ui.ICompositeDialogPageContainer;
import org.jkiss.dbeaver.ui.UIUtils;
import org.jkiss.dbeaver.ui.preferences.PreferenceStoreDelegate;
import org.jkiss.utils.ArrayUtils;
......@@ -209,17 +210,17 @@ public class MultiPageWizardDialog extends TitleAreaDialog implements IWizardCon
}
private void changePage() {
TreeItem[] selection = pagesTree.getSelection();
if (selection.length != 1) {
return;
}
TreeItem newItem = selection[0];
if (prevPage == newItem.getData()) {
return;
}
pageArea.setRedraw(false);
try {
TreeItem[] selection = pagesTree.getSelection();
if (selection.length != 1) {
return;
}
TreeItem newItem = selection[0];
if (prevPage == newItem.getData()) {
return;
}
GridData gd;
if (prevPage != null) {
gd = (GridData) prevPage.getControl().getLayoutData();
......@@ -306,7 +307,20 @@ public class MultiPageWizardDialog extends TitleAreaDialog implements IWizardCon
if (item.getData() == page) {
pagesTree.setSelection(item);
changePage();
break;
return;
}
if (item.getData() instanceof ICompositeDialogPageContainer) {
IDialogPage[] subPages = ((ICompositeDialogPageContainer) item.getData()).getSubPages(false, false);
if (!ArrayUtils.isEmpty(subPages)) {
for (IDialogPage subPage : subPages) {
if (subPage == page) {
pagesTree.setSelection(item);
changePage();
((ICompositeDialogPageContainer) item.getData()).showSubPage(page);
return;
}
}
}
}
for (TreeItem child : item.getItems()) {
if (child.getData() == page) {
......@@ -396,4 +410,7 @@ public class MultiPageWizardDialog extends TitleAreaDialog implements IWizardCon
}
}
protected void showPage(String pageName) {
}
}
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册