分享

在Eclipse RCP中屏蔽Eclipse扩展点自带的General功能

 小不点的书房斋 2011-06-20
 在自己的Eclipse的RCP产品中,可能经常要集成第三方的插件,来满足特定的功能需要,但是对于一些不需要的功能,通常的做法是该插件修改源代码,如果出于许可或非开源的原因,无法修改,或删除其源代码,就要考虑如何在RCP中控制其扩展点的加载。
       可以在RCP的WorkbenchWindowAdvisor.preWindowOpen中,取到所有加载的扩展点,然后进行相应的过滤处理首先使用WorkbenchPlugin.getDefault()得到WorkbenchPlugin;。通过WorkbenchPlugin可以获取各种类型的扩展点的注册表WorkbenchPlugin 。getActionSetRegistry()得到的注册表中存有所有的ActionSet扩展点; WorkbenchPlugin.getViewRegistry()得到了所有的意见,扩展点通过注册表的removeExtension()可以去掉相应的扩展点,使其不被加载到RCP中。
     具体使用方法如下:
1、(移除wizard中的General)// 移除文件菜单下导入功能中自带的General
AbstractExtensionWizardRegistry importWizardRegistry = (AbstractExtensionWizardRegistry) WorkbenchPlugin
   .getDefault().getImportWizardRegistry();
IWizardCategory[] categories = wizardRegistry.getRootCategory().getCategories();
for (int i = 0; i < categories.length; i++){
if(categories[i].getId().equals("org.eclipse.ui.Basic")){
IWizardDescriptor[] wizard = categories[i].getWizards();
IExtensionRegistry registry = Platform.getExtensionRegistry();
IExtensionPoint point = registry.getExtensionPoint("org.eclipse.ui.importWizards");
IExtension[] extensions = point.getExtensions();
for (int j = 0; j < wizard.length; j++){
wizardRegistry.removeExtension(extensions[i],
   new Object[] {wizard[j] });
}
}
}

2、(移除wizard中的General)// 移除文件菜单下导出功能中自带的General
AbstractExtensionWizardRegistry exportWizardRegistry = (AbstractExtensionWizardRegistry) WorkbenchPlugin
   .getDefault().getExportWizardRegistry();
IWizardCategory[] categories = wizardRegistry.getRootCategory().getCategories();
for (int i = 0; i < categories.length; i++){
if(categories[i].getId().equals("org.eclipse.ui.Basic")){
IWizardDescriptor[] wizard = categories[i].getWizards();
IExtensionRegistry registry = Platform.getExtensionRegistry();
IExtensionPoint point = registry.getExtensionPoint("org.eclipse.ui.exportWizards");
IExtension[] extensions = point.getExtensions();
for (int j = 0; j < wizard.length; j++){
wizardRegistry.removeExtension(extensions[i],
   new Object[] {wizard[j] });
}
}
}

3、(移除view中的General)// 移除窗口菜单下显示视图中自带的General
ViewRegistry viewRegistry = (ViewRegistry) WorkbenchPlugin.getDefault().getViewRegistry();
IViewCategory[] viewCat = viewRegistry.getCategories();
for (int i = 0; i < viewCat.length; i++){
if(viewCat[i].getId().equals("org.eclipse.ui")){
IViewDescriptor[] viewDes = viewCat[i].getViews();
IExtensionRegistry registry = Platform.getExtensionRegistry();
IExtensionPoint point = registry.getExtensionPoint("org.eclipse.ui.views");
IExtension[] extensions = point.getExtensions();
for (int j = 0; j < viewDes.length; j++){
if(!viewDes[j].getId().equals("org.eclipse.ui.console.ConsoleView")){
viewRegistry.removeExtension(extensions[i],
   new Object[] {viewDes[j] });
}

}
}
}
4、(移除ActionSet中的General)

ActionSetRegistry reg = WorkbenchPlugin.getDefault().getActionSetRegistry();
IActionSetDescriptor[] actionSets = reg.getActionSets();
// removing annoying gotoLastPosition Message.
String actionSetId = "org.eclipse.ui.edit.text.actionSet.navigation"; //$NON-NLS-1$
for (int i = 0; i <actionSets.length; i++)
{
    if (!actionSets[i].getId().equals(actionSetId))
        continue;
        IExtension ext = actionSets[i].getConfigurationElement()
            .getDeclaringExtension();
        reg.removeExtension(ext, new Object[] { actionSets[i] });
}
// Removing convert line delimiters menu.
actionSetId = "org.eclipse.ui.edit.text.actionSet.convertLineDelimitersTo"; //$NON-NLS-1$
for (int i = 0; i <actionSets.length; i++)
{
    if (!actionSets[i].getId().equals(actionSetId))
        continue;
    IExtension ext = actionSets[i].getConfigurationElement()
            .getDeclaringExtension();
   reg.removeExtension(ext, new Object[] { actionSets[i] });
}


    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多