Process-editor Developer guide ru
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.
Модель (Model) | Модель представляет собой сохраняемые данные. Модель должна предусматривать механизм уведомления о внесенных изменениях. |
Представление (View) | Представление это визуальное отображение модели. Оно состоит из фигур отображающих элементы модели. Модель может быть представлена как графически, так и виде иерархической (древовидной) структуры. |
Контроллер (Controller) | Контроллеры связывают элементы модели и соответствующие им элементы представления. В соответствии с представлением контроллеры могут быть графическими или иерархическими. Они ответственны за редактирование элементов модели через представление, а также отображение изменений элементов модели в представлении. Контроллеры используют политики редактирования – элементы, выполняющие большинство задач редактирования. |
Действие (Action) | Действия это элементы, обрабатывающие ввод данных. Действия конвертируют события интерфейса пользователя в запросы, которые используют программный интерфейс контроллеров. |
Запрос (Request) | Запросы это элементы инкапсулирующие события интерфейса пользователя. Запросы позволяют абстрагироваться от источника события. |
Команда (Command) | Команды инкапсулируют данные об изменениях модели. Команды возвращаются контроллерами в ответ на запросы. Команды также содержат информацию о возможности взаимодействия. |
Событие (Event) | События это изменения в интерфейсе пользователя, приводящие к изменениям представления или модели. |
Модули графического редактора
Графический редактор построен на основе JBOSS JBPM, основной модуль которого jbpm.core загружает и выгружает определения бизнес процессов, создает экземпляры бизнес процессов и потоки их выполнения, а также останавливает выполнение этих потоков. Другие модули графического редактора, при реализации своей функциональности используют сервисы ядра модуля jbpm.core.
Перечень и назначение модулей графического редактора приведены в Табл. 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. |
Настройка eClipse для работы с графическим редактором
Для работы с редактором используется Eclipse 3.2.1. В Eclipse надо установить следующие плагины:
- GEF (+ Draw2D)
Пакеты модуля org.jbpm.ui
Пакеты модуля org.jbpm.ui реализуют базовую функциональность редактора бизнес процессов на основе GEF. Пакеты соответствуют компонентам архитектуры GEF и содержат классы реализующие соответствующие компоненты архитектуры GEF. Кроме того модуль содержит пакеты, реализующие интерфейс пользователя. Перечень и назначение пакетов модуля приведены в Табл. 3.
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) создания объектов графического редактора. |
В подразделах ниже описаны основные пакеты модуля org.jbpm.ui.
Пакет org.jbpm.ui.figure
Пакет содержит классы визуального представления (фигуры) элементов модели бизнес процессов. Классы пакета наследуют от базового класса org.eclipse.draw2d.Figure библиотеки Draw2d. Диаграмма наследования классов показана на Рис. 4. Назначение классов приведено в Табл. 4.
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.
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.
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.
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.
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. Для модификации представления графических элементов необходимо внести изменения в представленные классы.
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.
Для создания нового элемента модели следует:
- Создать класс элемента модели, наследующий от класса с наиболее подходящими свойствами (см. Табл. 5);
- Переопределить неподходящие и нереализованные методы базовых классов;
- Определить методы, добавляющие новую функциональность создаваемому классу.
Создание графического представления элемента модели
Графические представления элементов модели соответствуют выбранной в RUNA WFE нотации представления элементов модели.
Классы графических представлений содержатся в пакете org.jbpm.ui.figure. Так как графическое представление модели должно отображать взаимосвязи зависимости элементов модели, классы графических представлений организованы в иерархию. Диаграмма наследования классов графических представлений элементов модели показана на Рис. 4, перечень и назначение классов пакета org.jbpm.ui.figure приведены в разделе 4.1 настоящего документа. Конечные («листовые») классы в иерархии классов реализуют текущий набор графических представлений элементов модели RUNA WFE. Так же, как и создание нового элемента модели, создание нового графического представления следует начать с выбора базового класса, зависящего от назначения создаваемого элемента.
Для создания нового графического представления (фигуры) следует:
- Создать класс элемента модели, наследующий от класса с наиболее подходящими свойствами (см. Табл. 4);
- Переопределить неподходящие и нереализованные методы базовых классов. Описание методов формирования изображений фигур для конечных классов графических представлений приведены в Табл. 9;
- При необходимости, определить методы, добавляющие новую функциональность создаваемому классу фигуры.
Добавление графического представления в палитру инструментов
Изображения графических элементов добавляются на диаграмму процесса графического редактора RUNA WFE с помощью палитры инструментов. Добавление инструмента в палитру инструментов выполняется путем добавления элемента в точке расширения org.jbpm.ui.elements с помощью редактора файла манифеста модуля plugin.xml.
Для добавления элемента в палитру:
- На вкладке «Расширения» редактора манифеста, в контекстном меню точки расширения org.jbpm.ui.elements (открывается кликом правой клавиши мыши на точке расширения), добавить элемент.
- В разделе «Сведения об элементе расширения» ввести имя элемента и выбрать ссылку «contributor». В открывшемся мастере атрибутов java выбрать:
- пакет - org.jbpm.ui.contributor;
- имя класса – конртрибутора;
- в текстовом окне «Интерфейсы» добавить реализуемый классом интерфейс ElementContributor. В результате будет сгенерирован класс реализации указанного интерфейса.
- Реализовать методы класса – контрибутора для создания экземпляров:
- элемента модели;
- графического контроллера элемента модели;
- контроллера иерархического представления элемента модели;
- фигуры (графического представления) элемента модели;
Для создания экземпляров, часто целесообразно воспользоваться конструкторами соответствующих базовых классов.
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)
- === 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 компонентов).
-
- === 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 файл.
В качестве примера смотрите существующие компоненты.
-
- === 6.3 Процесс создания Template Parts элементов InfoPath ===
Эти компоненты ограничены в функциональности DataSource, который будет отработан при инициализации формы в режиме исполнения. Этот тип элемента удобен для вывода разнообразных списков (используется для вывода акторов).
Публикация состоит в регистрации XTP файлов шаблонов в InfoPath из меню Добавить/Удалить элементы.
- В качестве примера смотрите существующие шаблоны.
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 приложения графического редактора бизнес процессов необходимо выполнить следующие действия:
- Открыть файл продукта org.jbpm.ui.gpd.product. На вкладке «Обзор» в разделе «Определение продукта» должно быть установлено:
- ИД продукта: org.jbpm.ui.RUNA;
- Приожение: ru.runa.jbpm.ui.bp editor;
- Product Name: Runa WFE GPD;
- Конфигурация продукта основана на plug-in.
- В разделе «Тестирование» выбрать ссылку «Синхронизировать» для синхронизации внесенных изменений с главным модулем продукта.
- Для добавления вновь созданных модулей (если таковые есть) в набор, на вкладке «Конфигурация» выбрать ссылку «Добавить» и в открывшемся списке выбрать необходимые модули.
Среда Eclipse предоставляет возможность заново сформировать список необходимых модулей RCP приложения. Для этого следует:
- удалить все модули выбрав ссылку «Удалить все»;
- добавить в пустой список главный модуль RCP приложения;
- выбрать ссылку «Добавить обязательные модули».
- На вкладке «Обзор» в разделе «Экспорт» выбрать ссылку «Мастер экспорта продукта Eclipse».
- В окне Мастера экспорта:
- указать полный путь целевого каталога экспорта;
- в опциях компилятора указать совместимость с целевой 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.
- GEF-tutorials:
http://www-128.ibm.com/developerworks/opensource/library/os-gef/