从关联生成字段

时间:2015-03-23 20:06:51

标签: uml code-generation acceleo ocl

我想从关联中生成一个字段。 我遇到的问题是我正在使用:

[for (p: Property | aClass.getAssociations().ownedEnd -> select(p: Property | p.type <> aClass)) separator('\n')]
    [p.visibility/] [p.type.name/] [p.type.name.toLowerFirst()/];
[/for]

[for (p: Property | aClass.getAssociations().ownedEnd -> select(p: Property | p.type = p.getOtherEnd().type)) separator('\n')]
    [p.visibility/] [p.type.name/] [p.type.name.toLowerFirst()/];
[/for]

因此,检查所有关联,如果关联类型不是相同的ass类类型,则会创建该类型的字段。 如果结尾是相同的类型,它会创建一个与包含它的类相同类型的字段。

所以基本上如果有关联A - B和A - A. 对于B创建A,对于A创建B和A. 但是第二个循环存在问题。它创建了两个字段而不是一个字段,这非常符合逻辑。这就是问题所在。我怎么解决这个问题?我不确定我是否能够在这里声明某种变量并检查%2。我不能只拿一个值,因为可能有多个关联。 也许我做错了什么?也许有一种方法来迭代结束,这将节省我所有的检查和两个for循环?

1 个答案:

答案 0 :(得分:0)

    [for (a: Association | aClass.getAssociations())]
        [if a.ownedEnd.type = a.ownedEnd.getOtherEnd().type]
            [a.visibility/] [a.endType.name/] [a.endType.name.toLowerFirst()/];
        [else]
            [for (p: Property | a.ownedEnd -> select (type <> aClass))]
                [p.visibility/] [p.type.name/] [p.type.name.toLowerFirst()/];
            [/for]
        [/if]
    [/for]

这似乎可以解决问题