ACCELEO:根据模型结构在路径中创建文件

时间:2012-07-07 15:16:39

标签: eclipse acceleo mda emf

在Acceleo Model to Text转换中,我想为UML类创建一个文件,该文件与包含该类的包(UML模型中的类命名空间)一致。 我面临的问题是我必须按照[file]命令的要求排队,所以我尝试这样的事情

[file ((c.allOwningPackages().name.->sep('/')).concat(c.name.concat('.hpp')),false,'UTF-8')]

但是我在concat上收到了这个错误:

 Cannot find operation (concat(String)) for the type (OclAny)

这样做的正确方法是什么?

1 个答案:

答案 0 :(得分:1)

不必在与文件块相同的行上执行此操作。完成你想要做的事情的两种常用方法是

  • 将文件块嵌套到let块或
  • 将逻辑提取到另一个模板或查询中。

对于你的例子,b)会给出类似的东西:

[template public myMainTemplate(c : uml::Class)]
    [file (getpackage(c), false, 'UTF-8')]
        ...
    [/file]
[/template]

[template private getPackage(c : uml::Class) post(trim())]
    [c.ancestors()->reverse()->sep('/')->including(c.name.concat('.hpp'))/]
[/template]

请注意,对于集合,使用“ - >包括”代替“ .concat ”,这就是您收到错误消息的原因。当然,这只是将所有内容都放在一个表达式中。它可能更具可读性:

[template private getPackage(c : uml::Class) post(trim())]
    [c.ancestors()->reverse()->sep('/')/]/[c.name/].hpp
[/template]