Вот пример того, как вы можете создать экземпляр 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);
Если метод проверки возвращает истину, то ваш запрос действителен для данной модели. В этом коде myElement будет объектом вашей модели ECore с типом Class
. Объект, который вы передаете методу проверки, должен соответствовать типу контекста, который вы установили в помощнике.