【仅供内部供应商使用,不提供对外解答和培训】
...
产品线 | 版本 | 支持情况 | 备注 |
|---|---|---|---|
| FR | 10.0 | 支持 | |
| BI | 5.1.3 | 支持 |
| Code Block | ||||||||||
|---|---|---|---|---|---|---|---|---|---|---|
| ||||||||||
<extra-decision>
<ComposeWebResourceProvider class="your class name"/>
</extra-decision> |
...
| Code Block | ||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| ||||||||||||
package com.fr.web.struct;
import com.fr.common.annotations.Open;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.LinkedHashSet;
import java.util.List;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
/**
* 扩展子组件的管理器
*/
@Open
public class Registry {
private static Map<Class<? extends Atom>, LinkedHashSet<Atom>>
children = new ConcurrentHashMap<Class<? extends Atom>, LinkedHashSet<Atom>>();
/**
* 注册某个组件所需要的子组件
* @param clazz 父组件
* @param atom 子组件
*/
public static void register(Class<? extends Atom> clazz, Atom... atom) {
LinkedHashSet<Atom> set = children.get(clazz);
if (set == null) {
set = new LinkedHashSet<Atom>();
children.put(clazz, set);
}
Collections.addAll(set, atom);
}
public static void remove(Class<? extends Atom> clazz, Atom... atom) {
LinkedHashSet<Atom> set = children.get(clazz);
if (set == null) {
return;
}
set.removeAll(Arrays.asList(atom));
}
/**
* 获取一个组件的所有额外的子组件
* @param clazz 父组件
* @return 所有的子组件组成的数组
*/
public static Atom[] getChildren(Class<? extends Atom> clazz) {
LinkedHashSet<Atom> set = children.get(clazz);
if (set == null) {
return new Atom[0];
}
set.remove(null);
List<Atom> list = new ArrayList<Atom>();
for (Atom atom : set) {
Filter filter = atom.filter();
if (filter == null || filter.accept()) {
list.add(atom);
}
}
return list.toArray(new Atom[0]);
}
}
|
目前经过实际统计,在最新的版本中,以下组件支持使用插件进行子组件扩展。也就是接口的attach方法可以返回的key值如下:
假设 $HOST = http(s)://$IP:$PORT/webroot/decision
...
CommonComponent.KEY
...
2.DirectoryComponent.KEY——$HOST/directory 单独集成平台报表目录的页面
3.EncryptionComponent.KEY——$HOST/v10/encryption/page 平台切换国密的时候才可能会用到,主要用于提示异常。绝大部分情况下应该是没啥用处的。
4.InitializationComponent.KEY——$HOST/login/initialization 如果系统没有设置超管和finedb数据源的情况下才会出现的页面,大部分时候也没啥用处
5.LoginComponent.KEY——$HOST/login 访问登录页时会加载
6.MainComponent.KEY——$HOST 访问决策平台主页时加载
7.MapEditComponent.KEY——$HOST#management/map 访问决策平台地图配置功能时加载
8.MigrationComponent.KEY——$HOST/v10/migration/page FineDb迁移数据时的进度页面,在插件中用处不大
9.PrivilegeComponent.KEY——$HOST/privilege 单独访问权限管理页面时生效
10.UserComponent.KEY——$HOST/user 单独访问用户管理页面时生效
11.ScheduleComponent.KEY——$HOST/timer 单独访问定时调度页面时生效
12.WorkflowComponent.KEY——$HOST/workflow/authority 单独访问多级上报权限控制页面时生效
...
ConnectionComponent.KEY
...
DataSetComponent.KEY
...
DataSet组件在访问决策平台主页时加载,服务器数据集管理组件的资源,但是感觉产品加载的时机过于提前了。
...
MainComponent.KEY
...
DeployComponent.KEY
...
DirectoryComponent.KEY
...
EncryptionComponent.KEY
...
FormMainComponent.KEY
...
ReportMainComponent.KEY
...
从纯技术上说,这个接口能实现的功能使用WebResourceProvider绝大部分场景都能实现,从实践上看主要是有这么两个用途:
1.对于批量组件的引入,能简化plugin.xml的结构。
2.能够在启动阶段配合其他接口,实现组件的动态引入。
其他使用方法直接参考WebResourceProvider即可。
demo地址:demo-compose-web-resource-provider
废弃的Atom client()接口方法仅作为兼容保留。新插件中全部使用Atom[] clients();实现即可。
入门demo地址:demo-web-resource-simple
全功能测试demo地址(包含该接口的所有使用场景):demo-web-resource
免责声明:所有文档中的开源示例,均为开发者自行开发并提供。仅用于参考和学习使用,开发者和官方均无义务对开源案例所涉及的所有成果进行教学和指导。禁止用于任何商业用途,若作为商用一切后果责任由使用者自行承担。