вторник, 17 июня 2008 г.

TabbedPropertySheet vs PropertySheet

В Eclipse в настоящее время реализованы два механизма отображения свойств в PropertyView:
  • PropertySheet - "обычное" представление в виде двухколоночной таблицы "имя параметра" / редактор значения. Поддержка реализуется через наследования от IPropertySource (или с помощью адаптирования). Очень просто реализуется для простых свойств. Подробнее можно почитать здесь
  • TabbedPropertySheet - представление в виде закладок на которых размещаются созданные "вручную" секции с редакторами свойств. Реализуется относительно сложнее, зато результат более адаптирован задачам, то есть более подходит в случае реализации редакторов "сложных" свойств. Подробнее можно почитать здесь.
Однако основной вопрос для меня был: "как можно выбрать какую реализацию будет применять Eclipse для отображения свойств моего view". Оказалось всё просто. Необходимо перегрузить метод getAdapter для вашего view с тем , чтобы он адаптировал ваше view к IPropertySheet:

для PropertySheetPage

public Object getAdapter(Class adapter) {
if (adapter == IPropertySheetPage.class)
return new PropertySheetPage();
return super.getAdapter(adapter);
}

для TabbedPropertySheet
 
public Object getAdapter(Class adapter) {
if(adapter.equals(IPropertySheetPage.class))
return new TabbedPropertySheetPage(new ITabbedPropertySheetPageContributor(){
@Override
public String getContributorId() {
return "MyContributorID";
}
});
return super.getAdapter(adapter);
}


Все это также применимо к CommonNavigator. Для меня была не совсем очевидной сама возможность наследования от CommonNavigator. Но эксперимент показал, что всё нормально :)
Единственное надо не забыть указать именно свой класс-потомок CommonNavigator в объявлении расширения "org.eclipse.ui.views".

К сожалению не удалось обойтись без наследования. Так как определение фабрики/адаптера CommonNavigator к IProperySheePage не работает. Видимо из какого-то модуля аналогичный адаптер уже регистрируется.

четверг, 12 июня 2008 г.

Использование внешних библиотек plugin'ах Eclipse

Для того, чтобы использовать в plugin'ах классы из внешних библиотек их (jar'ы) придётся включать (физически) внутрь нашего plugin'а.
Разместив jar внутри какой-либо папки проекта plugin'а необходимо в редакторе манифеста на вкладке Runtime в блоке classpath добавить этот самый файл библиотеки.



Для того, чтобы не включать одни и те-же библиотеки в каждый plugin, можно их обернуть в специальный plugin, который в свою очередь экспортирует нужные пакеты для других plugin'ов. Для этого на той-же вкладке Runtime нужно добавить необходимые пакеты в поле Exported pakages




Необходимо отметить, что экспорт пакетов будет доступен только если plugin был сделан как java проект.

Bug при запуске Eclipse 3.4.0

При работе в Eclupse 3.4.0 (Ganimede RC4) обнаружился такой баг - попытка запустить среду на отладку (с целью отладить plug'in) запуск останавливается с ошибкой:

org.eclipse.swt.SWTError: XPCOM error -2147467262
at org.eclipse.swt.browser.Mozilla.error(Mozilla.java:1597)
at org.eclipse.swt.browser.Mozilla.setText(Mozilla.java:1820)
at org.eclipse.swt.browser.Browser.setText(Browser.java:733)
...

исследование вопроса привело сюда. Тут же указан обходной рецепт. Для меня он выглядел как указание в конфигурации отладки параметра:
-Dorg.eclipse.swt.browser.XULRunnerPath=/dev/null.

Что и помогло в итоге. Может и Вам поможет.