Программно выполнить запрос OCL в модели UML

Может ли кто-нибудь привести пример того, как программно выполнить запрос OCL в модели UML, используя реализацию Eclipse MDT/OCL. Я прочитал документацию по Eclipse, но так и не смог найти рабочий пример, и я продолжаю получать разные исключения и ошибки.

Спасибо за вашу помощь.


person user3123945    schedule 25.12.2013    source источник


Ответы (1)


Вот пример того, как вы можете создать экземпляр запроса ocl. Существуют две фабрики среды для OCL, одна для Ecore, которая используется в этом примере, и другая для UML. Поскольку UML реализован с помощью Ecore, вы также можете использовать фабрику Ecore, если хотите оценить модели UML.

private final OCL<?, EClassifier, ?, ?, ?, EParameter, ?, ?, ?, Constraint, EClass, EObject> ocl;
private final OCLHelper<EClassifier, ?, ?, Constraint> helper;

this.ocl = OCL.newInstance(EcoreEnvironmentFactory.INSTANCE);
this.helper = ocl.createOCLHelper();

После создания экземпляров объектов OCL и OCLHelper важно установить объект контекста для запроса OCL:

helper.setContext(UMLPackage.eINSTANCE.getClass_());

UMLPackage.eInstance имеет пару геттеров для Class_, Property, Operation и других классов UML, есть аналогичный объект для Ecore: EcorePackage.eINSTANCE. Далее вам нужно создать OCLExpression, а затем из него запрос.

OCLExpression<EClassifier> expression = helper.createQuery("self.attribute->size() > 0");
Query<EClassifier, EClass, EObject> query = ocl.createQuery(expression);

Теперь вы можете проверить запрос на каком-то элементе:

boolean success = query.check(myElement);

Если метод проверки возвращает true, ваш запрос действителен для данной модели. В этом коде myElement будет объектом вашей модели ECore с типом Class. Объект, который вы передаете методу проверки, должен соответствовать типу контекста, который вы установили в помощнике.

person lanoxx    schedule 25.06.2014