Практика реализации модуля интеграции для Rational Software Architect. Часть 4Источник: developerworks Александр Новичков, руководитель отдела внедрения и консалтинга, СМ-Консалт, Алексей Черников, ведущий специалист отдела перспективных разработок, СМ-Консалт
Обеспечение связи созданного plug-in"а и IBM Rational ClearQuest Runtime Workbench можно закрыть, она нам больше не понадобится. А в среде с проектом откроем класс SampleAction.java. В функции run() можно увидеть код создания тестового окошка. Всё её содержимое можно стереть; здесь мы будем писать код работы с IBM Rational ClearQuest . Первым делом нам потребуется добавить в проект декомпилированные классы CQJNI. Можно просто скопировать package из созданного ранее тестового проекта. Наша цель - узнать и вывести состояния (state) и переходы (activity) для сущности. Для этого потребуется:
Соответственно, нужны функции, которые будут обеспечивать работу каждого из четырех пунктов. Их полный исходный код прилагается вместе со статьёй, здесь же рассмотрим наиболее существенные моменты. Получение списка баз данных ClearQuest Первым делом нужно узнать список баз данных. В Windows ClearQuest хранит эту информацию в реестре. Точное местоположение зависит от версии, которую тоже можно узнать через реестр. В данной статье будем предполагать, что используется 7-я версия ClearQuest (в коде, прилагаемом к статье, есть работа и с 6-й версией). Чтобы узнать версию, можно выполнить следующий запрос через консоль:
Получение списка схем, находящихся в базе данных Выбрав нужную нам базу данных из списка, с помощью CQ JNI можно узнать список схем. Мы уже пробовали делать простые обращения к ClearQuest, и в этом случае начало будет таким же, как и раньше:
В данном случае login, password и dbset должны быть те, что используются для доступа к ClearQuest Designer. Получение списка имён сущностей Здесь схема такая же, как и в предыдущем пункте; основная разница в том, что используется не админская сессия, а обычная. Соответственно, нужен тот логин/пароль, который используется для входа в клиент ClearQuest; в данном случае databaseName - это имя базы данных с запросами, а dbset такой же, как в предыдущем пункте:
Получение состава состояний и переходов для сущности Имея список имён сущностей, можно запросить отдельную сущность через сессию CQ. Имея сущность, можно узнать её состояния и переходы:
Осталось визуализировать импортированную стейт-машину сущности. Наиболее естественный способ - визуализировать с помощью встроенных средств RSA, а именно с помощью такого элемента UML, как State Machine. Для этой цели к статье прилагается класс, который создаёт State-диаграмму; здесь рассмотрим основные проблемные моменты в этом классе. Для работы с UML в RSA нужно сначала создать структуру UML, а затем отобразить её на визуальную диаграмму. Для наших целей сначала потребуется Use Case, затем для этого Use Case нужно создать State Machine, а для неё - Region, в который можно уже добавлять стейты и переходы. При этом, если создать для State Machine диаграмму, все стейты и переходы будут добавляться на неё автоматически (для большинства других диаграмм нужно дублировать создание логического UML элемента вызовом, который этот элемент отобразит на диаграмму). Желательно обеспечивать уникальность имён. Если её не обеспечивать, редактор выдаст предупреждение. В прилагаемом к статье классе для создаваемых стейтов и переходов, при попытке создать новый стейт или переход с не уникальным именем, вместо этого возвращается тот самый уже существующий стейт или переход. Чтобы иметь возможность что-либо создавать, нам потребуется UML Model. Её можно выбрать, например, из списка открытых моделей, который можно получить по вызову UMLModeler.getOpenedModels(); Можно открыть модель по имени, или создать новую:
Так или иначе, имея на руках модель model, с которой мы будем работать, мы можем создать в ней Use Case:
Стоит обратить внимание на вызов UMLPackage.eINSTANCE.getUseCase() - таким образом задаётся тип создаваемого элемента. В UMLPackage.eINSTANCE есть методы, чтобы задать большинство UML- элементов. Все остальные элементы, которые мы обозначили, создаются похожим образом; точные процедуры создания можно посмотреть в прилагаемых исходниках. Чтобы создать диаграмму для созданного UseCase, можно воспользоваться утилитой IBM Rational Software Architect - UMLDiagramHelper.
Второй вызов визуализирует созданный UseCase на диаграмме. Заключение: объединяем всё воедино К статье прилагаются исходные тексты plug-in"а. Для доступа к CQ реализован класс ClearQuestIntegration. Для визуализации - класс CQUMLStateVisualizer. Чтобы создать работающий plug-in, осталось вернуться к методу run() в классе SampleAction; с использованием классов из данной статьи этот метод будет выглядеть примерно так:
После этого, остаётся упаковать plug-in, чтобы можно было его эффективно поставлять конечным пользователям. Как упоминалось ранее, для этого необходимо сделать Feature и Update Site. Начнём с создания Feature. Для этого нужно зайти в File - New - Other и выбрать "Feature Project" (Рисунок 10). Рисунок 10. Окно создания проекта, выбор Feature-проекта Далее следует нажать "Next" и ввести имя Feature-проекта - например, IBM Rational Software Architect CQImport - и снова нажать "Next". В появившемся меню предлагается выбрать plug-in"ы, которые войдут в состав этого Feature. В нашем случае будет только один plug-in: RSACQIntegration (Рисунок 11). Рисунок 11. Окно выбора plug-in"ов, которые войдут в состав Feature. В состав Feature войдёт отмеченный plug-in IBM Rational Software Architect CQIntegraion, который мы до этого создали Выбрав его, можно нажимать на Finish. |