T.M. SoftStudio

feci quod potui, faciant meliora potentes

Купить полную версию книги "Среда разработки Eclipse 4: Руководство разработчика"

Использование инструментов Eclipse Modeling Tools

Проект Eclipse Modeling представлен продуктом Eclipse Modeling Tools, который, однако, не содержит все компоненты проекта. Поэтому для наиболее полной инсталляции набора плагинов проекта Eclipse Modeling лучше воспользоваться командой Install New Software меню Help с выбором компонентов раздела Modeling репозитория Eclipse-релиза.

EMF

Проект EMF (Eclipse Modeling Framework Project) представляет собой платформу моделирования с возможностью генерации кода для создания инструментов и приложений на основе структурированной модели данных. Для метамоделей, которые описаны в формате XMI, EMF обеспечивает инструменты и среду выполнения для создания на основе метамодели Java-кода, представляющего модель данных, а также обеспечивает создание основы Eclipse-редактора модели данных и Eclipse-мастера создания модели данных.

Ориентированное на данные Java-приложение оперирует объектами данных, являющимися экземплярами Java-классов, которые представляют данные и тем самым являются моделью данных (domain model). Модельно-ориентированный подход Model Driven Engineering (MDE) требует, чтобы для такой модели данных изначально была создана метамодель, определяющая структуру модели данных. В MDE-разработке метамодель обеспечивает создание из нее различных представлений модели данных – исходного программного кода, диаграмм и XML-схемы.

Таким образом, в MDE-разработке центральную роль имеет метамодель. В проекте Eclipse Modeling такой метамоделью служит EMF-модель.

EMF-модель состоит из двух метамоделей Ecore и Genmodel. Ecore-модель представляет собой описание структуры модели данных в формате XMI (XML Metadata Interchange) и сам язык Ecore является упрощением языка UML. Genmodel-модель содержит информацию, на основе которой генерируется Java-код.

Ecore-модель может быть создана путем прямого создания XMI-документа метамодели, с помощью UML-моделирования, из аннотированных Java-интерфейсов и из XML-схемы.

Для создания Ecore-модели с помощью UML-моделирования откроем среду Eclipse c установленными плагинами Modeling-проекта и в меню File выберем команду New | Other | Eclipse Modeling Framework | Empty EMF Project, нажмем кнопку Next, введем имя проекта и нажмем кнопку Finish.

После генерации основы EMF-проекта в Eclipse-представлении нажмем правой кнопкой мышки на узле model проекта и выберем New | Other | Ecore Tools | Ecore Diagram, нажмем кнопку Next, в поле Domain file name введем имя Ecore-файла и нажмем кнопку Finish при выбранном переключателе Create a new model.

В результате будут сгенерированы два файла .ecorediag и .ecore.

Файл .ecore можно открыть в графическом редакторе Ecore Model Editor, контекстное меню которого позволяет добавлять и удалять элементы Ecore-модели, при этом файл имеет XMI-формат и его содержимое можно посмотреть, нажав на его узле правой кнопкой мышки и выбрав команду Open With | Text Editor.

Файл .ecorediag также можно открыть в графическом редакторе Ecore Diagram Editing, обеспечивающим визуальное UML-моделирование содержимого файла .ecore с помощью палитры компонентов:

  • EPackage – представляет Java-пакет классов и типов данных. По умолчанию корневой элемент файла .ecore – элемент <ecore:EPackage>, имя которого совпадает с именем файла .ecore.

  • EClass – представляет Java-класс.

  • EDataType – представляет тип данных и служит оберткой Java-типов данных.

  • EEnum – представляет перечисление.

  • EAnnotation – представляет аннотацию.

  • EOperation – представляет метод класса.

  • EAttribute – представляет свойство класса.

  • EEnumLiteral – представляет элемент перечисления EEnum.

  • Details Entry – представляет содержимое аннотации EAnnotation.

  • EReference – представляет ссылку.

  • Inheritance – представляет наследование классов.

  • EAnnotation link – представляет ссылку между аннотациями.

В простом случае модели данных, представленной Java-классом Person, имеющим два свойства name и address, Ecore-диаграмма будет иметь вид, как показано на рис. 17.1, а Ecore-модель – как показано на рис. 17.2. При этом файл Ecore-модели будет содержать следующий XMI-код:

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

<ecore:EPackage xmi:version="2.0"

xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xmlns:ecore="http://www.eclipse.org/emf/2002/Ecore" name="data"

nsURI="http:///data.ecore" nsPrefix="data">

<eClassifiers xsi:type="ecore:EClass" name="Person">

<eStructuralFeatures xsi:type="ecore:EAttribute" name="name" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>

<eStructuralFeatures xsi:type="ecore:EAttribute" name="address" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>

</eClassifiers>

</ecore:EPackage>

Рис. 17.1. Диаграмма Ecore-модели

Рис. 17.2. Графическое представление Ecore-модели

После создания Ecore-модели из Ecore-диаграммы можно сгенерировать Genmodel-модель из Ecore-модели.

Для этого в окне Package Explorer (Project Explorer) нажмем правой кнопкой мышки на узле проекта и в контекстном меню выберем команду New | Other | Eclipse Modeling Framework | EMF Generator Model, нажмем кнопку Next, введем имя файла с расширением .genmodel, нажмем кнопку Next, выберем Ecore model, нажмем кнопку Next, с помощью кнопки Browse Workspace определим Ecore-файл, нажмем кнопку Next и кнопку Finish. В результате сгенерированная Genmodel-модель отобразится в графическом редакторе (рис. 17.3).

Рис. 17.3. Графическое отображение Genmodel-модели

Eclipse-представление Properties дает возможность редактирования элементов Ecore-диаграммы, Ecore-модели и Genmodel-модели.

Контекстное меню графического редактора Genmodel-модели с помощью команды Generate Model Code позволяет сгенерировать Java-код модели данных, в случае Person-модели, состоящий из следующих классов и интерфейсов:

  • Интерфейс Person – расширяет интерфейс org.eclipse.emf.ecore.EObject, который является эквивалентом java.lang.Object и служит основой для каждого EMF-класса, и объявляет get/set методы доступа к свойствам name и address.

  • Интерфейс DataPackage – расширяет интерфейс org.eclipse.emf.ecore.EPackage и обеспечивает доступ ко всем мета объектам пакета модели данных.

  • Интерфейс DataFactory – расширяет интерфейс org.eclipse.emf.ecore.EFactory и обеспечивает создание экземпляров классов модели данных.

  • Подпакет impl – содержит классы реализации интерфейсов Person, DataPackage и DataFactory.

  • Подпакет util – содержит класс-фабрику, обеспечивающую создание Adapter-объекта для каждого класса модели данных. Adapter-объект получает уведомления об изменениях свойств класса.

Сгенерированный Java-код можно изменять в редакторе кода, однако предварительно удалив Javadoc-тэг @generated для того, чтобы сделанные изменения не потерялись при регенерации кода.

Команды Generate Edit Code и Generate Editor Code контекстного меню графического редактора Genmodel-модели позволяют сгенерировать Eclipse-плагины, обеспечивающие Eclipse-мастер создания данных модели и Eclipse-редактор данных модели.

После запуска Editor-плагина с помощью команды Run As | Eclipse Application, в разделе Example EMF Model Creation Wizards команды New | Other появится мастер создания данных модели. После создания, файл данных модели откроется в визуальном графическом редакторе среды Eclipse.

Команда Export Model контекстного меню графического редактора Genmodel-модели позволяет экспортировать Ecore-модель в UML-модель и XSD-схему.

Возможен также обратный процесс – создание Ecore-модели и Genmodel-модели из UML-модели и XSD-схемы.

Создать UML-модель и XSD-схему позволяют мастера UML Model и XSD Model раздела Example EMF Model Creation Wizards команды New | Other, а генерацию Ecore-модели и Genmodel-модели на их основе обеспечивает мастер EMF Generator Model раздела Eclipse Modeling Framework команды New | Other, в окне Select a Model Importer которого нужно выбрать UML model или XML Schema.

Для прямого создания Ecore-модели откроем среду Eclipse c инсталлированными плагинами Modeling-проекта и в меню File выберем команду New | Other | Eclipse Modeling Framework | Empty EMF Project, нажмем кнопку Next, введем имя проекта и нажмем кнопку Finish.

После генерации основы EMF-проекта в Eclipse-представлении нажмем правой кнопкой мышки на узле проекта и выберем New | Other | Eclipse Modeling Framework | Ecore Model, нажмем кнопку Next, введем имя файла с расширением .ecore и нажмем кнопку Next.

В списке Model Object мастера создания Ecore-модели будет предложено выбрать корневой элемент XMI-файла, по умолчанию – EPackage. После нажатия кнопки Finish мастера будет сгенерирована основа Ecore-файла, который можно открыть в текстовом редакторе, используя команду Open With | Text Editor контекстного меню, и дополнить необходимым кодом. Редактировать Ecore-модель можно также и в графическом редакторе, используя его команды контекстного меню. Создание Ecore-файла обеспечивает дальнейшую генерацию на его основе Ecore-диаграммы, Genmodel-файла, Java-кода и т.д.

Для создания Ecore-модели из аннотированных Java-интерфейсов нажмем правой кнопкой мышки на узле src EMF-проекта и в контекстном меню выберем команду New | Other | Java | Interface, нажмем кнопку Next, введем имя пакета и имя интерфейса и нажмем кнопку Finish. В редакторе кода дополним код интерфейса, сопровождая строки кода комментарием /**@model */ EMF-генератора кода:

/**@model */

package data;

/**@model */

public interface Person {

/**@model */

String getName();

/**@model */

String getAddress();

}

Выбор пункта Annotated Java в окне Select a Model Importer мастера EMF Generator Model раздела Eclipse Modeling Framework команды New | Other обеспечит генерацию Ecore-модели и Genmodel-модели из аннотированного Java-интерфейса.


GMF