Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
suliangchun
dbeaver
提交
d221836c
D
dbeaver
项目概览
suliangchun
/
dbeaver
与 Fork 源项目一致
从无法访问的项目Fork
通知
3
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
D
dbeaver
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
d221836c
编写于
4月 11, 2019
作者:
S
Serge Rider
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
#4553 Datasource and schema selectors events and handlers.
上级
272f4898
变更
7
隐藏空白更改
内联
并排
Showing
7 changed file
with
255 addition
and
46 deletion
+255
-46
plugins/org.jkiss.dbeaver.core/plugin.xml
plugins/org.jkiss.dbeaver.core/plugin.xml
+5
-1
plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/core/DBeaverCore.java
....dbeaver.core/src/org/jkiss/dbeaver/core/DBeaverCore.java
+6
-5
plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/core/WorkbenchContextListener.java
.../src/org/jkiss/dbeaver/core/WorkbenchContextListener.java
+7
-0
plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/ui/actions/datasource/DataSourceToolbarHandler.java
...eaver/ui/actions/datasource/DataSourceToolbarHandler.java
+210
-0
plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/ui/actions/datasource/DataSourceToolbarUtils.java
...dbeaver/ui/actions/datasource/DataSourceToolbarUtils.java
+3
-18
plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/ui/actions/datasource/SelectActiveDataSourceHandler.java
.../ui/actions/datasource/SelectActiveDataSourceHandler.java
+2
-2
plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/ui/actions/datasource/SelectActiveSchemaHandler.java
...aver/ui/actions/datasource/SelectActiveSchemaHandler.java
+22
-20
未找到文件。
plugins/org.jkiss.dbeaver.core/plugin.xml
浏览文件 @
d221836c
...
...
@@ -376,7 +376,11 @@
</handler>
<handler
commandId=
"org.jkiss.dbeaver.core.select.schema"
class=
"org.jkiss.dbeaver.ui.actions.datasource.SelectActiveSchemaHandler"
>
<enabledWhen>
<reference
definitionId=
"org.jkiss.dbeaver.core.ui.datasource.editor"
/>
<with
variable=
"activeEditor"
>
<adapt
type=
"org.jkiss.dbeaver.model.DBPContextProvider"
>
<test
property=
"org.jkiss.dbeaver.core.datasource.supportsTransactions"
value=
"true"
/>
</adapt>
</with>
</enabledWhen>
</handler>
...
...
plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/core/DBeaverCore.java
浏览文件 @
d221836c
...
...
@@ -82,9 +82,10 @@ public class DBeaverCore implements DBPPlatform {
// The plug-in ID
public
static
final
String
PLUGIN_ID
=
"org.jkiss.dbeaver.core"
;
//$NON-NLS-1$
public
static
final
String
APP_CONFIG_FILE
=
"dbeaver.ini"
;
public
static
final
String
ECLIPSE_CONFIG_FILE
=
"eclipse.ini"
;
public
static
final
String
TEMP_PROJECT_NAME
=
".dbeaver-temp"
;
//$NON-NLS-1$
private
static
final
String
APP_CONFIG_FILE
=
"dbeaver.ini"
;
private
static
final
String
ECLIPSE_CONFIG_FILE
=
"eclipse.ini"
;
private
static
final
String
TEMP_PROJECT_NAME
=
".dbeaver-temp"
;
//$NON-NLS-1$
private
static
final
Log
log
=
Log
.
getLog
(
DBeaverCore
.
class
);
...
...
@@ -167,7 +168,7 @@ public class DBeaverCore implements DBPPlatform {
return
workbench
==
null
||
workbench
.
isClosing
();
}
p
ublic
static
void
setClosing
(
boolean
closing
)
{
p
rivate
static
void
setClosing
(
boolean
closing
)
{
isClosing
=
closing
;
}
...
...
@@ -175,7 +176,7 @@ public class DBeaverCore implements DBPPlatform {
return
DBeaverActivator
.
getInstance
().
getPreferences
();
}
DBeaverCore
()
{
private
DBeaverCore
()
{
}
private
void
initialize
()
{
...
...
plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/core/WorkbenchContextListener.java
浏览文件 @
d221836c
...
...
@@ -28,6 +28,7 @@ import org.jkiss.dbeaver.model.runtime.features.DBRFeature;
import
org.jkiss.dbeaver.model.runtime.features.DBRFeatureRegistry
;
import
org.jkiss.dbeaver.model.struct.DBSDataContainer
;
import
org.jkiss.dbeaver.ui.ActionUtils
;
import
org.jkiss.dbeaver.ui.actions.datasource.DataSourceToolbarHandler
;
import
org.jkiss.dbeaver.ui.controls.resultset.ResultSetViewer
;
import
org.jkiss.dbeaver.ui.editors.entity.EntityEditor
;
import
org.jkiss.dbeaver.ui.editors.sql.SQLEditor
;
...
...
@@ -98,6 +99,12 @@ class WorkbenchContextListener implements IWindowListener, IPageListener, IPartL
}
private
void
listenWindowEvents
(
IWorkbenchWindow
window
)
{
{
// Register ds toolbar handler
DataSourceToolbarHandler
toolbarHandler
=
new
DataSourceToolbarHandler
(
window
);
window
.
getShell
().
addDisposeListener
(
e
->
toolbarHandler
.
dispose
());
}
IPerspectiveListener
perspectiveListener
=
new
IPerspectiveListener
()
{
private
IContextActivation
perspectiveActivation
;
...
...
plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/ui/actions/datasource/DataSourceToolbarHandler.java
0 → 100644
浏览文件 @
d221836c
/*
* DBeaver - Universal Database Manager
* Copyright (C) 2010-2019 Serge Rider (serge@jkiss.org)
*
* 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.actions.datasource
;
import
org.eclipse.core.resources.IFile
;
import
org.eclipse.jface.viewers.IStructuredSelection
;
import
org.eclipse.ui.*
;
import
org.eclipse.ui.internal.WorkbenchWindow
;
import
org.jkiss.code.Nullable
;
import
org.jkiss.dbeaver.model.DBPDataSourceContainer
;
import
org.jkiss.dbeaver.model.DBPEvent
;
import
org.jkiss.dbeaver.model.DBPEventListener
;
import
org.jkiss.dbeaver.model.DBUtils
;
import
org.jkiss.dbeaver.model.app.DBPDataSourceRegistry
;
import
org.jkiss.dbeaver.model.app.DBPRegistryListener
;
import
org.jkiss.dbeaver.model.navigator.DBNEvent
;
import
org.jkiss.dbeaver.model.navigator.DBNNode
;
import
org.jkiss.dbeaver.model.navigator.DBNResource
;
import
org.jkiss.dbeaver.model.navigator.INavigatorListener
;
import
org.jkiss.dbeaver.model.struct.DBSObject
;
import
org.jkiss.dbeaver.registry.DataSourceProviderRegistry
;
import
org.jkiss.dbeaver.runtime.DBWorkbench
;
import
org.jkiss.dbeaver.ui.AbstractPartListener
;
import
org.jkiss.dbeaver.ui.UIUtils
;
import
org.jkiss.dbeaver.ui.actions.DataSourcePropertyTester
;
import
org.jkiss.dbeaver.ui.editors.EditorUtils
;
import
org.jkiss.dbeaver.ui.perspective.AbstractPageListener
;
import
org.jkiss.dbeaver.utils.RuntimeUtils
;
import
java.util.ArrayList
;
import
java.util.List
;
public
class
DataSourceToolbarHandler
implements
DBPRegistryListener
,
DBPEventListener
,
INavigatorListener
{
private
final
List
<
DBPDataSourceRegistry
>
handledRegistries
=
new
ArrayList
<>();
private
final
IWorkbenchWindow
workbenchWindow
;
private
IWorkbenchPart
activePart
;
private
IPageListener
pageListener
;
private
IPartListener
partListener
;
public
DataSourceToolbarHandler
(
IWorkbenchWindow
workbenchWindow
)
{
this
.
workbenchWindow
=
workbenchWindow
;
DBWorkbench
.
getPlatform
().
getNavigatorModel
().
addListener
(
this
);
final
ISelectionListener
selectionListener
=
(
part
,
selection
)
->
{
if
(
part
==
activePart
&&
selection
instanceof
IStructuredSelection
)
{
final
Object
element
=
((
IStructuredSelection
)
selection
).
getFirstElement
();
if
(
element
!=
null
)
{
if
(
RuntimeUtils
.
getObjectAdapter
(
element
,
DBSObject
.
class
)
!=
null
)
{
updateToolbar
();
}
}
}
};
pageListener
=
new
AbstractPageListener
()
{
@Override
public
void
pageClosed
(
IWorkbenchPage
page
)
{
page
.
removePartListener
(
partListener
);
page
.
removeSelectionListener
(
selectionListener
);
}
@Override
public
void
pageOpened
(
IWorkbenchPage
page
)
{
page
.
addPartListener
(
partListener
);
page
.
addSelectionListener
(
selectionListener
);
}
};
partListener
=
new
AbstractPartListener
()
{
@Override
public
void
partActivated
(
IWorkbenchPart
part
)
{
setActivePart
(
part
);
}
@Override
public
void
partClosed
(
IWorkbenchPart
part
)
{
if
(
part
==
activePart
)
{
setActivePart
(
null
);
}
}
};
workbenchWindow
.
addPageListener
(
pageListener
);
for
(
IWorkbenchPage
page
:
workbenchWindow
.
getPages
())
{
pageListener
.
pageOpened
(
page
);
}
// Register as datasource listener in all datasources
// We need it because at this moment there could be come already loaded registries (on startup)
DataSourceProviderRegistry
.
getInstance
().
addDataSourceRegistryListener
(
this
);
for
(
DBPDataSourceRegistry
registry
:
DBUtils
.
getAllRegistries
())
{
handleRegistryLoad
(
registry
);
}
}
public
void
dispose
()
{
DataSourceProviderRegistry
.
getInstance
().
removeDataSourceRegistryListener
(
this
);
for
(
DBPDataSourceRegistry
registry
:
this
.
handledRegistries
)
{
registry
.
removeDataSourceListener
(
this
);
}
handledRegistries
.
clear
();
DBWorkbench
.
getPlatform
().
getNavigatorModel
().
removeListener
(
this
);
if
(
this
.
pageListener
!=
null
)
{
this
.
workbenchWindow
.
removePageListener
(
this
.
pageListener
);
this
.
pageListener
=
null
;
}
}
public
void
setActivePart
(
@Nullable
IWorkbenchPart
part
)
{
activePart
=
part
;
if
(
activePart
instanceof
IEditorPart
)
{
updateToolbar
();
}
}
@Override
public
void
handleDataSourceEvent
(
final
DBPEvent
event
)
{
if
(
workbenchWindow
.
getWorkbench
().
isClosing
())
{
return
;
}
DBPDataSourceContainer
currentDataSource
=
DataSourceToolbarUtils
.
getCurrentDataSource
(
workbenchWindow
);
if
(
event
.
getAction
()
==
DBPEvent
.
Action
.
OBJECT_ADD
||
event
.
getAction
()
==
DBPEvent
.
Action
.
OBJECT_REMOVE
||
(
event
.
getAction
()
==
DBPEvent
.
Action
.
OBJECT_UPDATE
&&
event
.
getObject
()
==
currentDataSource
)
||
(
event
.
getAction
()
==
DBPEvent
.
Action
.
OBJECT_SELECT
&&
Boolean
.
TRUE
.
equals
(
event
.
getEnabled
())
&&
DBUtils
.
getContainer
(
event
.
getObject
())
==
currentDataSource
)
)
{
UIUtils
.
asyncExec
(
this
::
updateToolbar
);
}
// This is a hack. We need to update main toolbar. By design toolbar should be updated along with command state
// but in fact it doesn't. I don't know better way than trigger update explicitly.
// TODO: replace with something smarter
if
(
event
.
getAction
()
==
DBPEvent
.
Action
.
OBJECT_UPDATE
&&
event
.
getEnabled
()
!=
null
)
{
DataSourcePropertyTester
.
firePropertyChange
(
DataSourcePropertyTester
.
PROP_CONNECTED
);
DataSourcePropertyTester
.
firePropertyChange
(
DataSourcePropertyTester
.
PROP_TRANSACTIONAL
);
UIUtils
.
asyncExec
(
()
->
{
if
(
workbenchWindow
instanceof
WorkbenchWindow
)
{
((
WorkbenchWindow
)
workbenchWindow
).
updateActionBars
();
}
}
);
}
}
private
void
updateToolbar
()
{
DataSourceToolbarUtils
.
refreshSelectorToolbar
(
workbenchWindow
);
}
@Override
public
void
handleRegistryLoad
(
DBPDataSourceRegistry
registry
)
{
registry
.
addDataSourceListener
(
this
);
handledRegistries
.
add
(
registry
);
}
@Override
public
void
handleRegistryUnload
(
DBPDataSourceRegistry
registry
)
{
handledRegistries
.
remove
(
registry
);
registry
.
removeDataSourceListener
(
this
);
}
@Override
public
void
nodeChanged
(
DBNEvent
event
)
{
final
DBNNode
node
=
event
.
getNode
();
if
(!(
node
instanceof
DBNResource
))
{
return
;
}
IWorkbenchPage
activePage
=
workbenchWindow
.
getActivePage
();
if
(
activePage
==
null
)
{
return
;
}
IEditorPart
activeEditor
=
activePage
.
getActiveEditor
();
if
(
activeEditor
==
null
)
{
return
;
}
IFile
activeFile
=
EditorUtils
.
getFileFromInput
(
activeEditor
.
getEditorInput
());
if
(
activeFile
==
null
)
{
return
;
}
if
(
activeFile
.
equals
(((
DBNResource
)
node
).
getResource
()))
{
DBPDataSourceContainer
visibleContainer
=
DataSourceToolbarUtils
.
getCurrentDataSource
(
workbenchWindow
);
DBPDataSourceContainer
newContainer
=
EditorUtils
.
getFileDataSource
(
activeFile
);
if
(
newContainer
!=
visibleContainer
)
{
updateToolbar
();
}
}
}
}
\ No newline at end of file
plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/ui/actions/datasource/DataSourceToolbarUtils.java
浏览文件 @
d221836c
...
...
@@ -16,31 +16,17 @@
*/
package
org.jkiss.dbeaver.ui.actions.datasource
;
import
org.eclipse.core.commands.ExecutionEvent
;
import
org.eclipse.core.commands.ExecutionException
;
import
org.eclipse.core.resources.IProject
;
import
org.eclipse.e4.ui.model.application.ui.MElementContainer
;
import
org.eclipse.e4.ui.model.application.ui.MUIElement
;
import
org.eclipse.e4.ui.model.application.ui.basic.MTrimBar
;
import
org.eclipse.e4.ui.model.application.ui.basic.MTrimElement
;
import
org.eclipse.jface.dialogs.IDialogConstants
;
import
org.eclipse.swt.graphics.GC
;
import
org.eclipse.ui.IEditorPart
;
import
org.eclipse.ui.IWorkbenchWindow
;
import
org.eclipse.ui.PlatformUI
;
import
org.eclipse.ui.commands.ICommandService
;
import
org.eclipse.ui.commands.IElementUpdater
;
import
org.eclipse.ui.handlers.HandlerUtil
;
import
org.eclipse.ui.internal.WorkbenchWindow
;
import
org.eclipse.ui.menus.UIElement
;
import
org.jkiss.dbeaver.model.*
;
import
org.jkiss.dbeaver.runtime.DBWorkbench
;
import
org.jkiss.dbeaver.ui.DBeaverIcons
;
import
org.jkiss.dbeaver.ui.TextUtils
;
import
org.jkiss.dbeaver.ui.actions.AbstractDataSourceHandler
;
import
org.jkiss.dbeaver.ui.navigator.dialogs.SelectDataSourceDialog
;
import
java.util.Map
;
import
org.jkiss.dbeaver.model.DBPDataSourceContainer
;
import
org.jkiss.dbeaver.model.IDataSourceContainerProvider
;
public
class
DataSourceToolbarUtils
{
...
...
@@ -60,8 +46,7 @@ public class DataSourceToolbarUtils
return
null
;
}
public
static
void
refreshSelectorToolbar
(
ExecutionEvent
event
)
{
IWorkbenchWindow
window
=
HandlerUtil
.
getActiveWorkbenchWindow
(
event
);
public
static
void
refreshSelectorToolbar
(
IWorkbenchWindow
window
)
{
if
(
window
instanceof
WorkbenchWindow
)
{
MTrimBar
topTrim
=
((
WorkbenchWindow
)
window
).
getTopTrim
();
for
(
MTrimElement
element
:
topTrim
.
getChildren
())
{
...
...
plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/ui/actions/datasource/SelectActiveDataSourceHandler.java
浏览文件 @
d221836c
...
...
@@ -26,6 +26,7 @@ import org.eclipse.ui.IWorkbenchWindow;
import
org.eclipse.ui.commands.IElementUpdater
;
import
org.eclipse.ui.handlers.HandlerUtil
;
import
org.eclipse.ui.menus.UIElement
;
import
org.jkiss.dbeaver.core.CoreMessages
;
import
org.jkiss.dbeaver.model.*
;
import
org.jkiss.dbeaver.runtime.DBWorkbench
;
import
org.jkiss.dbeaver.ui.DBeaverIcons
;
...
...
@@ -62,8 +63,6 @@ public class SelectActiveDataSourceHandler extends AbstractDataSourceHandler imp
((
IDataSourceContainerProviderEx
)
activeEditor
).
setDataSourceContainer
(
newDataSource
);
DataSourceToolbarUtils
.
refreshSelectorToolbar
(
event
);
return
null
;
}
...
...
@@ -88,6 +87,7 @@ public class SelectActiveDataSourceHandler extends AbstractDataSourceHandler imp
}
element
.
setText
(
connectionName
);
element
.
setIcon
(
DBeaverIcons
.
getImageDescriptor
(
connectionIcon
));
element
.
setTooltip
(
CoreMessages
.
toolbar_datasource_selector_combo_datasource_tooltip
);
}
}
\ No newline at end of file
plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/ui/actions/datasource/SelectActiveSchemaHandler.java
浏览文件 @
d221836c
...
...
@@ -57,6 +57,10 @@ public class SelectActiveSchemaHandler extends AbstractDataSourceHandler impleme
@Override
public
Object
execute
(
ExecutionEvent
event
)
throws
ExecutionException
{
DBPDataSourceContainer
dataSourceContainer
=
DataSourceToolbarUtils
.
getCurrentDataSource
(
HandlerUtil
.
getActiveWorkbenchWindow
(
event
));
if
(
dataSourceContainer
==
null
)
{
log
.
debug
(
"No active connection. Action is in disabled state."
);
return
null
;
}
DatabaseListReader
databaseListReader
=
new
DatabaseListReader
(
dataSourceContainer
.
getDataSource
());
try
{
...
...
@@ -108,28 +112,26 @@ public class SelectActiveSchemaHandler extends AbstractDataSourceHandler impleme
DBIcon
schemaIcon
=
DBIcon
.
TREE_SCHEMA
;
String
schemaTooltip
=
CoreMessages
.
toolbar_datasource_selector_combo_database_tooltip
;
if
(
activeEditor
instanceof
DBPContextProvider
)
{
DBCExecutionContext
executionContext
=
((
DBPContextProvider
)
activeEditor
).
getExecutionContext
();
if
(
executionContext
!=
null
)
{
schemaName
=
"<no schema>"
;
//DBSObjectContainer objectContainer = DBUtils.getAdapter(DBSObjectContainer.class, executionContext.getDataSource());
DBSObjectSelector
objectSelector
=
DBUtils
.
getAdapter
(
DBSObjectSelector
.
class
,
executionContext
.
getDataSource
());
if
(
objectSelector
!=
null
&&
objectSelector
.
supportsDefaultChange
())
{
DBSObject
defObject
=
objectSelector
.
getDefaultObject
();
if
(
defObject
instanceof
DBSObjectContainer
)
{
// Default object can be object container + object selector (e.g. in PG)
objectSelector
=
DBUtils
.
getAdapter
(
DBSObjectSelector
.
class
,
defObject
);
if
(
objectSelector
!=
null
&&
objectSelector
.
supportsDefaultChange
())
{
//objectContainer = (DBSObjectContainer) defObject;
defObject
=
objectSelector
.
getDefaultObject
();
}
DBPDataSourceContainer
dataSource
=
DataSourceToolbarUtils
.
getCurrentDataSource
(
workbenchWindow
);
if
(
dataSource
!=
null
&&
dataSource
.
isConnected
())
{
schemaName
=
"<no schema>"
;
//DBSObjectContainer objectContainer = DBUtils.getAdapter(DBSObjectContainer.class, executionContext.getDataSource());
DBSObjectSelector
objectSelector
=
DBUtils
.
getAdapter
(
DBSObjectSelector
.
class
,
dataSource
);
if
(
objectSelector
!=
null
&&
objectSelector
.
supportsDefaultChange
())
{
DBSObject
defObject
=
objectSelector
.
getDefaultObject
();
if
(
defObject
instanceof
DBSObjectContainer
)
{
// Default object can be object container + object selector (e.g. in PG)
objectSelector
=
DBUtils
.
getAdapter
(
DBSObjectSelector
.
class
,
defObject
);
if
(
objectSelector
!=
null
&&
objectSelector
.
supportsDefaultChange
())
{
//objectContainer = (DBSObjectContainer) defObject;
defObject
=
objectSelector
.
getDefaultObject
();
}
}
if
(
defObject
!=
null
)
{
schemaName
=
defObject
.
getName
();
schemaIcon
=
DBIcon
.
TREE_SCHEMA
;
}
if
(
defObject
!=
null
)
{
schemaName
=
defObject
.
getName
();
schemaIcon
=
DBIcon
.
TREE_SCHEMA
;
}
}
}
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录