Для разработчиков BE4 — различия между версиями

Материал из DevelopmenOnTheEdge
Перейти к: навигация, поиск
(UI)
(Метка: visualeditor)
(Метка: visualeditor)
Строка 52: Строка 52:
 
* com.beanexplorer.enterprise.eclipse.views соответственно.
 
* com.beanexplorer.enterprise.eclipse.views соответственно.
 
Аналогично командам, создаются через редактор, кликаем на com.beanexplorer.enterprise.eclipse.editors, New -> editor, заполняем необходимые поля. Аналогично со view. Замечу, что клик на метку "class" позволяет создать нужный класс (в случае со view это org.eclipse.ui.part.ViewPart, например).
 
Аналогично командам, создаются через редактор, кликаем на com.beanexplorer.enterprise.eclipse.editors, New -> editor, заполняем необходимые поля. Аналогично со view. Замечу, что клик на метку "class" позволяет создать нужный класс (в случае со view это org.eclipse.ui.part.ViewPart, например).
 +
 +
=== Готовые диалоговые окна ===
 +
com.beanexplorer.enterprise.eclipse.dialogs.Dialogs - простые реализации диалоговых окошек, которых не хватает в org.eclipse.jface.dialogs.MessageDialog.
 +
 +
==== MVVM и упрощение написания UI ====
 +
Многие команды представляют собой одностраничные wizard'ы. Вместо того, чтобы писать с нуля, берём класс com.beanexplorer.enterprise.eclipse.handlers.templates.WizardCommandTemplateWizard, копируем в handlers, переименовываем (Alt+Shift+R) и заполняем всё что нужно.
 +
 +
Хорошей практикой являет написание UI с использованием шаблона проектирования MVVM. Пример - CreateDaemonWizard.CreateDaemonWizardPage из CreateDaemon. Это хороший пример с использованием MVVM и моментальной валидацией ввода пользовательских данных, который полагается на класс Ui из com.beanexplorer.enterprise.eclipse.jface. Другие примеры можно найти поискав использования Ui.SimpleBinding<T>.addToWizardPage (Ctrl+Shift+G).
 +
 +
Класс com.beanexplorer.enterprise.eclipse.jface.Ui вообще содержит гибкую основу для реализации MVVM UI (примеры можно найти поискав использования класса Ui или его методов).
 +
 +
Класс com.beanexplorer.enterprise.eclipse.jface.JFace предоставляет методы для частовстречающихся сценариев (как правило создания виджетов внутри Composite с GridLayout из двух столбцов).
 +
 +
==== Статьи по SWT ====
 +
[http://www.vogella.com/tutorials/SWT/article.html Вот здесь] вводная статья по SWT - объясняются основные концепции, какие виджеты бывают и как используются layout.
 +
 +
А [http://www.vogella.com/tutorials/EclipseJFaceTable/article.html здесь] статья про JFace - библиотеку, упрощающую работу с таблицами и деревьями.

Версия 15:57, 5 декабря 2014

Здесь будет информация по архитектуре BE4.

На высоком уровне BE4 состоит из нескольких частей:

  • com.beanexplorer.enterprise.metadata* - ядро;
  • com.beanexplorer.enterprise.metadata.ant - реализация Ant задач, объявленных в be4/src/be4lib.xml, эти классы не должны использоваться во время исполнения BEclipse;
  • com.beanexplorer.enterprise.be4core - класс Be4QueryExecutor, необходимый для запуска Query относительно простым образом без необходимости хранить Query в таблице (в BE3 запуск Query происходит по имени или идентификатору Query в таблице queries, а мы в BE4 работаем только с модельными объектами представленными в виде Java объектов, а не строк в SQL таблицах); используется для запуска Query в BEeclipse и BE5;
  • com.beanexplorer.enterprise.eclipse - UI BEclipse и необходимые для его модельные элементы и view model;
  • com.beanexplorer.enterprise.api - заготовка фасада для использования простейшего API в тестах: загрузка проекта из папки (projectApi = Facade.load(path)), получение корректного DatabaseConnector (projectApi.getDatabaseConnector()) и запуск Freemarker скриптов (projectApi.runFreemarkerScript(string));
  • com.beanexplorer.enterprise.diagrams - здесь и модельные элементы, и UI для диаграмм; новые виды диаграм легче всего добавлять по аналогии со старыми, смотря на уже готовые классы;
  • com.beanexplorer.enterprise.planning - здесь и Model, и ViewModel, и View для для TasksView.

Ядро

  • com.beanexplorer.enterprise.metadata* - ядро.
    • exception - все базовые исключения для BE4, мы используем checked exceptions.
    • model* - самое сердце BE4 - модельные объекты, которые представляют собой дерево проекта, начиная с класса Project.
    • sql - скачивание legacy метаданных (дерева проекта) из BE3 базы данных, синхронизация с базой данных.
    • serialization - сохранённый на жёстком диске BE4 проект представляется как набор YAML файлов; данном пакете реализованы сериализация и десериализация YAML.
    • freemarker - расширение Freemarker, в частности Be4BuiltIns и DatabaseFunctions, макросы находятся в be4/src/com/beanexplorer/enterprise/metadata/freemarker/macro/common.ftl.
      • FreemarkerSqlHandler - получает на вход FreemarkerScript и запускает его как SQL, переадресуя сгенерированный текст в SqlExecutor.
    • util - базовые полезности; должны находиться в этом пакете, даже если используются только в UI

UI

Поскольку BEclipse - это плагин для Eclipse, UI реализован классическим способом для Eclipse плагинов. А именно:

  • весь основной функционал описан в plugin.xml,
    • это могут быть меню, команды, view, редакторы, wizard, страницы настроек и прочее. Для просмотра всего фунционала открываем plugin.xml на странице "Extensions".

Команды

Для создания команды неоходимо зарегистрировать два расширения:

  • org.eclipse.ui.commands
  • org.eclipse.ui.handlers

Дело в том, что в Eclipse одна и та же команда может быть запущена разными обработчиками, так что команда разделена на две части - собственно command, представляет собой абстрактную команду с именем и описанием, и handler - обработчик, ссылается на класс, реализующий функционал этой команды и указывающий, может ли он в данный момент обработать действие. Например, в Eclipse есть стандартная команда "Debug". В разных контекстах её обрабатывает разный обработчик - Java код запускается одним способом, а C++ код другим. При этом кнопка на панели инструментов и биндинг постоянно F11 ссылаются на одно и то же действие.

Наши обработчики команд лежат в com.beanexplorer.enterprise.eclipse.handlers и имеют названия, представляющие собой глаголы.

Так что для создания новой команды

  • кликаем на org.eclipse.ui.commands в нашем редакторе plugin.xml на вкладке Extensions, New -> command, даём уникальный идентификатор, читаемое имя и категорию (categoryId) com.beanexplorer.be4.ui.commands,
  • кликаем на org.eclipse.ui.handlers , New -> handler, выбираем только что созданную команду и новый класс из com.beanexplorer.enterprise.eclipse.handlers.

Меню

Это расширение org.eclipse.ui.menus (New -> menuContribution). Общий вид ссылки на меню (locationURI):

  • [menu|popup|toolbar]:<menuOrPartName>[?after=additions]

Здесь "menu", "popup", "toolbar" - предопределённые строки. <menuOrPartName> - либо "известное" имя типа org.eclipse.ui.main.menu или org.eclipse.ui.main.toolbar, либо имя редактора или view типа com.beanexplorer.enterprise.eclipse.BeProjectView.

popup:com.beanexplorer.enterprise.eclipse.BeProjectView - это, в частности, контекстное меню нашего дерева проекта. Для добавления в него новой команды кликаем на надпись "popup:com.beanexplorer.enterprise.eclipse.BeProjectView" (слева в дереве), New -> command, выбираем команды, указываем текст и выбираем иконку. Готово!

Замечание

Для того, чтобы найти класс с реализацией пункта меню, можно найти соответствующий пункт меню в редакторе plugin.xml, в нём будет указана команда, копируем имя команды в строку поиска в редакторе и находим нужный handler.

Редакторы и view

Хранятся в

  • com.beanexplorer.enterprise.eclipse.editors и
  • com.beanexplorer.enterprise.eclipse.views соответственно.

Аналогично командам, создаются через редактор, кликаем на com.beanexplorer.enterprise.eclipse.editors, New -> editor, заполняем необходимые поля. Аналогично со view. Замечу, что клик на метку "class" позволяет создать нужный класс (в случае со view это org.eclipse.ui.part.ViewPart, например).

Готовые диалоговые окна

com.beanexplorer.enterprise.eclipse.dialogs.Dialogs - простые реализации диалоговых окошек, которых не хватает в org.eclipse.jface.dialogs.MessageDialog.

MVVM и упрощение написания UI

Многие команды представляют собой одностраничные wizard'ы. Вместо того, чтобы писать с нуля, берём класс com.beanexplorer.enterprise.eclipse.handlers.templates.WizardCommandTemplateWizard, копируем в handlers, переименовываем (Alt+Shift+R) и заполняем всё что нужно.

Хорошей практикой являет написание UI с использованием шаблона проектирования MVVM. Пример - CreateDaemonWizard.CreateDaemonWizardPage из CreateDaemon. Это хороший пример с использованием MVVM и моментальной валидацией ввода пользовательских данных, который полагается на класс Ui из com.beanexplorer.enterprise.eclipse.jface. Другие примеры можно найти поискав использования Ui.SimpleBinding<T>.addToWizardPage (Ctrl+Shift+G).

Класс com.beanexplorer.enterprise.eclipse.jface.Ui вообще содержит гибкую основу для реализации MVVM UI (примеры можно найти поискав использования класса Ui или его методов).

Класс com.beanexplorer.enterprise.eclipse.jface.JFace предоставляет методы для частовстречающихся сценариев (как правило создания виджетов внутри Composite с GridLayout из двух столбцов).

Статьи по SWT

Вот здесь вводная статья по SWT - объясняются основные концепции, какие виджеты бывают и как используются layout.

А здесь статья про JFace - библиотеку, упрощающую работу с таблицами и деревьями.