Вот пример того, как вы можете создать экземпляр запроса 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