Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
suliangchun
dbeaver
提交
38d47a40
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,发现更多精彩内容 >>
提交
38d47a40
编写于
12月 13, 2018
作者:
S
Serge Rider
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Object manager model
上级
f0a42068
变更
3
隐藏空白更改
内联
并排
Showing
3 changed file
with
250 addition
and
0 deletion
+250
-0
plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/registry/ObjectManagerDescriptor.java
...c/org/jkiss/dbeaver/registry/ObjectManagerDescriptor.java
+86
-0
plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/registry/ObjectManagerRegistry.java
...src/org/jkiss/dbeaver/registry/ObjectManagerRegistry.java
+112
-0
plugins/org.jkiss.dbeaver.ext.postgresql/plugin.xml
plugins/org.jkiss.dbeaver.ext.postgresql/plugin.xml
+52
-0
未找到文件。
plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/registry/ObjectManagerDescriptor.java
0 → 100644
浏览文件 @
38d47a40
/*
* DBeaver - Universal Database Manager
* Copyright (C) 2010-2017 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.registry
;
import
org.eclipse.core.runtime.IConfigurationElement
;
import
org.jkiss.dbeaver.model.edit.DBEObjectManager
;
import
org.jkiss.dbeaver.model.impl.AbstractDescriptor
;
/**
* ObjectManagerDescriptor
*/
public
class
ObjectManagerDescriptor
extends
AbstractDescriptor
{
private
String
id
;
private
ObjectType
managerType
;
private
ObjectType
objectType
;
private
DBEObjectManager
managerInstance
;
ObjectManagerDescriptor
(
IConfigurationElement
config
)
{
super
(
config
);
this
.
id
=
config
.
getAttribute
(
RegistryConstants
.
ATTR_CLASS
);
this
.
managerType
=
new
ObjectType
(
id
);
this
.
objectType
=
new
ObjectType
(
config
.
getAttribute
(
RegistryConstants
.
ATTR_OBJECT_TYPE
));
}
void
dispose
()
{
objectType
=
null
;
managerType
=
null
;
managerInstance
=
null
;
}
public
String
getId
()
{
return
id
;
}
public
ObjectType
getObjectType
()
{
return
objectType
;
}
public
boolean
appliesToType
(
Class
clazz
)
{
return
objectType
.
matchesType
(
clazz
);
}
public
synchronized
DBEObjectManager
getManager
()
{
if
(
managerInstance
!=
null
)
{
return
managerInstance
;
}
Class
<?
extends
DBEObjectManager
>
clazz
=
managerType
.
getObjectClass
(
DBEObjectManager
.
class
);
if
(
clazz
==
null
)
{
throw
new
IllegalStateException
(
"Can't instantiate object manager '"
+
managerType
.
getImplName
()
+
"'"
);
}
try
{
managerInstance
=
clazz
.
newInstance
();
}
catch
(
Throwable
ex
)
{
throw
new
IllegalStateException
(
"Error instantiating object manager '"
+
clazz
.
getName
()
+
"'"
,
ex
);
}
return
managerInstance
;
}
@Override
public
String
toString
()
{
return
id
;
}
}
\ No newline at end of file
plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/registry/ObjectManagerRegistry.java
0 → 100644
浏览文件 @
38d47a40
/*
* DBeaver - Universal Database Manager
* Copyright (C) 2010-2017 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.registry
;
import
org.eclipse.core.runtime.IConfigurationElement
;
import
org.eclipse.core.runtime.IExtensionRegistry
;
import
org.eclipse.core.runtime.Platform
;
import
org.jkiss.dbeaver.model.edit.DBEObjectManager
;
import
org.jkiss.dbeaver.model.edit.DBERegistry
;
import
org.jkiss.dbeaver.registry.editor.EntityEditorDescriptor
;
import
java.util.ArrayList
;
import
java.util.HashMap
;
import
java.util.List
;
import
java.util.Map
;
/**
* ObjectManagerRegistry
*/
public
class
ObjectManagerRegistry
implements
DBERegistry
{
private
static
final
String
TAG_MANAGER
=
"manager"
;
//NON-NLS-1
private
static
ObjectManagerRegistry
instance
=
null
;
public
synchronized
static
ObjectManagerRegistry
getInstance
()
{
if
(
instance
==
null
)
{
instance
=
new
ObjectManagerRegistry
(
Platform
.
getExtensionRegistry
());
}
return
instance
;
}
private
List
<
ObjectManagerDescriptor
>
entityManagers
=
new
ArrayList
<
ObjectManagerDescriptor
>();
private
Map
<
String
,
ObjectManagerDescriptor
>
entityManagerMap
=
new
HashMap
<>();
private
Map
<
String
,
Boolean
>
nullEntityManagerMap
=
new
HashMap
<>();
public
ObjectManagerRegistry
(
IExtensionRegistry
registry
)
{
// Load datasource providers from external plugins
IConfigurationElement
[]
extElements
=
registry
.
getConfigurationElementsFor
(
EntityEditorDescriptor
.
EXTENSION_ID
);
for
(
IConfigurationElement
ext
:
extElements
)
{
if
(
TAG_MANAGER
.
equals
(
ext
.
getName
()))
{
ObjectManagerDescriptor
descriptor
=
new
ObjectManagerDescriptor
(
ext
);
entityManagers
.
add
(
descriptor
);
}
}
for
(
ObjectManagerDescriptor
em
:
entityManagers
)
{
entityManagerMap
.
put
(
em
.
getObjectType
().
getImplName
(),
em
);
}
}
public
void
dispose
()
{
for
(
ObjectManagerDescriptor
descriptor
:
entityManagers
)
{
descriptor
.
dispose
();
}
entityManagers
.
clear
();
entityManagerMap
.
clear
();
nullEntityManagerMap
.
clear
();
}
private
ObjectManagerDescriptor
getEntityManager
(
Class
objectType
)
{
String
targetTypeName
=
objectType
.
getName
();
// 1. Try exact match
ObjectManagerDescriptor
manager
=
entityManagerMap
.
get
(
targetTypeName
);
if
(
manager
!=
null
)
{
return
manager
;
}
if
(
nullEntityManagerMap
.
containsKey
(
targetTypeName
))
{
return
null
;
}
// 2. Find first applicable
for
(
ObjectManagerDescriptor
descriptor
:
entityManagers
)
{
if
(
descriptor
.
appliesToType
(
objectType
))
{
entityManagerMap
.
put
(
targetTypeName
,
descriptor
);
return
descriptor
;
}
}
// TODO: need to re-validate. Maybe cache will break some lazy loaded bundles?
nullEntityManagerMap
.
put
(
targetTypeName
,
Boolean
.
TRUE
);
return
null
;
}
public
DBEObjectManager
<?>
getObjectManager
(
Class
<?>
aClass
)
{
ObjectManagerDescriptor
entityManager
=
getEntityManager
(
aClass
);
return
entityManager
==
null
?
null
:
entityManager
.
getManager
();
}
public
<
T
>
T
getObjectManager
(
Class
<?>
objectClass
,
Class
<
T
>
managerType
)
{
final
DBEObjectManager
<?>
objectManager
=
getObjectManager
(
objectClass
);
if
(
objectManager
!=
null
&&
managerType
.
isAssignableFrom
(
objectManager
.
getClass
()))
{
return
managerType
.
cast
(
objectManager
);
}
else
{
return
null
;
}
}
}
plugins/org.jkiss.dbeaver.ext.postgresql/plugin.xml
浏览文件 @
38d47a40
...
...
@@ -363,6 +363,53 @@
</repository>
</extension>
<!--extension point="org.jkiss.dbeaver.objectManager">
<creator
class="org.jkiss.dbeaver.ext.postgresql.ui.editors.PostgreDatabaseCreatePage"
objectType="org.jkiss.dbeaver.ext.postgresql.model.PostgreDatabase"
type="new"/>
<manager
class="org.jkiss.dbeaver.ext.postgresql.edit.PostgreDatabaseManager"
objectType="org.jkiss.dbeaver.ext.postgresql.model.PostgreDatabase"/>
<manager
class="org.jkiss.dbeaver.ext.postgresql.edit.PostgreSchemaManager"
objectType="org.jkiss.dbeaver.ext.postgresql.model.PostgreSchema"/>
<manager
class="org.jkiss.dbeaver.ext.postgresql.edit.PostgreTableManager"
objectType="org.jkiss.dbeaver.ext.postgresql.model.PostgreTable"/>
<manager
class="org.jkiss.dbeaver.ext.postgresql.edit.PostgreTableColumnManager"
objectType="org.jkiss.dbeaver.ext.postgresql.model.PostgreTableColumn"/>
<manager
class="org.jkiss.dbeaver.ext.postgresql.edit.PostgreSequenceManager"
objectType="org.jkiss.dbeaver.ext.postgresql.model.PostgreSequence"/>
<manager
class="org.jkiss.dbeaver.ext.postgresql.edit.PostgreConstraintManager"
objectType="org.jkiss.dbeaver.ext.postgresql.model.PostgreTableConstraint"/>
<manager
class="org.jkiss.dbeaver.ext.postgresql.edit.PostgreForeignKeyManager"
objectType="org.jkiss.dbeaver.ext.postgresql.model.PostgreTableForeignKey"/>
<manager
class="org.jkiss.dbeaver.ext.postgresql.edit.PostgreIndexManager"
objectType="org.jkiss.dbeaver.ext.postgresql.model.PostgreIndex"/>
<manager
class="org.jkiss.dbeaver.ext.postgresql.edit.PostgreViewManager"
objectType="org.jkiss.dbeaver.ext.postgresql.model.PostgreView"/>
<manager
class="org.jkiss.dbeaver.ext.postgresql.edit.PostgreMViewManager"
objectType="org.jkiss.dbeaver.ext.postgresql.model.PostgreMaterializedView"/>
<manager
class="org.jkiss.dbeaver.ext.postgresql.edit.PostgreTriggerManager"
objectType="org.jkiss.dbeaver.ext.postgresql.model.PostgreTrigger"/>
<manager
class="org.jkiss.dbeaver.ext.postgresql.edit.PostgreProcedureManager"
objectType="org.jkiss.dbeaver.ext.postgresql.model.PostgreProcedure"/>
<manager
class="org.jkiss.dbeaver.ext.postgresql.edit.PostgreRoleManager"
objectType="org.jkiss.dbeaver.ext.postgresql.model.PostgreRole"/>
</extension-->
<extension
point=
"org.jkiss.dbeaver.dataSourceView"
>
<view
id=
"org.jkiss.dbeaver.ext.postgresql.dataSourceWizardView"
...
...
@@ -405,6 +452,11 @@
</extension>
<extension
point=
"org.jkiss.dbeaver.databaseEditor"
>
<creator
class=
"org.jkiss.dbeaver.ext.postgresql.ui.editors.PostgreDatabaseCreatePage"
objectType=
"org.jkiss.dbeaver.ext.postgresql.model.PostgreDatabase"
type=
"new"
/>
<manager
class=
"org.jkiss.dbeaver.ext.postgresql.edit.PostgreDatabaseManager"
objectType=
"org.jkiss.dbeaver.ext.postgresql.model.PostgreDatabase"
/>
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录