Практика реалізації модуля інтеграції для Rational Software Architect. Частина 4

Читати частина 3

Забезпечення зв'язку створеного plug-in "а і IBM Rational ClearQuest 


Runtime Workbench можна закрити, вона нам більше не знадобиться. А в середовищі з проектом відкриємо клас SampleAction.java. У функції run () можна побачити код створення тестового віконця. Всі її вміст можна стерти; тут ми будемо писати код роботи з IBM Rational ClearQuest .


Насамперед нам потрібно додати в проект декомпільовану класи CQJNI. Можна просто скопіювати package зі створеного раніше тестового проекту.


Наша мета – дізнатися і вивести стану (state) і переходи (activity) для сутності. Для цього потрібно:



  1. дізнатися перелік баз даних, вибрати якусь одну;
  2. дізнатися перелік сутностей у вибраній базі даних, вибрати одну;
  3. для вибраної сутності дізнатися стану та переходи;
  4. вивести стану і переходи.

Відповідно, потрібні функції, які будуть забезпечувати роботу кожного з чотирьох пунктів. Їхній повний вихідний код додається разом зі статтею, тут же розглянемо найбільш суттєві моменти.


Отримання списку баз даних ClearQuest


Насамперед потрібно дізнатися перелік баз даних. У Windows ClearQuest зберігає цю інформацію в реєстрі. Точне місце розташування залежить від версії, яку теж можна дізнатися через реєстр. У даній статті припускати, що використовується 7-я версія ClearQuest (в коді, що додається до статті, є робота і з 6-ї версією). Щоб дізнатися версію, можна виконати наступний запит через консоль:






 reg query "HKEY_CURRENT_USERSoftwareRational SoftwareClearQuest"
Якщо встановлена 7-а версія, відповідь буде містити таку строчку:
HKEY_CURRENT_USERSoftwareRational SoftwareClearQuest7.0.0
Знаючи версію, можна дізнатися перелік баз даних за таким запитом:
reg query "HKEY_CURRENT_USERSoftwareRational SoftwareClearQuest7.0.0CoreDatabases"
Повернеться список папок, і назви баз даних
будуть йти в цьому списку відразу після "Databases".

Отримання списку схем, які знаходяться в базі даних


Вибравши потрібну нам базу даних зі списку, з допомогою CQ JNI можна дізнатися перелік схем. Ми вже пробували робити прості звернення до ClearQuest, і в цьому випадку початок буде таким же, як і раніше:






 CQClearQuest cq = new CQClearQuest ();/* Спочатку створюється додаток * /
CQAdminSession as = cq.CreateAdminSession();
/ * Нам потрібно адмінських доступ для того, щоб дізнатися перелік схем * /
as.Logon(login, password, dbset);
/ * Тут dbset – одна з баз даних, отриманих у попередньому пункті,
а login і password – адмінських, тобто як при вході в ClearQuest Designer.
Для дзвінків API ClearQuest "а порядок параметрів найкраще дізнаватися
в документації ClearQuest API, тому що в CQJNI параметри будуть
без осмислених назв. Посилання можна знайти в ресурсах до статті * /

CQSchemas ss = as.GetSchemas ();/* Даний виклик видає ітеріруемий список схем * /
List<String> = new ArrayList<String>();
/ * У цьому списку будемо зберігати імена схем * /
/ * Далі поелементно отримуємо ці самі імена: * /
for (int i = 0; i < ss.Count(); i++) {
CQSchema s = ss.Item(i);
schemas.add(s.GetName());
}


У даному випадку login, password і dbset повинні бути ті, що використовуються для доступу до ClearQuest Designer.


Отримання списку імен сутностей


Тут схема така ж, як і в попередньому пункті; основна різниця в тому, що використовується не адмінській сесія, а звичайна. Відповідно, потрібний той логін / пароль, який використовується для входу в клієнт ClearQuest, у даному випадку databaseName – це ім'я бази даних із запитами, а dbset такий же, як у попередньому пункті:


CQClearQuest cq = new CQClearQuest(); CQSession session = cq.CreateUserSession(); session.UserLogon(login, password, databaseName, dbSet);/* Используется обычная пара login/password как для клиента ClearQuest, а не для ClearQuest Designer, в відрізняє від виклику в попередньому пункті * / String [] entities = session.GetEntityDefNames ();

Отримання складу станів і переходів для сутності


Маючи список імен сутностей, можна запитати окрему сутність через сесію CQ. Маючи сутність, можна впізнати її стану та переходи:


CQEntityDef entity = session.GetEntityDef(entityName); String[] actions = entity.GetActionDefNames(); String[] states = entity.GetStateDefNames();

Візуалізація


Залишилося візуалізувати імпортовану Стейт-машину сутності. Найбільш природний спосіб – візуалізувати за допомогою вбудованих засобів RSA, а саме за допомогою такого елемента UML, як State Machine. Для цієї мети до статті додається клас, який створює State-діаграму; тут розглянемо основні проблемні моменти у цьому класі.


Для роботи з UML в RSA потрібно спочатку створити структуру UML, а потім відобразити її на візуальну діаграму.


Для наших цілей спочатку потрібно Use Case, потім для цього Use Case потрібно створити State Machine, а для неї – Region, в який можна вже додавати Стейт і переходи. При цьому, якщо створити для State Machine діаграму, всі Стейт і переходи будуть додаватися на неї автоматично (для більшості інших діаграм потрібно дублювати створення логічного UML елемента викликом, який цей елемент відобразить на діаграму).


Бажано забезпечувати унікальність імен. Якщо її не забезпечувати, редактор видасть попередження. У доданому до статті класі для створюваних Стейт і переходів, при спробі створити новий стейт або перехід з не унікальним ім'ям, замість цього повертається той самий вже існуючий стейт або перехід.


Щоб мати можливість що-небудь створювати, нам буде потрібно UML Model. Її можна вибрати, наприклад, зі списку відкритих моделей, який можна отримати за викликом UMLModeler.getOpenedModels ();


Можна відкрити модель по імені, або створити нову:


model = UMLModeler.openModel(name); model = UMLModeler.createModel(name);

Так чи інакше, маючи на руках модель model, з якою ми будемо працювати, ми можемо створити в ній Use Case:


UseCase uc = (UseCase) model.createPackagedElement(name, UMLPackage.eINSTANCE.getUseCase());

Варто звернути увагу на виклик UMLPackage.eINSTANCE.getUseCase () – таким чином задається тип створюваного елемента. У UMLPackage.eINSTANCE є методи, щоб задати більшість UML-елементів.


Всі інші елементи, які ми позначили, створюються схожим чином; точні процедури створення можна подивитися у доданих исходниках.


Щоб створити діаграму для створеного UseCase, можна скористатися утилітою IBM Rational Software Architect  – UMLDiagramHelper.


Diagram d = UMLModeler.getUMLDiagramHelper().createDiagram(model, UMLDiagramKind.USECASE_LITERAL); UMLModeler.getUMLDiagramHelper().createNode(d, uc);

Другий виклик візуалізує створений UseCase на діаграмі.


Висновок: об'єднуємо всі воєдино


До статті додаються вихідні тексти plug-in "а. Для доступу до CQ реалізований клас ClearQuestIntegration. Для візуалізації – клас CQUMLStateVisualizer.


Щоб створити працюючий plug-in, залишилося повернутися до методу run () у класі SampleAction; з використанням класів з даної статті цей метод буде виглядати приблизно так:


try { int version = ClearQuestIntegration.getVersion(); /* Сначала получаем версию установленного CQ*/ List<String> databases = ClearQuestIntegration.getRepositories(version); /*Затем получаем список баз даних * / new CQUMLStateVisualizer (new CQClearQuest (), "admin", "", "SAMPL", databases.get (0), "Defect ");/* Для того щоб відобразити суть" Defect "(ім'я суті передається в останньому параметрі), будуть потрібні логін і пароль від клієнта ClearQuest, щоб отримати матрицю переходів сутності. Щоб її пізнати, потрібно звертатися до ClearQuest, для чого потрібен екземпляр додатку ClearQuest. Решта два параметри вказують, де шукати вказану сутність ("SAMPL" – назва вбудованої в ClearQuest бази з запитами, а databases.get (0) – назва бази даних зі схемами) * /} catch (Exception e) {/ * Якщо plug-in не може працювати, надрукувати причину, але крім цього нічого не будемо робити * / e.printStackTrace ();}

Після цього, залишається упакувати plug-in, щоб можна було його ефективно поставляти кінцевим користувачам.


Як згадувалося раніше, для цього необхідно зробити Feature і Update Site.


Почнемо зі створення Feature. Для цього потрібно зайти в File – New – Other і вибрати "Feature Project" (Малюнок 10).


Малюнок 10. Вікно створення проекту, вибір Feature-проекту

Далі слід натиснути "Next" і ввести ім'я Feature-проекту – наприклад, IBM Rational Software ArchitectCQImport – і знову натиснути "Next". У меню, що пропонується вибрати plug-in "и, які увійдуть до складу цього Feature. У нашому випадку буде тільки один plug-in: RSACQIntegration (Малюнок 11).


Малюнок 11. Вікно вибору plug-in "ов, які увійдуть до складу Feature. До складу Feature увійде зазначений plug-in IBM Rational Software ArchitectCQIntegraion, який ми до цього створили

Вибравши його, можна натискати на Finish.


                                                                                                                                                                                                             Читати частина 5

Схожі статті:


Сподобалася стаття? Ви можете залишити відгук або підписатися на RSS , щоб автоматично отримувати інформацію про нові статтях.

Коментарів поки що немає.

Ваш отзыв

Поділ на параграфи відбувається автоматично, адреса електронної пошти ніколи не буде опублікований, допустимий HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*

*