Я столкнулся с проблемой, и я немного в отчаянии:
Я пытаюсь преобразовать ограничение OCL в программу на С#. Для этого я определяю свои ограничения ocl в документе CompleteOCL и сохраняю его как Abstract Syntax: POC.ocl.oclas. Затем я использую Acceleo с метамоделью Pivot ('http://www.eclipse.org/ocl/2015/Pivot').
Однако общие операции OCL (например, «размер») определены в другой модели: в библиотеке. Поэтому, когда я пытаюсь восстановить операции, используемые в моей модели OCL, ничего не происходит, я могу восстановить только операцию, определенную в моем документе ocl.
Когда я открыл POC.ocl.oclas, у меня было две модели: модель POC.ocl + модель библиотеки. а>.
Я определил это поколение:
[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 сделать ссылку на другую модель (чем на основную)? И если есть, то как это сделать?
ПРИЛОЖЕНИЕ:
Код, который я написал:
[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)