Я сталкиваюсь с проблемой, и я немного не в себе:
Я пытаюсь преобразовать OCL-ограничение в C # -программу.Для этого я определяю свои ограничения ocl в документе CompleteOCL и сохраняю его как абстрактный синтаксис: POC.ocl.oclas.Затем я использую Acceleo с мета-моделью Pivot ('http://www.eclipse.org/ocl/2015/Pivot').
). Однако общие операции OCL (например, "размер") определяются в другой модели: библиотеке. Поэтому при попытке восстановить используемые операциина моей модели OCL ничего не произошло, я могу восстановить только операцию, которую я определил в своем документе ocl.
Когда я открыл POC.ocl.oclas, у меня есть эти 2 модели: POC.ocl model +Модель библиотеки .
Я определил это поколение:
[comment encoding = UTF-8 /]
[module generate('http://www.eclipse.org/ocl/2015/Pivot','http://www.eclipse.org/ocl/2015/Library')]
[template public generateElement(aModel : Model)]
[comment @main/]
[file (aModel.name + 'xx', false, 'UTF-8')]
yo
[/file]
[/template]
И оно генерирует только один файл: "POC.oclxx", а не "Library.oclxx"
Это привело нас к этому вопросу: возможно ли в Acceleo сделать ссылку на другую модель (кроме основной)? И если это так, как это сделать?
ANNEXE:
Код, который я написал:
[comment getCode() opération/]
[template public getCode(operationCallExp : pivot::OperationCallExp) post (trim())]
[operationCallExp.ownedSource.getCode()/]
[operationCallExp.referredOperation.name/][operationCallExp.ownedArguments -> getArguments()/]
[/template]
Теоретически, [operationCallExp.referredOperation.name/]
дает мне название операции. В действительности это ничего не дает мне, за исключением случаев, когда я определил операцию (и, следовательно, когдаоперация не из библиотеки OCL)
Заранее спасибо!
Архивированный проект: Archive_OCL_Acceleo
Папка POC содержит метамодель POC (POC.ecore), ограничение OCL для этой метамодели (POC.ocl)и сотрудник модели Pivot (POC.ocl.oclas).Файлы, сгенерированные Acceleo, находятся в папке файлов
Фордер POC_Acceleo содержит преобразование Acceleo (generate.mtl)