Сколько способов обмена данными между плагинами Eclipse RCP?

У меня есть приложение RCP и подключаемый модуль RCP (A), которые внесли часть. В части есть TreeViewer (со многими элементами). Я также определил всплывающее меню с некоторыми пунктами меню (в файле .e4xmi), а затем зарегистрировал это меню в TreeViewer.

Я пишу еще один плагин RCP (B), который будет способствовать всплывающему меню пункта меню, и в обработчике я хочу удалить выбранный элемент в TreeViewer.

Проблема в том, что я не могу получить доступ к данным части (A) в B. Как A может поделиться данными (TreeViewer) с B? Я нашел решение с помощью EventBroker, но мне нужны и другие. Можете ли вы дать мне несколько предложений или подсказок? Спасибо!


person aviit    schedule 07.11.2017    source источник


Ответы (2)


Есть много способов сделать это. Для приложения e4 проще всего создать одноэлементный класс, содержащий ваши данные, к которым могут получить доступ все подключаемые модули.

Вы можете указать, что класс является создаваемым синглтоном для системы внедрения, используя:

@Creatable
@Singleton
public class MyDataMananger
{
  ....
}

Затем классы в плагине могут внедрить класс:

@Inject
MyDataManager manager;

Вы также можете

  • Используйте службы OSGi и используйте файл ServiceTracker.
  • Внедрить классы, созданные с помощью файла ContextFunction.
  • Просто получите доступ к одноэлементному классу через активатор плагина (например, ResourcesPlugin.getWorkspace()).
  • Определение точки расширения для службы
person greg-449    schedule 07.11.2017
comment
Спасибо за синглтон. Я также знаю об этом. Можете ли вы дать мне несколько советов или ключевых слов о других? Я искал информацию об обмене данными между плагинами, но пока не удовлетворен. Спасибо! - person aviit; 08.11.2017
comment
Добавил еще несколько методов - person greg-449; 08.11.2017

Другой способ — хранить данные в правильном контексте e4
Объяснение контекстов E4 eclipse может быть найдено здесь
Кроме того, если у вас есть доступ к файлу TreeViewer itsefdl, данные можно сохранить с помощью метода setData(..)

person titou10    schedule 09.11.2017