Аранжировщик файлов. Hello, world

До окончательной проработки дизайна разрабатываемого приложения можно уже начинать создавать костяк проекта, на который будет постепенно наращиваться "мясо". На основе базового шаблона Hello world создадим простейшее eclipse RCP приложение. Данный шаблон генерирует минимум классов, которые необходимы для создания простейшего приложения. Этот шаблон выбран для того, чтобы постепенно изучать все возможности, которые предоставляет нам платформа разработки eclipse IDE.

Рис. 1. Простейшее RCP-приложение Hello world

Установленная ранее целевая платформа сама по себе не является рабочим продуктом. Старт программы начинается в классе, который указан в точке расширения файла манифеста:

<extension id="application"
point="org.eclipse.core.runtime.applications">
<application>
<run
class="com.berdaflex.filearranger.Application">
</run>
</application>
</extension>

В нашем случае это класс Application, который реализует интерфейс IPlatformRunnable. Данный интерфейс содержит всего лишь один метод run(Object args) для запуска программы, который эквивалентен методу main(..) обычного Java-приложения.


Рис. 2. Класс запуска приложения в редакторе манифеста

public class Application implements IPlatformRunnable {
public Object run(Object args) throws Exception {
Display display = PlatformUI.createDisplay();
try {
int returnCode = PlatformUI.createAndRunWorkbench(display, new ApplicationWorkbenchAdvisor());
if (returnCode == PlatformUI.RETURN_RESTART) {
return IPlatformRunnable.EXIT_RESTART;
}
return IPlatformRunnable.EXIT_OK;
} finally {
display.dispose();
}
}
}

Класс ApplicationWorkbenchAdvisor расширяет абстрактный класс WorkbenchAdvisor, который содержит вызываемые при старте платформы методы:
. initialize — вызывается первым до создания окон, используется для начальной инициализации;
. preStartup — вызывается вторым после метода initialize, но до открытия окон. Обычно используется для блокировки операций во время старта или восстановления;
. postStartup — третий метод — вызывается после открытия первого окна, используется дря разблокировки; операций, которые были запрещены на предыдущем этапе запуска;
. postRestore — вызывается после пересоздания рабочей среды и окон из ранее сохраненного состояния, используется для восстановления состояния приложения при перезапуске;
. preWindowOpen — вызывается перед открытием любого окна, используется для конфигурирования окон, если это необходимо;
. fillActionBars — вызывается после метода preWindowOpen для конфигурирования панелей быстрого запуска;
. postWindowRestore — вызывается после пересоздания окон из ранее сохраненного состояния, используется для восстановления состояния окон;
openIntro — вызывается перед открытием окна для вызова компонента введения, если таковой присутствует;
. postWindowOpen — вызывается после открытия окна;
. preWindowShellClose — вызывается перед закрытием окна;
. eventLoopException — вызывается в случае возникновения критической ошибки для информирования пользователя о возможных проблемах;
. eventLoopIdle — вызывается после обработки всех сообщений для информирования, что система находится в режиме простоя;
. preShutdown — вызывается перед завершением работы системы, при поступлении события необходимости завершения работы и до закрытия окон;
. postShutdown — вызывается последним после завершения основного цикла программы и закрытия всех окон, используется для освобождения ресурсов.

В классе ApplicationWorkbenchAdvisor должен быть реализован как минимум один метод:
. getInitialWindowPerspectiveId — возвращает идентификатор стартовой проекции или null. Данный метод вызывается в процессе старта рабочей среды при создании первого окна.

Если был реализован метод createWorkbenchWindowAdvisor, который создает новый конфигуратор рабочей среды, то он переопределяет все методы жизненного цикла базового конфигуратора. В нашем случае создается конфигуратор ApplicationWorkbenchWindowAdvisor, который управляет процессом создания графического интерфейса пользователя.

public class ApplicationWorkbenchWindowAdvisor extends WorkbenchWindowAdvisor {
public ApplicationWorkbenchWindowAdvisor(IWorkbenchWindowConfigurer configurer) {
super(configurer);
}

public ActionBarAdvisor createActionBarAdvisor(IActionBarConfigurer configurer) {
return new ApplicationActionBarAdvisor(configurer);
}

public void preWindowOpen() {
IWorkbenchWindowConfigurer configurer = getWindowConfigurer();
configurer.setInitialSize(new Point(400, 300));
configurer.setShowCoolBar(false);
configurer.setShowStatusLine(false);
configurer.setTitle("File Arranger");
}
}

В методе preWindowOpen() выставляются начальные размеры окна, текст заголовка, режимы отображения панелей. Метод
createActionBarAdvisor(IActionBarConfigurer configurer) создает класс, определяющий все операции, доступные в приложении, а также создает меню. На данном этапе создается пустая заглушка с требуемыми методами.

public class ApplicationActionBarAdvisor extends ActionBarAdvisor {

public ApplicationActionBarAdvisor(IActionBarConfigurer configurer) {
super(configurer);
}

protected void makeActions(IWorkbenchWindow window) {
}

protected void fillMenuBar(IMenuManager menuBar) {
}
}

Класс начальной проекции Perspective — это последний класс, который был создан мастером. Для удобства работы с несколькими проекциями в будущем переименуем его в FileArrangerPerspective.

public class FileArrangerPerspective implements IPerspectiveFactory {

public void createInitialLayout(IPageLayout layout) {
}
}

Указание на начальную проекцию задается в методе getInitialWindowPerspectiveId() класса WorkbenchWindowAdvisor. Данный метод должен возвращать идентификатор проекции, по которому определяется класс проекции. Связь идентификатора и класса устанавливается в файле манифеста.

<extension point="org.eclipse.ui.perspectives">
<perspective
name="File Arranger Perspective"
class="com.berdaflex.filearranger.FileArrangerPerspective"
id="com.berdaflex.filearranger.perspective">
</perspective>
</extension>

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

Сергей Бердачук, berdachuk@berdaflex.com


Компьютерная газета. Статья была опубликована в номере 18 за 2006 год в рубрике программирование

©1997-2024 Компьютерная газета