Eclipse RCP: требуется ли для CNF без подключаемого модуля IDE пользовательский ContentProvider?

#java #swt #eclipse-rcp #rcp #cnf

#java #swt #eclipse-rcp #rcp #cnf

Вопрос:

В приложении RCP я хотел бы создать общее представление Navigator Framework, начиная только с ресурсов локальной файловой системы.

Я сделал это в одном проекте, который включает в себя подключаемый модуль org.eclipse.ui.ide. Однако это создает чрезмерно сложный пользовательский интерфейс, который не подходит для этого приложения. (Например, он добавляет около 20 панелей настроек, некоторые из которых связаны со сборками и контролем версий.)

Итак, теперь я пытаюсь сделать это без подключаемого модуля ~.ide — и без плагина org.eclipse.ui.navigator.resources, который зависит от него.

В приложении RCP мне удалось создать новый проект workspace (я думаю) с помощью приведенного ниже кода в плагине с расширениями ~ navigator.viewer, показанными ниже. Но в представлении CNF ничего не отображается.

Вопросы:

  • Поскольку я исключаю подключаемый модуль org.eclipse.ui.navigator.resources, нужно ли мне определять моего собственного поставщика контента?
  • Используется ли класс ResourceExtensionContentProvider в подключаемом модуле org.eclipse.ui.navigator.resources для реализации привязки содержимого org.eclipse.ui.navigator.resourceContent?

plugin.xml выдержка

  <extension
     point="org.eclipse.ui.navigator.viewer">
   <viewerActionBinding
        viewerId="com.mycompany.app.gen.workspace">
     <includes>
         <actionExtension pattern="org.eclipse.ui.navigator.resources.*" />
     </includes>
   </viewerActionBinding>
   <viewerContentBinding 
        viewerId="com.dnastar.app.gen.workspace">
      <includes>
         <contentExtension pattern="org.eclipse.ui.navigator.resourceContent" />                      
     <contentExtension pattern="org.eclipse.ui.navigator.resources.filters.*"/>
         <contentExtension pattern="org.eclipse.ui.navigator.resources.linkHelper"/>
         <contentExtension pattern="org.eclipse.ui.navigator.resources.workingSets"/>
      </includes>
   </viewerContentBinding>
 </extension>
  

Код, используемый для создания нового проекта (включен для полноты):

         Path path = new Path( sPath );
        File filePath = new File( sPath );
        String fileBaseName = filePath.getName();
        String projectName = fileBaseName; // For now

        IWorkspace workspace = ResourcesPlugin.getWorkspace();
        IProjectDescription projDescr = workspace.newProjectDescription( projectName );
        projDescr.setLocation( path );

        IWorkspaceRoot root = workspace.getRoot();
        IProject project = root.getProject( projectName );

        try {
            project.create( projDescr, null );

            if ( ! project.isOpen() ) {
                project.open( null );
            }
        } catch (CoreException e) {
             MessageDialog.openError( Display.getCurrent().getActiveShell(),
                     "New Project Error", "Could not create new project."   "n["   e   "]");
        }
  

Ответ №1:

Вместо использования класса CommonNavigator вам нужно расширить его, а затем переопределить метод getInitialInput(). Там возвращается IWorkspaceRoot

Комментарии:

1. По-прежнему ничего не отображается в окне навигатора. Добавлен подкласс CommonNavigator, а в getInitialInput() возвращен ResourcesPlugin.getWorkspace().getRoot(). В plugin.xml заменил класс представления CommonNavigator на подкласс. Спасибо за помощь. Я что-то упускаю?

2. Нет. Это должно сработать. Есть ли у вас какие-либо проекты в рабочей области? Если это так, я предлагаю вам исправить ошибку в Eclipse Bugzilla.

3. Нужно ли мне где-то предоставлять поставщика пользовательских меток?

4. В проекте, использующем подключаемые модули ~ide и ~navigator.resources, содержимое получается с помощью класса ~navigator.resources ResourceExtensionContentProvider.