Практика реалізації модуля інтеграції для Rational Software Architect. Частина 4, CASE-засоби (моделювання), Програмування, статті

Читати частина 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 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-проекту

Вибравши його, можна натискати на 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>

*

*