Eclipse RCP - 在Project Explorer中向现有Project添加属性

时间:2013-11-04 13:23:15

标签: java eclipse-plugin eclipse-rcp

Graoverings stackoverflownians,

我正在开发一个Eclipse RCP应用程序,其中也是标准的Project Explorer View

我需要向org.eclipse.core.internal.resources.Project添加几个属性,与标准Resource中的常用Properties View属性一起显示。

我的思考过程是我向SelectionService添加了另一个听众:

window =PlatformUI.getWorkbench().getActiveWorkbenchWindow();
window.getSelectionService().addSelectionListener("org.eclipse.ui.navigator.ProjectExplorer", listener);

并在此选择监听器中,我获取所选项目,更改它,并将其传递给选择服务。

麻烦的是,我没有任何方法来在没有内容提供商的情况下以编程方式设置选择。

另外,据我所知,Project没有实现IPropertySource,因此将其子类化很难,覆盖getPropertyDescriptors/Values方法......

如果是这样,我如何获得Project Explorer视图的内容提供商?

或者我如何在SelectionService

中设置选择

任何帮助/意见赞赏!

1 个答案:

答案 0 :(得分:1)

我已经成功地向现有IProject添加了一个属性,尽管它没有实现IPropertySource(因此可以通过子类化和覆盖{{1}来添加一些功能。 }和getPropertyDescriptors方法。

感谢greg-449,我能够理解getPropertyValue的{​​{1}}功能StandardPropertiesAdapterFactoryResourcePropertySource扩展{/ 1}}

因此,解决所有这些问题的一种方法是使用IProject的子类来显示IResource的属性......

这是kewd:

我将AdvancedPropertySection的视图ID与IProject中的ProjectExplorer相关联:

TabDescriptorProvider

之后,我们定义plugin.xml,并将其链接到我们的自定义<extension point="org.eclipse.ui.views.properties.tabbed.propertyContributor"> <propertyContributor contributorId="org.eclipse.ui.navigator.ProjectExplorer" tabDescriptorProvider="eb.tresos.bustools.connection.extraproperty.TabDescriptorProvider"> <propertyCategory category="tabbedCategory"> </propertyCategory> </propertyContributor> </extension>

TabDescriptorProvider

AdvancedPropertySection本身:

public class TabDescriptorProvider implements ITabDescriptorProvider {

    @Override
    public ITabDescriptor[] getTabDescriptors( IWorkbenchPart part, ISelection selection ) {
        AbstractTabDescriptor[] tabs = new AbstractTabDescriptor[1];
        tabs[0] = new TabDescriptor("Aww shucks, TabDescriptorTitle");

        return tabs;
    }

    class TabDescriptor extends AbstractTabDescriptor {
        String label;

        /**
         * Constructor
         * 
         * @param label sets the label text of the tab
         */
        TabDescriptor( String label ) {
            this.label = label;
        }

        @SuppressWarnings("rawtypes")
        @Override
        public List getSectionDescriptors() {
            List<SectionDescriptor> sList = new ArrayList<SectionDescriptor>();
            sList.add( new SectionDescriptor( label ) );

            return sList;
        }

        @Override
        public String getCategory() {
            //Stub
            return "";
        }

        @Override
        public String getId() {
            //stub
            return "";
        }

        @Override
        public String getLabel() {
            return "Resource";
        }
    }

    class SectionDescriptor extends AbstractSectionDescriptor {

        String section;
        List<AbstractPropertySection> sectionTabs = new ArrayList<AbstractPropertySection>();

        public SectionDescriptor( String section ) {
            this.section = section;

        }

        /**
         * SectionId
         */
        @Override
        public String getId() {
            //stub
            return "";
        }

        /**
         * SectionClass
         */
        @Override
        public ISection getSectionClass() {
            return new AuxiliaryProjectSection();
        }

        /**
         * SectionTab
         */
        @Override
        public String getTargetTab() {
            //stub
            return "";
        }

    }

}

再次感谢,格雷格!