因项目需要,需要在eclipse RCP启动之前弹出登录对话框,登录之后根据人员权限分配功能模块。可以在
PlatformUI.createAndRunWorkbench(display, new IDEWorkbenchAdvisor());
之前完成这些工作,但是在加载各种视图是遇到问题。于是采用如下方法解决。
因为要使RCP启动之后,根据数据库中的模块加载插件,所以必须对插件进行判断,并把不属于当前用户的插件从插件注册表中去除。ExtensionRegistry提供了removeExtension方法,但是需要传递一个token,而此令牌来自系统启动时创建,且在此类中是一个private,于是只好先通过反射取得令牌:Object token;
ExtensionRegistry extReg = (ExtensionRegistry) Platform
.getExtensionRegistry();
try {
Field field = extReg.getClass().getDeclaredField("masterToken");
field.setAccessible(true);
token = field.get(extReg);
} catch (Exception e) {
return;
}
然后就可以
((ExtensionRegistry) extReg).removeExtension(exts, token);
删除掉指定的插件了。
PlatformUI.createAndRunWorkbench(display, new IDEWorkbenchAdvisor());
之前完成这些工作,但是在加载各种视图是遇到问题。于是采用如下方法解决。
因为要使RCP启动之后,根据数据库中的模块加载插件,所以必须对插件进行判断,并把不属于当前用户的插件从插件注册表中去除。ExtensionRegistry提供了removeExtension方法,但是需要传递一个token,而此令牌来自系统启动时创建,且在此类中是一个private,于是只好先通过反射取得令牌:Object token;
ExtensionRegistry extReg = (ExtensionRegistry) Platform
.getExtensionRegistry();
try {
Field field = extReg.getClass().getDeclaredField("masterToken");
field.setAccessible(true);
token = field.get(extReg);
} catch (Exception e) {
return;
}
然后就可以
((ExtensionRegistry) extReg).removeExtension(exts, token);
删除掉指定的插件了。