Руководство Eclipse RAP для начинающих - приложение e4 Workbench

1- Введение

This document is based on:
  • Eclipse 4.5 (MARS)

  • Eclipse RAP e4

2- Требуется установка, чтобы начать

2.1- Установка Eclipse

You need the latest version of Eclipse. There currently is Eclipse 4.5 (Codes MARS).
 
In my opinion you to download package: "Eclipse IDE for Java EE Developers". The only different package quantities Plugin, for the purpose of different programming. During the programming process can install the plugin for other purposes.

2.2- Установка WindowBuilder

Установить Plugin WindowBuilder, это Plugin 1, который позволяет создавать интерфейс приложения SWT через перетаскивания удобным способом. Смотрите инструкции установки по ссылке:

2.3- Установка e4 Tools Developer Resources

Вы можете просмотреть руководство  установки  e4 Tools Developer Resources по ссылке:
  • TODO Link!

2.4- Установка RAP e4 Tooling в Eclipse

Вы можете посмотреть инструкцию по ссылке:

3- Создать новый Java Workspace

Для программирования приложения  RAP е4 вы должны создать новый  Java Workspace:
  • File/Switch Workspace/Other..
Введите:
  • F:\ECLIPSE_TUTORIAL\RAP_E4

4- Установка RAP Target

Для программирования приложения RAP e4 вам необходимо установить среду RAP (RAP Target Platform). Включая минимально две библиотеки:
  1. RAP Target Components
  2. RAP e4 Target Components
Создайте project RAPTarget и создайте файл   Targetdefine. Вы можете посмотреть инструкцию по ссылке:
Полученные результаты:

5- Создать пустой Eclipse RAP e4 Project

В этом документе я буду покажу вам как создавать приложение RAP e4 с самого начала (Не делая по готовому шаблону), так что я буду создавать пустое приложение RAP e4.
In Eclipse select:
  • File/New/Other...
Введите:
  • Project Name: RAPe4Tutorial
  1. Check selected on (1)
  2. On the (2) select "No" to create Eclipse RAP Project (Running on Web), otherwise it will create RCP Project (Running on the Desktop).

Выбрать " RAP e4 application"
Введите
  • Application window title: Hello RAP E4
  • Java package name: org.o7planning.tutorial.rape4
Проект создан:

Запустите приложение:

Щелкните правой кнопкой мыши в проект RAPe4Tutorial, выбрать:
  • Run As/Eclipse Application
Eclipse браузер может не отображать  приложение  RAP e4
Вам нужно скопировать ссылку для запуска на Firefox или Chrome

6- Конфигурация для запуска приложения

Вы можете конфигурировать порт (port) и браузер по умолчанию для запуска приложения  RAP е4:
Щелкните правой кнопкой мыши в проект RAPe4Tutorial выберите:
  • Run As/Run Configurations...
Использование порта 7777  и браузер по умолчанию операционной системы:
Нажимаете кнопку Apply и запустить приложение:
Результаты:

7- Структура пустого приложения Eclipse e4 RAP

Пустое приложение  Eclipse RAP e4 было создано через Eclipse, посмотрим на ее структуру. Открыть файл Application.e4xmi:
Измененить название приложения в " Eclipse E4 RAP Application", как в иллюстрации ниже.
И повторно запустить приложение:

8- Конфигурировать добавленные Bundle

Для того, чтобы создать приложение   RAP e4 с несколькими функциями, вам нужно декларировать использование некоторых других Bundle:
Открыть файл  MANIFEST.MF
Добавить Bundle
  • org.eclipse.e4.ui.model.workbench
  • org.eclipse.e4.ui.services
  • org.eclipse.e4.ui.workbench
Bundle могут быть взаимозависимы, например bundle А зависит от B, C. И B зависит от E, F. При добавлении bundle A в свое приложение, Eclipse нужно перерасчитать необходимые Bundle для упаковки в продукт для работы.

Таким образом, после того, как вы заявляете использование дополнительных Bundle, вам необходимо переконфигурировать приложение.
Right-click the Project and select:
  • Run As/Run Configurations
  • 1.Нажимаете кнопку Add Required Bundles чтобы eclipse перерасчитал зависимые bundle
  • 2. Нажимаете кнопку Validate Bundles чтобы гарантировать, что ваш проект не будет иметь проблем 

9- Handler и Command

RAP Framework построил много готовых Command, например 3 ​​команды с ID  ниже:
  1. org.eclipse.ui.file.exit
    • Close the workbench
  2. org.eclipse.ui.file.save
    • Save the active editor.
  3. org.eclipse.ui.help.aboutAction
    • Displays the About dialog.

You can see a list of built-in command of the RAP framework at:

Создайте новую  quiteCommand команду, вызванную для выхода из приложения, которая была построена в  RAP Framework.
Точно так же мы создаваем другие 2 Command:
Выполните команду save содержимое на Part (editor)
  • ID: org.eclipse.ui.file.save
  • Name: saveCommand
AboutCommand:
  • ID: org.eclipse.ui.help.aboutAction
  • Name: aboutCommand
Handler является классом обработки команд (command) из Menu или Toolbar. При нажатии на MenuItem или Toolltem означает выполнить команду, до того, как будет выполнена команда ,Handler  будет выполнена раньше, вы можете отменить (cancel) Command, которая выполняется в Handler.

Handler это классы, которые при выполнении будет выполнять задания записанные в method аннотированные в @Execute.

Я буду создавать 3 класса Handler:
AboutHandler.java
package org.o7planning.tutorial.rape4.handler;

import org.eclipse.e4.core.di.annotations.Execute;
import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.swt.widgets.Shell;

public class AboutHandler {
 
  @Execute
  public void execute(Shell shell) {
      MessageDialog.openInformation(shell, "About", "Eclipse e4 RAP Application");
  }
}
QuitHandler.java
package org.o7planning.tutorial.rcp.handler;

import org.eclipse.e4.core.di.annotations.Execute;
import org.eclipse.e4.ui.workbench.IWorkbench;
import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.swt.widgets.Shell;


public class QuitHandler {
 @Execute
 public void execute(IWorkbench workbench, Shell shell){
     if (MessageDialog.openConfirm(shell, "Confirmation",
             "Do you want to exit?")) {
         workbench.close();
     }
 }
}
SaveHandler.java
package org.o7planning.tutorial.rcp.handler;

import org.eclipse.e4.core.di.annotations.CanExecute;
import org.eclipse.e4.core.di.annotations.Execute;
import org.eclipse.e4.ui.workbench.modeling.EPartService;

public class SaveHandler {

 @CanExecute
 public boolean canExecute(EPartService partService) {
     if (partService != null) {
         return !partService.getDirtyParts().isEmpty();
     }
     return false;
 }

 @Execute
 public void execute(EPartService partService) {
     partService.saveAll(false);
 }
}

Объявить Handler с приложениями

Для объявления Handler с Application, вы должны объявить ID, Handler class и Command Handler.

Например, пользователь выйдет из приложение, нажав на menuItem Exit, этот menuItem связан с quiteCommand, QuiteHandler это класс обрабатывающий эту команду (как объявлено выше), класс QuiteHandler спросит пользователя, действительно ли пользователь хочет закрыть приложение, если да, то  quiteCommand команда будет выполнена.
Введите:
  • ID: handler.quiteCommand
Индентично,  объявите другие Handler
  • handler.aboutCommand
  • handler.saveCommand

10- Объявление Menus

Добавьте некоторые иконки в проект, используются как символ для MenuItem и ToolItem
  1. sample.png
  2. save_edit.png
Создать главное меню (Main menu) приложения
Введите ID главного меню, обязательно должно быть:
  • menu:org.eclipse.ui.main.menu
Добавить 3 подменю:
  • File, Function, Help
Объявление подменю для меню File
  • Save
  • Exit
Вы можете перезапустить ваше приложение:

11- Создать Toolbar

Создайте Main Toolbar с ID:
  • ID: toolbar:org.eclipse.ui.main.toolbar
Добавить 2 Toolitem: open и save
Перезапустите ваше приложение

12- Part

SamplePart.java
/*******************************************************************************
* Copyright (c) 2010 - 2013 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
*     IBM Corporation - initial API and implementation
*     Lars Vogel <lars.Vogel@gmail.com> - Bug 419770
*******************************************************************************/
package org.o7planning.tutorial.rape4.part;

import javax.annotation.PostConstruct;
import javax.inject.Inject;

import org.eclipse.e4.ui.di.Focus;
import org.eclipse.e4.ui.di.Persist;
import org.eclipse.e4.ui.model.application.ui.MDirtyable;
import org.eclipse.jface.viewers.TableViewer;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.ModifyEvent;
import org.eclipse.swt.events.ModifyListener;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Text;

public class SamplePart {

  private Text txtInput;
  private TableViewer tableViewer;

  @Inject
  private MDirtyable dirty;

  @PostConstruct
  public void createComposite(Composite parent) {
      parent.setLayout(new GridLayout(1, false));

      txtInput = new Text(parent, SWT.BORDER);
      txtInput.setMessage("Enter text to mark part as dirty");
      txtInput.addModifyListener(new ModifyListener() {
          @Override
          public void modifyText(ModifyEvent e) {
              dirty.setDirty(true);
          }
      });
      txtInput.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));

      tableViewer = new TableViewer(parent);

      tableViewer.add("Sample item 1");
      tableViewer.add("Sample item 2");
      tableViewer.add("Sample item 3");
      tableViewer.add("Sample item 4");
      tableViewer.add("Sample item 5");
      tableViewer.getTable().setLayoutData(new GridData(GridData.FILL_BOTH));
  }

  @Focus
  public void setFocus() {
      tableViewer.getTable().setFocus();
  }

  @Persist
  public void save() {
      dirty.setDirty(false);
  }
}
Добавить новый PerspectiveStack. Это стек (Stack) содержит перспективу (Perspective).
Добавить новую перспективу (Perspective)
Запустите приложение еще раз:
Из за изменений в Part, кнопка SAVE загорится.