RCP-приложение платформы Eclipse

Проект Eclipse включает подпроекты Eclipse Platform, Java development tools (JDT) и Plug-in Development Environment (PDE). Вместе реализации этих трех подпроектов составляют среду разработки Eclipse SDK (Software Development Kit), предназначенную для создания программного обеспечения, основанного на Eclipse-платформе, а также для развития самой Eclipse-платформы.

Платформа Eclipse является фундаментом, на основе которого с помощью Eclipse-плагинов создаются все остальные Eclipse-продукты. В свою очередь, Eclipse-платформа состоит из набора подсистем, которые представлены также Eclipse-плагинами, работающими в среде выполнения Eclipse-платформы. Такое деление по основной функциональности выделяет следующий набор компонентов Eclipse-платформы :

  • Platform Runtime — основанная на спецификации OSGi среда выполнения.
  • Workbench — набор графических инструментов, созданных на основе библиотек SWT и JFace.
  • Workspace — рабочее пространство, физически представленное каталогом локальной файловой системы, в котором находятся Eclipse-проекты.

Из компонентов Eclipse-платформы можно выделить минимальный набор Eclipse-плагинов, известный как Rich Client Platform (RCP), на основе которого возможно создание любых клиентских приложений. Платформа RCP включает в себя такие компоненты, как среда выполнения на основе OSGi, библиотеки SWT и JFace, графическая многооконная Workbench-среда и связанные с ней компоненты.

Eclipse-платформа содержит несколько мастеров по созданию RCP-продуктов, а также мастер конфигурирования и экспорта продукта. Это существенно упрощает подготовку созданного RCP-продукта для развертывания клиентам. Экспорт RCP-продукта может быть выполнен как в целевой каталог, так и в архив для передачи клиенту. Имеется возможность создания сборки сразу для нескольких операционных платформ.

Для демонстрационных целей, а также в качестве отправной точки для собственных продуктов теперь доступны мастера по созданию приложений на основе нескольких шаблонов RCP-приложений — от простейшего "Hello RCP" до "RCP Mail Template". Создадим RCP-приложения с использованием мастера.

Пример RCP-приложения

При разработке RCP-приложения использовался IDE Eclipse версии «Luna Service Release 2 (4.4.2)». Для создания проекта используем соответствующий мастер. Для этого открываем окно выбора типа проекта (File -> New -> Project) и в секции «Plug-in Development» выбираем мастера создания проекта «Plug-in Project». В открывшемся окне определяем наименование проекта (например, «com.rcp.demo») и переходим к следующему шагу нажатием на клавишу «Next».

На втором шаге контролируем параметры плагина (будут установлены автоматически), установку флага «Generate an activator, ...», и в селекторе "Would you like to create a 3.х rich client application?" устанавливаем «Yes» и переходим к следующему шагу.

На третьем шаге из списка доступных шаблонов выбираем «RCP Mail Template» и нажимаем кнопку Finish.

В результате выполнения трех шагов мастер Plug-in Project PDE-плагин на основе выбранного шаблона создаст RCP-проект, структура которого представлена на следующем скриншоте.

Папка src сгенерированного проекта содержит следующие основные классы RCP-приложения : Activator, Application, ApplicationActionBarAdvisor, ApplicationWorkbenchAdvisor, ApplicationWorkbenchWindowAdvisor, Perspective.

Класс Activator расширяет класс org.eclipse.ui.plugin.AbstractUIPlugin, который предоставляет методы жизненного цикла start() и stop(), обеспечивает реестр изображений, используемых плагином, и настройки плагина.

Класс Application реализует интерфейс org.eclipse.equinox.app.IApplication, представляющий точку входа в RCP-приложение. Реализация интерфейса IApplication должна быть объявлена в расширении org.eclipse.core.runtime.applications файла plugin.xml как значение атрибута class тега <application>/<run>.

Интерфейс IApplication предоставляет два метода — start() и stop(), вызываемых средой выполнения при запуске приложения и выходе из него. В методе start() класса Application создается объект org.eclipse.swt.widgets.Display, предназначенный для отображения графического интерфейса библиотеки SWT в соответствующей операционной системой.

На основе Display-объекта и экземпляра класса ApplicationWorkbenchAdvisor приложения создается и запускается GUI-интерфейс Workbench-среды с помощью статического метода createAndRunWorkbench() класса org.eclipse.ui.PlatformUI, обеспечивающего доступ к GUI-интерфейсу Eclipse-платформы. Этот метод возвращает код своего выполнения, который может означать нормальное завершение (RETURN_OK), требование перезапуска Workbench-среды (RETURN_RESTART), невозможность запуска Workbench-среды (RETURN_UNSTARTABLE) и указание на то, что Workbench-среда была закрыта из соображений безопасности (RETURN_EMERGENCY_CLOSE). Основываясь на коде, возвращенном методом createAndRunWorkbench(), метод start() класса Application возвращает соответствующие константы интерфейса IApplication.

Класс ApplicationWorkbenchAdvisor расширяет класс WorkbenchAdvisor, обеспечивая конфигурацию Workbench-среды. Класс ApplicationWorkbenchAdvisor переопределяет метод createWorkbenchWindowAdvisor() класса WorkbenchAdvisor, создавая в нем экземпляр класса Application-WorkbenchWindowAdvisor приложения на основе объекта IWorkbenchWindowConfigurer среды выполнения, с помощью которого можно установить связанные с окном приложения данные в виде пар "ключ—значение", первоначальные размеры окна, его стиль, заголовок и оформление.

Класс ApplicationWorkbenchWindowAdvisor расширяет класс WorkbenchWindowAdvisor, обеспечивая конфигурацию окна Workbench-среды. Класс ApplicationWorkbenchWindowAdvisor переопределяет метод createActionBarAdvisor() класса WorkbenchWindowAdvisor, в котором создается экземпляр класса ApplicationActionBarAdvisor приложения на основе объекта IActionBarConfigurer среды выполнения, обеспечивающего конфигурацию панели действий окна приложения. Также класс ApplicationWorkbenchWindowAdvisor переопределяет метод preWindowOpen() класса WorkbenchWindowAdvisor, который вызывается средой выполнения перед созданием GUI-компонентов окна приложения и в котором определяется конфигурация окна приложения.

Класс ApplicationActionBarAdvisor расширяет класс ActionBarAdvisor, обеспечивая конфигурацию меню окна приложения. Класс ApplicationActionBarAdvisor переопределяет методы makeActions() и fillMenuBar() класса ActionBarAdvisor, отвечающие за создание действий и заполнение панели меню окна приложения.

Класс ApplicationWorkbenchAdvisor также переопределяет метод getInitialWindowPerspectiveId() класса WorkbenchAdvisor, который вызывается средой выполнения при создании окна приложения и возвращает идентификатор перспективы, отображаемой в окне приложения.

Идентификатор перспективы определяется в расширении org.eclipse.ui.perspectives файла plugin.xml как значение атрибута id тега <perspective>. В расширении org.eclipse.ui.perspectives также объявляется класс Perspective приложения, реализующий интерфейс IPerspectiveFactory, который отвечает за первоначальную компоновку и наполнение перспективы — визуального контейнера представлений и редактора окна приложения. Интерфейс IPerspectiveFactory имеет единственный метод createInitialLayout (IPageLayout layout), в котором на основе объекта IPageLayout среды выполнения в перспективу, первоначально содержащую только область редактирования, добавляются представления.

Файл изображения splash.bmp проекта приложения представляет заставку загрузки RCP-приложения и для своего отображения по умолчанию должен располагаться в корневом каталоге приложения и иметь именно такое имя и расширение.

Запуск проекта

В результате создания проекта по-умолчанию открывается редактор свойств RCP-приложения, представленный на следующем скриншоте. Если случайным образом закрыли его, то необходимо перейти в папку META-INF и открыть манифест MANIFEST.MF. Содержание манифеста включает дополнительные параметры, определенные в спецификации OSGi, которые сигнализируют Eclipse о необходимости открытия редактора свойств RCP-приложения. Данный редактор позволяет менять многие настройки проекта, подключать дополнительные плагины, подключать и управлять расширениями, настраивать сборку плагина и многое другое.

Чтобы запустить только что созданное нами RCP-приложение необходимо на вкладке «Overview» в разделе «Testing» нажать на ссылку «Launch an Eclipse application». На следующем скриншоте представлен интерфейс приложения.

  Рейтинг@Mail.ru