Process-editor Developer guide ru

From RunaWFE
Jump to navigation Jump to search

RUNA WFE. Графический редактор бизнес-процессов. Руководство разработчика

Версия 2.3


© 2004-2009, ЗАО “Руна ”. RUNA WFE является системой с открытым кодом и распространяется в соответствии с LGPL лицензией (http://www.gnu.org/licenses/lgpl.html).


Введение

За основу графического редактора бизнес процессов RUNA WFE взят графический редактор бизнес процессов JBOSS JBPM, который был модифицирован соответственно требованиям компании RUNA. RUNA WFE технологически построен на основе GEF (Graphical Editing Framework) являющейся частью модульной платформы Eclipse. Платформа Eclipse реализует модель сервисов OSGi (OSGi Framework) на платформе Java.

OSGi Framework предоставляет унифицированную среду для работы приложений (называемых bundles), связывающую:

- среду выполнения приложения (Execution Environment);

- модули, дополняющие политики загрузки классов Java private классами для модуля и контролируемым связыванием модулей;

- управление жизненным циклом модулей приложения, позволяющее динамически устанавливать, запускать, останавливать, обновлять и удалять модули;

- сервисы регистрации, обеспечивающие динамическое совместное использование объектов приложениями.

Платформа Eclipse представляет собой набор подсистем, реализованных небольшим исполняемым приложением ядра и набором модулей (плагинов), расширяющих функциональность платформы. В контексте данного документа термины «модуль» и «плагин» равнозначны и взаимозаменяемы. Использование обоих терминов обусловлено главным образом стилистическими соображениями.

Ядро платформы Eclipse в процессе выполнения динамически обнаруживает, конфигурирует и запускает плагины платформы. Eclipse поддерживает динамическое подключение плагинов, описываемых дескрипторами плагинов (файлах MANIFEST.MF и plugin.xml). Для расширения функциональности, плагины платформы в дескрипторах плагинов определяют точки расширения (extension points). Точка расширения представляет собой xml описание интерфейса расширяемого компонента плагина. Расширяющие плагины используют точки расширения для добавления функциональности. Платформа Eclipse не разграничивает плагины, созданные пользователями и плагины самой платформы.

Платформа Eclipse реализована на Java, что обеспечивает переносимость разработанных приложений для работы на разных платформах под различными операционными системами.

GEF предоставляет основу для создания графических редакторов. GEF реализована как набор плагинов расширяющих плагины платформы Eclipse. GEF связывает элементы модели приложения с их графическими представлениями, реализованными с помощью графических компонент библиотеки Draw2d. Контроллеры GEF поддерживают визуальное представление элементов модели в MVC (model-view-controller) архитектуре. Для каждого элемента представления, соответствующий этому представлению контроллер интерпретирует события интерфейса пользователя и трансформирует их в команды обработки соответствующего элемента модели.

Обобщенная архитектура GEF показана на Рис. 1. Назначение компонентов GEF представлено в Табл. 1.

Табл. 1 Компоненты архитектуры GEF.


Компонент
Назначение компоненты
Модель (Model) Модель представляет собой сохраняемые данные. Модель должна предусматривать механизм уведомления о внесенных изменениях.
Представление (View) Представление это визуальное отображение модели. Оно состоит из фигур отображающих элементы модели. Модель может быть представлена как графически, так и виде иерархической (древовидной) структуры.
Контроллер (Controller) Контроллеры связывают элементы модели и соответствующие им элементы представления. В соответствии с представлением контроллеры могут быть графическими или иерархическими. Они ответственны за редактирование элементов модели через представление, а также отображение изменений элементов модели в представлении. Контроллеры используют политики редактирования – элементы, выполняющие большинство задач редактирования.
Действие (Action) Действия это элементы, обрабатывающие ввод данных. Действия конвертируют события интерфейса пользователя в запросы, которые используют программный интерфейс контроллеров.
Запрос (Request) Запросы это элементы инкапсулирующие события интерфейса пользователя. Запросы позволяют абстрагироваться от источника события.
Команда (Command) Команды инкапсулируют данные об изменениях модели. Команды возвращаются контроллерами в ответ на запросы. Команды также содержат информацию о возможности взаимодействия.
Событие (Event) События это изменения в интерфейсе пользователя, приводящие к изменениям представления или модели.
Process-editor Developer guide ru ris1.png
Рис. 1 Обобщенная архитектура GEF.

Модули графического редактора

Графический редактор построен на основе JBOSS JBPM, основной модуль которого jbpm.core загружает и выгружает определения бизнес процессов, создает экземпляры бизнес процессов и потоки их выполнения, а также останавливает выполнение этих потоков. Другие модули графического редактора, при реализации своей функциональности используют сервисы ядра модуля jbpm.core.

Перечень и назначение модулей графического редактора приведены в Табл. 2. Взаимосвязи модулей показаны на Рис. 2.


Табл. 2 Модули графического редактора.


Наименование модуля
Назначение модуля
org.jbpm.core Содержит библиотеки ядра системы JBOSS JBPM, а также интерфейсы для работы с ядром.
org.jbpm.db В текущей реализации модуль не используется.
org.jbpm.feature Модуль объединяет модули редактора в группу.
org.jbpm.help Модуль справочной подсистемы редактора. В текущей реализации не содержит справочных данных .
org.jbpm.ui Модуль содержит пакеты графического редактора JBOSS JBPM, включающие GEF, элементы модели, графические представления. Пакеты JBOSS JBPM используются в графическом редакторе бизнес процессов RUNA WFE.
ru.runa.jbpm.ui Модуль приложения графического редактора бизнес процессов RUNA WFE. Построен на основе модуля org.jbpm.ui.
tk.eclipse.plugin.htmleditor Модуль HTML редактора.
tk.eclipse.plugin.wysiwyg Модуль визуального (WYSIWYG) редактора. Расширяет функционал tk.eclipse.plugin.htmleditor.
Process-editor Developer guide ru ris2.png
Рис. 2 Зависимости модулей RUNA WFE.


Настройка eClipse для работы с графическим редактором

Для работы с редактором используется Eclipse 3.2.1. В Eclipse надо установить следующие плагины:


  • GEF (+ Draw2D)

Пакеты модуля org.jbpm.ui

Пакеты модуля org.jbpm.ui реализуют базовую функциональность редактора бизнес процессов на основе GEF. Пакеты соответствуют компонентам архитектуры GEF и содержат классы реализующие соответствующие компоненты архитектуры GEF. Кроме того модуль содержит пакеты, реализующие интерфейс пользователя. Перечень и назначение пакетов модуля приведены в Табл. 3.


Табл. 3 Пакеты модуля org.jbpm.ui.


Наименование пакета
Назначение пакета
org.jbpm.ui.action Пакет содержит классы реализующие действия (actions), выполняемые GEF при взаимодействии с пользовательским интерфейсом графического редактора.
org.jbpm.ui.command Пакет содержит классы, наследующие от org.eclipse.gef.commands.Command. Эти классы реализуют команды выполняемые контроллерами и изменяющие модель, в ответ на запросы пользовательского интерфейса редактора.
org.jbpm.ui.contributor Пакет содержит классы создающие объекты элементов модели, объекты фигур, а также соответствующие им графические и иерархические контроллеры.
org.jbpm.ui.dialog Пакет содержит класс обработчика дескриптора элементов, выбранных в диалоговом окне.
org.jbpm.ui.editor Пакет содержит классы редакторов визуальных компонентов GUI редактора бизнес процессов.
org.jbpm.ui.factory Пакет содержит классы-фабрики элементов и адаптеров.
org.jbpm.ui.figure Пакет содержит классы реализующие изображения фигур в окне графического редактора.
org.jbpm.ui.model Пакет содержит классы элементов модели бизнес процессов.
org.jbpm.ui.outline Пакет содержит классы реализующие иерархическое представление в окне графического редактора.
org.jbpm.ui.part.graph Пакет содержит классы реализующие графические контроллеры объектов модели.
org.jbpm.ui.part.tree Пакет содержит классы реализующие иерархические контроллеры объектов модели.
org.jbpm.ui.policy Пакет содержит классы реализующие политики (поведение) обработки данных контроллерами.
org.jbpm.ui.prefs Пакет содержит классы параметров элементов окна настроек («Параметры») модуля.
org.jbpm.ui.properties Пакет содержит классы редактора свойств ячейки
org.jbpm.ui.resource Пакет содержит класс сообщений, а также дескрипторы бизнес процесса и формы
org.jbpm.ui.util Пакет содержит вспомогательные классы редактора бизнес процессов.
org.jbpm.ui.view Пакет содержит классы отображения окна иерархического представления модели.
org.jbpm.ui.wizard Пакет содержит классы реализующие мастера (Wizard) создания объектов графического редактора.
Рис. 3 Взаимосвязи классов графического редактора WFE.


В подразделах ниже описаны основные пакеты модуля org.jbpm.ui.


Пакет org.jbpm.ui.figure

Пакет содержит классы визуального представления (фигуры) элементов модели бизнес процессов. Классы пакета наследуют от базового класса org.eclipse.draw2d.Figure библиотеки Draw2d. Диаграмма наследования классов показана на Рис. 4. Назначение классов приведено в Табл. 4.

Process-editor Developer guide ru ris3.jpg


Рис. 4 Диаграмма наследования классов представлений графических элементов модуля org.jbpm.ui.figure.


Табл. 4 Классы пакета org.jbpm.ui.figure.


Наименование класса
Назначение класса
DecisionFigure Класс реализует изображение узловой фигуры «Исключающий выбор».
DiamondAnchor Класс реализует точку привязки (anchor) связи внутри фигуры.
EndStateFigure Класс реализует изображение узловой фигуры «Конечное состояние».
ForkJoinFigure Класс реализует изображение узловых фигур «Расщепление» и «Синхронизация».
LabeledNodeFigure Абстрактный базовый класс. Определяет управление именем (label) узловой фигуры.
NodeFigure Базовый класс. Определяет базовое поведение узловой фигуры.
ReferencedBendpointConnectionRouter Класс реализует маршрутизацию линии для заданной связи (перехода состояния).
ReferencedConnectionAnchor Интерфейс переопределяет метод получения базисной (reference) точки.
StartStateFigure Класс реализует изображение узловой фигуры «Старт» (начальное состояние).
StateFigure Класс реализует изображение узловой фигуры «Состояние».
SwimlaneNodeFigure Интерфейс определяет статическую константу EMPTY_SWIMLANE и декларирует методы установки setSwimlaneName(String swimlaneName) и сброса unsetSwimlaneName.
TerminalFigure Абстрактный базовый класс для фигур начального и конечного состояний.
TransitionFigure Класс реализует изображение фигуры «Переход» (переход состояния).

Пакет org.jbpm.ui.editor

Наименование класса
Назначение класса
DesignerActionRegistry Контейнер для действий (actions), выполняемых в графическом редакторе. Добавляет действия в стек действий.
DesignerContentProvider Класс реализует методы для предоставления данных, описывающих элементы модели.
DesignerDropTargetListener Расширяет класс TemplateTransferDropTargetListener для конвертации в фабрику.
DesignerEditor Класс содержит методы реализующие функции графического редактора.
DesignerEditorActionBarContributor Класс для инсталляции/деинсталляции и управления элементами меню и соответствующими окнами графического редактора бизнес процессов.
DesignerGraphicalEditorPart Класс графического представления бизнес процессов в GUI WFE RUNA.
DesignerPaletteRoot Класс палитры графических элементов бизнес процессов в GUI WFE RUNA.
DesignerSwimlaneEditorPage Класс редактора роли бизнес процесса.
DesignerVariableEditorPage Класс редактора переменных состояния бизнес процесса.
ImageHelper Вспомогательный класс для формирования изображения графического представления бизнес процессов в GUI WFE RUNA.
PaletteFlyoutPreferences Класс для сохранения/загрузки настроек палитры графических элементов бизнес процессов в GUI WFE RUNA.

Пакет org.jbpm.ui.model

Пакет org.jbpm.ui.model содержит классы элементов модели графического редактора. Диаграмма наследования классов элементов модели показана на Рис. 5. Назначение классов приведено в Табл. 5.


Process-editor Developer guide ru ris4.png


Рис. 5 Диаграмма наследования классов графических элементов модуля org.jbpm.ui.model.
Табл. 5 Классы пакета org.jbpm.ui.model.


Наименование класса
Назначение класса
Action Класс элемента действие (action). Наследует от абстрактного класса GraphElement. Реализует методы, которые:

- получают и устанавливают имя класса делегата и конфигурацию элемента;

- получают и устанавливают атрибут event-type (тип события).

Active Интерфейс декларирует методы для:

- добавления, удаления и получения списка действий (action) элемента.

Bendpoint Класс элемента модели. Определяет точку излома элемента «Переход» (соединяющей узлы линии).

Определяет методы:

- получения координат точки излома;

- установки местоположения точки излома.

ConcurentNode Абстрактный класс элемента модели «Узел». Наследует от класса SlimNode. Является базовым классом для классов Join и Fork. Определяет класс для корреспондирующих узлов Join или Fork. Реализует метод propertyChange интерфейса PropertyChangeListener.
Decision Класс элемента модели «Исключающий выбор». Наследует от абстрактного класса DescribableNode. Реализует методы для:

- получения списка действий для узла;

- добавления, удаления действия (action) в иерархии действий;

- получения и установки свойств узла;

- проверки возможности добавления или присоединения перехода.

DefaultActionElement Класс реализует методы интерфейса Active, которые:

- добавляют, удаляют действия (action) и получают список действий элемента.

DefaultDelegationElement Класс реализует методы интерфейса Delegable, которые:

- получают и устанавливают имя класса делегата элемента;

- получают и устанавливают конфигурацию класса делегата элемента.

DefaultDescriptionElement Класс реализует методы интерфейс Describable, которые:

- получают и устанавливают свойство «описание» элемента (description).

Класс использует статические константы интерфейса NotificationMessages.

DefaultStateActionElement Наследует от класса DefaultActionElement. Переопределяет метод добавления действия (action).
Delegable Интерфейс декларирует методы для:

- получения и установки имени класса делегата элемента;

- получения и установки конфигурации класса делегата элемента.

Describable Интерфейс декларирует методы для:

- получения и установки свойства «описание» элемента (description).

DescribableNode Абстрактный класс элемента модели «Узел», имеющего свойство «Описание». наследует от абстрактного класса Node. Является базовым для классов Decision, SlimNode, SwimlanedNode. Определяет свойство «Описание» (description) для элемента модели. Реализует методы для получения и установки значения данного свойства.
ElementType Класс определяет методы, выполняющие конфигурирование типов элементов модели:

- инициализацию и отображение типов элементов из манифеста модуля;

- получение типов элементов из коллекций;

- создание интерфейсов ElementContributor для типов элементов.

EndState Класс узлового элемента модели «Конец». Наследует от класса Node. Класс определяет методы:

- получения префикса имени элемента «end»;

- установки размера области графического элемента;

- проверок возможностей добавления и присоединения входящих и исходящих переходов.

EventTypes Интерфейс определяет статические константы для типов событий.
Fork Класс узлового элемента модели «Расщепление». Класс определяет:

- префикс имени элемента «fork»;

- корреспондирующий класс узла Join («Синхронизация»);

- выполняет проверку возможности добавления и присоединения входящих и исходящих переходов.

FormNode Абстрактный класс элемента модели «Узел». Наследует от VariableNode. Является базовым классом для классов StartState, State.

Определяет форму для элементов «Состояние» и «Старт».

GraphElement Абстрактный класс. Реализует методы интерфейсов: EventTypes, IPropertySource, NotificationMessages, INodeAdapter. Класс определяет методы, выполняющие:

- инициализацию узлового элемента модели из XML файла;

- получения уровня иерархии и типа элемента;

- получения, добавления, удаления элементов в иерархии элементов;

- добавления и удаления слушателей (listener) событий изменения свойств.

InternalState Интерфейс для маркирования состояний процесса между начальным и конечным состояниями.
Join Класс элемента модели «Синхронизация». Класс определяет:

- префикс имени элемента «join»;

- корреспондирующий класс узла Fork («Расщепление»);

- выполняет проверку возможности добавления и присоединения входящих и исходящих перходов.

NamedGraphElement Абстрактный класс. Наследует от класса GraphElement. Является базовым для классов Node, ProcessDefinition, Swimlane, Transition. Реализует методы для получения и установки имени узла.
Node Абстрактный класс элемента модели «Узел». Наследует от класса NamedGraphElement. Является базовым для классов DescribableNode, EndState, TaskNode. Определяет элемент «Узел» модели. Реализует методы для:

- получения префикса имени;

- получения и задания области узла;

- получения и формирования имен исходящих переходов;

- проверки элемента как родителя данного элемента;

- получения списков входящих и исходящих переходов;

- добавления и удаления исходящих переходов;

В классе декларируются методы проверки возможности добавления и присоединения входящих и исходящих переходов.

NotificationMessages Интерфейс определяет статические константы для сообщений.
ProcessDefinition Класс процесса. Наследует от класса NamedGraphElement. Класс Реализует методы интерфейсов Active и Describable.

Методы интерфейса Active реализуются с использованием методов класса DefaultActionElemen, которые добавляют, удаляют действия, получают список действий.

Методы интерфейса Describable реализуются с использованием методов класса DefaultDescriptionElement, которые получают устанавливают свойство «Описание» для процесса.

Класс определяет методы, которые:

- получают и задают размеры элемента «процесс»;

- инициализируют узел и устанавливают его имя «process»;

- формируют имена узлов процесса, ролей, переменных состояний;

- добавляют, удаляют, получают списки узлов и ролей процесса;

- определяют свойство «Описание» процесса;

- определяет равенство объектов.

SlimNode Абстрактный класс элемента модели «Узел». Наследует от класса DescribableNode. Является базовым классом для ConcurentNode. Реализует методы:

- получения списка действий для узла,

- добавления, удаления действия (action) в иерархии действий;

- устанавления геометрических размеров области узла.

StartState Класс элемента модели «Старт». Наследует от абстрактного класса FormNode. Класс определяет методы:

- получения префикса имени элемента «start»;

- установки размера области графического элемента;

- получения входящих и исходящих переходов;

- получения, добавления, удаления задач (tasks);

- получения и удаления роли (swimlane);

- проверок возможностей добавления и подключения входящих и исходящих переходов.

State Класс узлового элемента модели «Состояние». Наследует от абстрактного класса FormNode. Класс определяет методы:

- добавления и удаления действий (action);

- получения списка действий;

- получения префикса имени элемента «state»;

- получения и удаления роли (swimlane);

- присваивания и получения присвоенной роли;

- проверок возможностей добавления и подключения входящих и исходящих переходов.

StateVariableProperties Класс графического элемента модели переменной состояния. Наследует от абстрактного класса GraphElement. Определяет методы для:

- установки и проверки свойств переменных элемента «Состояние» (State).

Swimlane Класс элемента модели «Роль». Класс определяет методы:

- получающие и задающие свойство конфигурация узла;

- получающие и задающие класс делегат.

- получающие и задающие свойство описание узла.

SwimlanedNode Абстрактный класс узлового элемента модели содержащего роль. Наследует от класса DescribableNode. Является базовым классом для класса VariableNode.

Определяет свойство «Роль» для узла.

Определяет методы для установки, получения, удаления свойства «Роль».

Переопределяет методы getPropertyValue и setPropertyValue для получения и установки PROPERTY_SWIMLANE.

Task Класс графического элемента модели «Задание» (task). Наследует от абстрактного класса GraphElement. Определяет методы для:

- получения и установки имени элемента;

- получения имени родительского элемента;

- получения и установки даты выполнения задания;

- получения, добавления, удаления узлов присвоения (assignment), контроллера (controller);

- получения и установки узлов присвоения и контроллера;

- получения и установки типа конфигурации узлам присвоения и контроллера;

- получения и добавления конфигурационной информации узлам присвоения и контроллера;

- добавления и получения переменных и списков переменных контроллера;

- проверки наличия и установки атрибута "blocking";

- проверки возможности присваивания заданного имени.

TaskNode Класс узлового элемента модели. Наследует от абстрактного класса Node.

Класс определяет методы:

- формирования имени элемента;

- получения, добавления, удаления элемента;

- получения списка элементов;

- получения дочернего объекта класса Task;

- получения дочернего объекта класса Transition (Переход);

- проверки возможности добавления и подключения входящих и исходящих переходов.

Transition Класс элемента модели «Переход». Наследует от абстрактного класса NamedGraphElement. Переопределяет его абстрактный метод canSetNameTo (String name), который проверяет наличие элемента «Переход» с именем name у родительского элемента данного элемента «Переход».

Переопределяет методы добавления, удаления, а также получения списка действий.

Определяет методы добавления, удаления, установки точек излома (bendpoint) фигуры «Переход», а также получения списков точек излома.

Определяет методы получения и установки злемента-источника и элемента-приемника для данного элемента «Переход».

Определяет метод получения имени данного элемента «Переход», имен элементов источника и приемника.

Определяет метод установки имени данного элемента «Переход».

Variable Класс элемента модели «Переменная состояния». Наследует от класса GraphElement.

Класс определяет методы:

- установки и получения значений переменных name, format, mappedName;

- определения равенства объектов класса.

VariableNode Абстрактный класс узлового элемента модели. Наследует от класса SwimlanedNode. Является базовым классом для класса FormNode. Определяет методы:

- добавления и удаления свойств переменных состояния элементов «Состояние», «Старт».

- получения и установки списков свойств переменных состояния.

Пакет контроллеров org.jbpm.ui.part

Контроллеры графического редактора разделены по пакетам графических контроллеров org.jbpm.ui.part.graph и контроллеров иерархического представления org.jbpm.ui.part.tree.


Пакет контроллеров графических элементов org.jbpm.ui.part.graph

Пакет контроллеров графических элементов содержит классы контроллеров представления графических элементов модели на диаграмме бизнес процессов графического редактора. Диаграмма наследования классов контроллеров графических элементов показана на Рис. 6. Назначение классов приведено в Табл. 6.

Process-editor Developer guide ru ris5.png
Рис. 6 Диаграмма наследования классов контроллеров графических элементов.


Табл. 6 Классы пакета org.jbpm.ui.part.graph.


Наименование класса
Назначение класса
ElementGraphicalEditPart Класс контроллера графического элемента. Наследует от org.eclipse.gef.editparts.AbstractGraphicalEditPart.

Переопределяет методы:

- получения элемента объекта модели;

- получения визуального представления элемента;

- активации и деактивации контроллера элемента.

FormNodeEditPart Класс контроллера узлового элемента содержащего форму. Наследует от класса VariableNodeEditPart.

Переопределяет метод получения объекта модели, для получения объекта содержащего форму.

LabeledNodeGraphicalEditPart Класс контроллера узлового элемента имеющего метку (обозначение).

Переопределяет метод выполнения запроса, а также определяет private методы для редактирования метки.

NodeGraphicalEditPart Класс контроллера узлового элемента. Наследует от класса ElementGraphicalEditPart. Переопределяет и реализует методы:

- получения узлового элемента объекта модели;

- получения и создания визуального представления узла;

- создания политик (линий поведения) контроллера;

- создания анкеров источника и приемника для входящих и исходящих переходов;

- получения списков входящих и исходящих переходов;

- обновления визуального представления узла;

- изменения свойств узла.

ProcessDefinitionGraphicalEditPart Класс контроллера процесса. Наследует от класса ElementGraphicalEditPart. Переопределяет и реализует методы:

- получения узлового элемента процесса модели;

- получения списка дочерних элементов;

- создания политик (линий поведения) контроллера процесса;

- изменения свойств узла.

SwimlaneNodeEditPart Абстрактный класс контроллера узлового элемента содержащего роль (Swimlane). Наследует от класса LabeledNodeGraphicalEditPart. Переопределяет методы базовых классов для:

- обновления визуального представления роли;

- получения узлового элемента объекта модели содержащего роль;

- получения объекта модели «роль» (Swimlane);

- активации и деактивации контроллера;

- изменения свойств роли.

TransitionGraphicalEditPart Класс контроллера элемента Transition («Переход») . Наследует от org.eclipse.gef.editparts.AbstractConnectionEditPart.

Переопределяет методы:

- получения объекта модели «Переход»;

- создания и обновления визуального представления перехода;

- получения списка точек излома перехода;

- создания политик (линий поведения) контроллера перехода;

- активации и деактивации контроллера перехода;

- изменения свойств перехода.

VariableNodeEditPart Абстракный класс контроллера для элемента «Узел» типа «Состояние» имеющего переменные состояния. Наследует от класса SwimlaneNodeEditPart.

Переопределяет метод получения объекта модели, для получения объекта имеющего переменные состояния.

Пакет контроллеров иерархического представления org.jbpm.ui.part.tree

Пакет контроллеров иерархического представления элементов содержит классы контроллеров иерархического представления элементов модели в окне графического редактора.

Диаграмма наследования классов контроллеров иерархического представления элементов показана на Рис. 7. Назначение классов приведено в Табл. 7.


Process-editor Developer guide ru ris6.png
Рис. 7 Диаграмма наследования классов контроллеров иерархического представления.


Табл. 7 Классы пакета org.jbpm.ui.part.tree.


Наименование класса
Назначение класса
ActionNodeTreeEditPart Класс контроллера действия (action) узлового элемента модели. Наследует от NodeTreeEditPart.

В конструкторе класса выполняется проверка того, что элемент может выполнять действия (реализует интерфейс Active).

ActionTreeEditPart Класс контроллера элемента действия (action). Наследует от ElementTreeEditPart. Определяет методы:

- получения элемента action модели из текущего контроллера;

- обновления визуального представления элемента action текущего контроллера при изменении его свойств;

- получения адаптера визуального представления элемента.

ElementTreeEditPart Абстрактный класс контроллера элемента. Наследует от AbstractTreeEditPart. Определяет методы:

- получения графического элемента объекта модели;

- активации и деактивации контроллера.

NodeTreeEditPart Класс контроллера узлового элемента модели. Определяет методы:

- получения узлового элемента модели;

- получения списка дочерних элементов элемента, в том числе действий (actions);

- обновления визуального представления элемента;

- обновления дочерних элементов при изменении свойств элемента;

- проверки того что элемент является узлом.

OutlineRootTreeEditPart Класс корневого контроллера. Наследует от AbstractTreeEditPart. Определяет методы для получения списка процессов модели.
ProcessDefinitionTreeEditPart Класс контроллера элемента процесса (process definition). Наследует от ElementTreeEditPart. Определяет методы:

- получения элемента process definition модели из текущего контроллера;

- получения списка дочерних элементов (узлов, ролей, действий);

- обновления элемента и его дочерних элементов при изменении его свойств.

StartStateTreeEditPart Класс контроллера элемента начального состояния «Старт». Наследует от NodeTreeEditPart. Определяет методы:

- получения списка дочерних элементов состояния «Старт»;

- обновления дочерних элементов при изменении свойств элемента;

- проверки, что элемент и его родительские элементы не имеют заданий (атрибут "hasTask" имеет значение "false").

SwimlaneTreeEditPart Класс контроллера элемента «Роль» (swimline). Наследует от ElementTreeEditPart. Определяет методы:

- получения элемента swimline модели из текущего контроллера;

- обновления визуального представления элемента swimline текущего контроллера;

- обновления элемента и его дочерних элементов при изменении его свойств;

- получения адаптера визуального представления элемента.

TaskNodeTreeEditPart Класс контроллера узла задание. Наследует от NodeTreeEditPart. Определяет методы:

- получения списка дочерних элементов типа задание (task) и исходящий переход (transition);

- обновления визуального представления узла задания контроллера;

- получения списка заданий из узлового элемента модели;

- получения списка заданий из текущего элемента контроллера для узла;

- приведения в соответствие списки заданий текущего элемента контроллера для узла и соответствующего ему элемента модели при добавлении или удалении элементов;

TaskTreeEditPart Класс контроллера элемента задания (task). Наследует от ElementTreeEditPart. Определяет методы:

- получения элемента task модели из текущего контроллера;

- обновления визуального представления элемента task текущего контроллера при изменении его свойств;

- получения адаптера визуального представления элемента.

TransitionTreeEditPart Класс контроллера элемента «Переход» (transition). Наследует от ElementTreeEditPart. Определяет методы:

- получения элемента transition модели из текущего контроллера;

- обновления визуального представления элемента transition текущего контроллера;

- получения списка заданий элемента transition текущего контроллера;

- обновления элемента и его дочерних элементов при изменении его свойств.

Пакет политик org.jbpm.ui.policy

Пакет политик содержит классы реализующие выполнение задач редактирования (запросов) контроллерами. Назначение классов приведено в Табл. 8.


Табл. 8 Классы пакета org.jbpm.ui.policy.


Наименование класса
Назначение класса
NodeComponentEditPolicy Класс реализует политику удаления узла по запросу. Содержит метод createDeleteCommand, который создает команду NodeDeleteCommand (удаления узла).
NodeDirectEditPolicy Класс реализует политику прямого редактирования узла по запросу. Содержит методы:

- получения команды NodeSetNameCommand для узла;

- отображения внесенных изменений.

NodeGraphicalNodeEditPolicy Класс реализует политику создания и подключения соединения (Connection). Содержит методы:

- получения команды для создания подключения соединения приемника;

- получения команды для создания подключения соединения источника;

- получения команды для переподключения соединения источника;

- получения команды для переподключения соединения приемника.

ProcessDefinitionXYLayoutEditPolicy Класс реализует политику размещения графического элемента на диаграмме. Содержит методы:

- создания команды добавления потомка;

- получения команды изменения области узла потомка;

- получения команды создания узла потомка;

- создания команды удаления потомка.

TransitionConnectionBendpointEditPolicy Класс реализует политику управления точками излома (Bendpoint) перехода. Содержит методы:

- получения команды создания точки излома перехода;

- получения команды удаления точки излома перехода;

- получения команды перемещения точки излома перехода.

TransitionConnectionEditPolicy Класс реализует политику редактирования перехода (transition). Содержит метод получения команды удаления присоединения перехода к элементу.
TransitionConnectionEndpointsEditPolicy Класс реализует политику управления концами перехода. Содержит методы:

- добавления дескрипторов концов перехода (точек присоединения);

- удаления дескрипторов концов перехода (точек присоединения).

Модификация функциональности редактора

Модификация представления графического элемента

Представления графических элементов содержатся в пакете org.jbpm.ui.figure. Диаграмма наследования, перечень и назначение классов представлений пакета org.jbpm.ui.figure приведены в разделе 4.1 настоящего документа.

Для задания параметров изображений фигур представлений графических элементов пакета org.jbpm.ui.figure, классы фигур переопределяют методы класса org.eclipse.draw2d.Figure. В общем случае, для изменения графического представления необходимо переопределить метод paintFigure в наследниках класса Figure библиотеки draw2d.

Для изображения фигур используются методы класса org.eclipse.draw2d.Graphics.

В таблице Табл. 9. представлены классы пакета org.jbpm.ui.figure и их методы, реализующие изображения фигур, используемых для моделирования процессов в RUNA WFE. Для модификации представления графических элементов необходимо внести изменения в представленные классы.


Табл. 9 Классы фигур и их методы формирования изображений.


Наименование класса
Методы формирования изображения
StateFigure

(Состояние)

void paintFigure(Graphics g) – метод получает объект класса Graphics библиотеки draw2d, рисующий фигуру. В методе формируется минимальный окружающий фигуру прямоугольник (область фигуры), задаются координаты его левого верхнего угла, ширина и высота.

Метод drawRoundRectangle класса Graphics рисует сформированный и переданный ему прямоугольник со скругленными углами.

DecisionFigure

(Исключающий выбор)

void paintFigure(Graphics g) – метод получает объект класса Graphics библиотеки draw2d, рисующий фигуру. В методе формируется минимальный окружающий фигуру прямоугольник (область фигуры), вычисляются координаты середин его сторон, которые передаются в виде массива методу drawPolygon класса Graphics.

Метод drawPolygon рисует ромб по заданным ему вершинам.

ForkJoinFigure

(Расщепление,

Синхронизация)

void paintFigure(Graphics g) – метод получает объект класса Graphics библиотеки draw2d, рисующий фигуру. В методе формируется минимальный окружающий фигуру прямоугольник (область фигуры), задаются координаты его левого верхнего угла.

Методы setBackgroundColor и fillRectangle класса Graphics задают черный цвет заполнения и заполняют этим цветом прямоугольник.

StartStateFigure

(Старт)

void addEllipse() – метод изображает окружность вызывая конструктор класса Ellipse библиотеки draw2d, заполняет её черным цветом и устанавливает её размеры и компоновку.
EndStateFigure

(Конец)

void addEllipse() – метод изображает окружность вызывая конструктор класса Ellipse библиотеки draw2d, устанавливает её прозрачность, размеры и компоновку.

Для изображения внутреннего черного круга метод вновь вызывает конструктор класса Ellipse, заполняет окружность черным цветом, устанавливает для неё меньшие размеры и добавляет в ранее изображенную оккружность.

Добавление нового графического элемента

Новые элементы графического редактора процессов RUNA WFE должны создаваться на основе GEF. Контроллеры GEF связывают элементы модели бизнес процесса и их графические представления.


Создание элемента модели

Классы элементов модели графического редактора содержатся в пакете org.jbpm.ui.model.

Создание нового элемента модели следует начать с выбора базового класса, зависящего от назначения создаваемого элемента. Диаграмма наследования классов элементов модели показана на Рис. 5, перечень и назначение классов пакета org.jbpm.ui.model приведены в разделе 4.3 настоящего документа. Конечные («листовые») классы в иерархии классов реализуют текущий набор элементов модели RUNA WFE.

Для создания нового элемента модели следует:

  1. Создать класс элемента модели, наследующий от класса с наиболее подходящими свойствами (см. Табл. 5);
  2. Переопределить неподходящие и нереализованные методы базовых классов;
  3. Определить методы, добавляющие новую функциональность создаваемому классу.

Создание графического представления элемента модели

Графические представления элементов модели соответствуют выбранной в RUNA WFE нотации представления элементов модели.

Классы графических представлений содержатся в пакете org.jbpm.ui.figure. Так как графическое представление модели должно отображать взаимосвязи зависимости элементов модели, классы графических представлений организованы в иерархию. Диаграмма наследования классов графических представлений элементов модели показана на Рис. 4, перечень и назначение классов пакета org.jbpm.ui.figure приведены в разделе 4.1 настоящего документа. Конечные («листовые») классы в иерархии классов реализуют текущий набор графических представлений элементов модели RUNA WFE. Так же, как и создание нового элемента модели, создание нового графического представления следует начать с выбора базового класса, зависящего от назначения создаваемого элемента.

Для создания нового графического представления (фигуры) следует:

  1. Создать класс элемента модели, наследующий от класса с наиболее подходящими свойствами (см. Табл. 4);
  2. Переопределить неподходящие и нереализованные методы базовых классов. Описание методов формирования изображений фигур для конечных классов графических представлений приведены в Табл. 9;
  3. При необходимости, определить методы, добавляющие новую функциональность создаваемому классу фигуры.

Добавление графического представления в палитру инструментов

Изображения графических элементов добавляются на диаграмму процесса графического редактора RUNA WFE с помощью палитры инструментов. Добавление инструмента в палитру инструментов выполняется путем добавления элемента в точке расширения org.jbpm.ui.elements с помощью редактора файла манифеста модуля plugin.xml.

Для добавления элемента в палитру:

  1. На вкладке «Расширения» редактора манифеста, в контекстном меню точки расширения org.jbpm.ui.elements (открывается кликом правой клавиши мыши на точке расширения), добавить элемент.
  2. В разделе «Сведения об элементе расширения» ввести имя элемента и выбрать ссылку «contributor». В открывшемся мастере атрибутов java выбрать:

- пакет - org.jbpm.ui.contributor;

- имя класса – конртрибутора;

- в текстовом окне «Интерфейсы» добавить реализуемый классом интерфейс ElementContributor. В результате будет сгенерирован класс реализации указанного интерфейса.

  1. Реализовать методы класса – контрибутора для создания экземпляров:

- элемента модели;

- графического контроллера элемента модели;

- контроллера иерархического представления элемента модели;

- фигуры (графического представления) элемента модели;

Для создания экземпляров, часто целесообразно воспользоваться конструкторами соответствующих базовых классов.

MqynvF <a href="http://zpravgecoabb.com/">zpravgecoabb</a>, [url=http://wwmkwbhtlryr.com/]wwmkwbhtlryr[/url], [link=http://uudrxivrljcs.com/]uudrxivrljcs[/link], http://alldjjrqfikr.com/

6 Взаимодействие с MS INFOPATH (Только для ос windows)

    1. === 6.1 Архитектура ===


В качестве визуального редактора форм взят Microsoft InfoPath 2007, входящий в дистрибутив Microsoft Office 2007. Он позволяет создавать шаблоны форм используя стандартную и настраиваемую палитры элементов формы. Для использования на формах элементов, специфичных для системы RUNAWFE, мы будем использовать элементы которые добавим в палитру InfoPath.

Внимание: для корректной работы требуется библиотека RunaGPDInfoPathSupport.dll, которая должна лежать в C:\WINDOWS\SYSTEM32. Она обеспечивает работу с архивными файлами форм (XSN), которые находятся в формате CAB.


Таблица поддерживаемых RUNAWFE стандартных элементов InfoPath.


InfoPath element Описание
Text Box Ввод текста в одной строке
Drop-Down List Box Выпадающий список
Check Box Флажок
Rich Text Box Поле для ввода текста, многострочный текст
Date Picker Выбор даты с помощью календаря
File Attachment Загрузка файла и скачивание файла
Картинка


Рисунок на форме
ГиперСсылка Открывается в новом окне

Помимо этих стандартных элементов InfoPath позволяет добавить дополнительные элементы, построенные на основе TemplatePart's (шаблонов) или ActiveX (COM компонентов).


    1. === 6.2 Процесс создания ActiveX элементов InfoPath ===


Используемая среда разработки Microsoft Visual Studio 2007.

Добавляемые элементы InfoPath являются ActiveX объектами, реализующими интерфейсы UserControl, IObjectSafety, ICOMControl. В рамках COM модели они должны иметь уникальный GUID. Утилита для создания GUID называется GUIDGEN.EXE и поставляется вместе с MS Visual Studio. Мы будем использовать .Net Framework для простоты, хотя можно обойтись и без него.


Создаем новый проект в MS Visual Studio (Visual C# projects) типа Windows Class Library.

В свойствах созданного проекта на вкладке Configuration Properties -> Build выбираем: Register for COM Interop = true.

Генерируем новый GUID.

Делаем копию template класса, реализующего элемент InfoPath и меняем GUID

(Опционально) Изменяем метод OnPaint. Этот метод вызывается всякий раз при отображении элемента на форме InfoPath, соответственно если хочется придать ему красивый вид – то рисовать нужно здесь.

Обращаем внимание на метод OnSizeChanged в классе. Он вызывается всякий раз когда пользователь InfoPath на форме пытается изменить размеры этого элемента. Соответственно здесь можно явно контролировать размеры элемента на форме.

После всего нажимаем Project Build, ждем компилирования и создания новой DLL, которая готова к установке на локальный компьютер.

Для установки на других компьютерах требуются дополнительные действия. Подписывание DLL (Strong Name) – нужно сгенерировать утилитой sn.exe (VS utility) файл ключа (sn.exe –k keyfile.snk), добавить его в проект и в файле AssemblyInfo.cs записать значения [assembly: AssemblyKeyFile("..\\..\\keyfile.snk")], [assembly: AssemblyKeyName("ActorFullNameDisplay")] вместо дефолтных значений.

Далее элемент необходимо добавить в GAC утилитой gacutil.exe (VS utility) и зарегистрировать как COM объект утилитой regasm.exe (.Net utility).

Бизнес-логика компонента может обращаться к RUNAWFE и не ограничена по функциональности.

Из интерфейса MS InfoPath 2007 на закладке Controls (Элементы управления) мы можем по нажатию ссылки Add or Remove custom controls зарегистрировать ActiveX компоненты в качестве элементов, но не для ActiveX, находящихся в .Net категории. Для этой категории мы вынуждены вручную писать описания компонент и ложить их в определенное место.

Путь к файлам описания настраиваемых элементов InfoPath:


${USER_HOME}\Local Settings\Application Data\Microsoft\InfoPath\Controls


Пример:

C:\Documents and Settings\dofs\Local Settings\Application Data\Microsoft\InfoPath\Controls


Описатели элементов должны иметь расширение .ict, для того чтобы InfoPath их правильно прочитал при загрузке.


Файлы в этой директории удобно именовать

{GUID}.ict (пример: {C4134657-1B43-4968-9913-FAE952F685A0}.ict), где GUID – GUID элемента InfoPath.


Файл должен быть в кодировке UTF-8.

Формат файла:


<?xml version="1.0" encoding="UTF-8" standalone="no"?>

<ict:control name="CONTROL_NAME">

<ict:designTimeProperties>

<ict:iconBitmap>CONTROL_ICON</ict:iconBitmap>

</ict:designTimeProperties>

<ict:deployment>

<ict:controlPackage classid="{ACTIVEX_GUID}"/>

</ict:deployment>

</ict:control>

, где

CONTROL_NAME = название элемента в палитре

CONTROL_ICON = иконка в палитре, в файле представлена в формате Base64

ACTIVEX_GUID = GUID ActiveX.


Если файл некорректно создан, InfoPath выведет сообщение с детализаций ошибки при следующем запуске. Если он не выводит сообщения и не добавляет элемент в палитру – проверьте правильность папки, в которую вы положили ict файл.

В качестве примера смотрите существующие компоненты.


    1. === 6.3 Процесс создания Template Parts элементов InfoPath ===


Эти компоненты ограничены в функциональности DataSource, который будет отработан при инициализации формы в режиме исполнения. Этот тип элемента удобен для вывода разнообразных списков (используется для вывода акторов).

Публикация состоит в регистрации XTP файлов шаблонов в InfoPath из меню Добавить/Удалить элементы.

  1. В качестве примера смотрите существующие шаблоны.

7 изменения в 3.х версии.

Краткое описание изменений ГПД в ветке 3.х. Цель изменений была в выделении модели (ранее все редактировалось напрямую в XML), поддерживающей версионность jPDL и реализация jPDL 3.2.Краткое резюмеСохранение в XML и чтение модели из XML происходит в одном классе-сериализаторе (для каждой версии jPDL); раньше элементы модели сами себя записывали в XML.Обновление версии jPDL для процесса может быть осуществлено итерациями - от предыдущей версии к текущей.Версия используемого jPDL процесса определяется по содержимому processdefinition.xml.Попутно добавлена валидация процесса на уровне модели, раньше была валидация только на основе DTD.Включено кеширование проектов - при загрузке ГПД он загружает все проекты из workspace; сделано из-за частого использования этой операции (список подпроцессов, список процессов в дереве навигатора)Из минусов - отпала возможность редактировать XML вручную (редактировать-то можно, но после переоткрытия этого не останется)., раньше было. Структура кодаОтправной точкой служит extension point org.jbpm.ui.elements (описанный в elements.exsd). Каждое из расширений org.jbpm.ui.elements (сейчас 2.0 и 3.2) содержит список элементов модели + провайдер содержимого этой версии jPDL, который состоит из сериализатора и класса-конвертера из предыдущей версии jPDL.Описание элемента:name - название элемента, идентично xml node name для этого элемента (в 2.0 и 3.2)model - класс модели элемента, наследует GraphElementgraphicalEditPart - класс EditPart на полотне; чтобы добавить действие на данный элемент нужно создать новый EditPart и назначить его в objectContributiontreeEditPart - класс EditPart в дереве (Outline view); чтобы добавить действие на данный элемент нужно создать новый EditPart и назначить его в objectContributionfigure - класс фигуры, отрисовкаСозданы пакеты org.jbpm.ui.common.*, org.jbpm.ui.jpdl2.*, org.jbpm.ui.jpdl3.*.В пакетах org.jbpm.ui.common.* содержится все общие классы, касающиеся jPDL;В других соответственно версии jPDL.При добавлении поддержки новой версии jPDL нужно создать новый корневой пакет.Структура внутри пакетов org.jbpm.ui.common.*, org.jbpm.ui.jpdl2.*, org.jbpm.ui.jpdl3.* одинакова и состоит из:action - Обработчики действий пользователяcommand - Команды (GEF) исполнения (используются в обработчиках)figure - Классы реализации фигур (отрисовка на полотне GEF)model - Классы логической моделиpart - GEF EditParts (связывают фигуры и модели)policy - GEF Policies относительно EditPartsМеханизмы расширения (или изменения) модели в разных версиях jPDL1) Создание контекстных элементов меню - фильтр по EditParts2) Создание новых свойств (в properties view) Что должно функционировать по jPDL 3.2Перенесена базовая функциональность версии 2.0 ( у элементов action, decision, swimlane изменены интерфейсы - обработчики;у элемента task-state добавлена возможность вывести сколь угодно много transition из state (иногда лишает потребности использовать дополнительный decision)в качестве примера добавлена mail-nodeизменены контекстные меню для добавления действия (только на transition))Пожелания к Runa WFE 3.хЖелательно при разработки Runa WFE учесть, что в дизайнер помещаются все классы обработчиков (имплементирующих AssignmentHandler, ActionHandler, DecisionHandler).Надо бы по в отличие от 2.х версии поместить их в другой пакет - иначе будут неправильно грузиться классы (коллизия имен), т.к. в дизайнере останутся классы 2-й версии.


8 Сборка RCP приложения редактора

Графический редактор бизнес процессов предназначен для работы как отдельное RCP (Rich Client Platform) приложение (продукт). Сборка RCP приложения графического редактора бизнес процессов должна выполняться после внесения изменений в модули редактора.

Экспорт RCP приложения выполняется на основе файла продукта, имеющего расширение .product. Файл продукта может быть автоматически создан средой Eclipse при создании проекта модуля на основе шаблона RCP приложения. Кроме того, файл продукта может быть создан при создании конфигурации продукта. Просмотр и редактирование файла продукта выполняется в редакторе файла продукта среды разработки Eclipse. Редактор файла продукта содержит вкладки: «Обзор», «Конфигурация», «Бренд».

На вкладке «Обзор» редактора файла продукта задаются:

- идентификатор продукта;

- приложение которое следует запускать при запуске продукта;

- имя отображаемое в заголовке приложения.

В разделе «Тестирование», ссылка «Синхронизировать» используется для обновления дескриптора plugin.xml главного модуля продукта в соответствии с внесенными изменениями в модули продукта в среде разработки. Ссылки «Запуск продукта» и «Запуск в режиме отладки» позволяют протестировать работу RCP приложения без его экспорта.

В разделе «Экспорт», ссылка «Мастер экспорта продукта Eclipse» служит для задания параметров экспорта и экспорта RCP приложения на основе заданной конфигурации экспорта на вкладке «Конфигурация».

На вкладке «Конфигурация» в разделе «Модули и фрагменты» задаются модули входящие в состав RCP приложения. При этом, после задания главного модуля приложения, набор необходимых модулей может быть определен автоматически. Особенности запуска RCP приложения задаются в разделах «Файл конфигурации» и «Аргументы запуска».

Для сборки RCP приложения графического редактора бизнес процессов необходимо выполнить следующие действия:

  1. Открыть файл продукта org.jbpm.ui.gpd.product. На вкладке «Обзор» в разделе «Определение продукта» должно быть установлено:

- ИД продукта: org.jbpm.ui.RUNA;

- Приожение: ru.runa.jbpm.ui.bp editor;

- Product Name: Runa WFE GPD;

- Конфигурация продукта основана на plug-in.

  1. В разделе «Тестирование» выбрать ссылку «Синхронизировать» для синхронизации внесенных изменений с главным модулем продукта.
  2. Для добавления вновь созданных модулей (если таковые есть) в набор, на вкладке «Конфигурация» выбрать ссылку «Добавить» и в открывшемся списке выбрать необходимые модули.

Среда Eclipse предоставляет возможность заново сформировать список необходимых модулей RCP приложения. Для этого следует:

- удалить все модули выбрав ссылку «Удалить все»;

- добавить в пустой список главный модуль RCP приложения;

- выбрать ссылку «Добавить обязательные модули».

  1. На вкладке «Обзор» в разделе «Экспорт» выбрать ссылку «Мастер экспорта продукта Eclipse».
  2. В окне Мастера экспорта:

- указать полный путь целевого каталога экспорта;

- в опциях компилятора указать совместимость с целевой Java машиной;

- нажать кнопку готово.

RCP приложение будет экспортировано по заданному пути.

Для экспорта RCP приложения на целевые платформы Linux, Macosx, Solaris, в среде разработки Eclipse, должен быть установлен пакет плагинов Eclipse-RCP-delta-pack. Плагин Eclipse-RCP-delta-pack можно установить воспользовавшись ссылками главного меню Help/Software Updates/Manage Configuration для автоматического обновления установленной платформы Eclipse и выбрав плагин в перечне плагинов.

После установки Eclipse-RCP-delta-pack в редакторе файла продукта добавляется вкладка для запуска RCP приложения на выбранной платформе.


9 Литература.

1. Практически исчерпывающую информацию по технологиям упоминавшимся в документе можно получить на сайте http://www.eclipse.org/. Кроме того, среда разработки Eclipse имеет развитую справочную систему, которая включает справочную информацию, ссылки на информационные ресурсы по используемым технологиям, примеры. Плагины обновлений, добавляемые с http://www.eclipse.org/, как правило включают справочную информацию, автоматически подключающуюся к справочной системе среды Eclipse.

3. Для разработчика плагинов можно рекомендовать книгу Building Commercial Quality Eclipse Plug-ins By Eric Clayberg, Dan Rubel. Publisher: Addison WesleyProfessional.ISBN: 032142672X; Published: Mar 22, 2006; Copyright 2006; Dimensions 7x9-1/4; Pages: 864; Edition: 2nd..

2. Информацию об OSGi Framework можно получить на сайте OSGi альянса:

http://www.osgi.org/osgi_technology/index.asp?section=2 .

3. Документация по GEF располагается на сайте: http://www.eclipse.org/gef/reference/articles.html. Полезная для разработчиков информация содержится в документах http://wiki.eclipse.org/index.php/GEF_Developer_FAQ и http://wiki.eclipse.org/index.php/GEF_Troubleshooting_Guide#Draw2D_common_mistakes. Применение компонентов GEF на примере создания редактора схемы базы данных подробно рассматривается в статье http://www.eclipse.org/articles/Article-GEF-editor/gef-schema-editor.html.

  1. GEF-tutorials:

http://www-128.ibm.com/developerworks/opensource/library/os-gef/

http://eclipsewiki.editme.com/GefDescription