我正在使用基于Modisco元模型的EMF模型。在Acceleo模板的某个点,我需要迭代一个集合,例如:
用于(e: AbstractCodeElement \ action.codeElement)分隔符(‘,')
action.codeElement是一个集合,modisco的kdm.ecore元模型将其定义为无序的。
每次我运行我的生成器时,输出都会以不同的顺序生成。Cleary序列化模型xmi强制执行特定的顺序,每个模型编辑器(emf默认编辑器、modisco编辑器)--我打开模型--总是显示相同的顺序(匹配将元素序列化到xmi文件的顺序)。
由于我无法更改kdm.ecore元模型以使集合有序,那么是否有办法让Acceleo始终在相同的顺序上迭代?
提前感谢
发布于 2013-12-05 12:57:55
恐怕你做不到。试着把它演成一个序列:
action.codeElement->asSequence()但我认为没有什么能保证你得到的序列总是按照相同的顺序排序。
如果元模型是这样建立的,那么应该有一个原因,所以您可以联系元模型的作者来检查这个原因,或者您应该用一些稳定的标准对action.codeElement的结果进行排序:
action.codeElement->sortedBy( some OCL expression)发布于 2015-01-05 13:49:59
我不知道有什么干净的方法。我通过更改子元素的name属性来解决这个问题,以便按我想要的方式按字母顺序排序。
每次我都希望插槽的顺序相同,所以我更改了每个插槽的“值”子名。
名字看起来像:"01_id“、"02_username”、"03_city“、. "10_instructions”、"11_contact“。我不需要更改"value“元素所包含的内容,只需要更改它们的名称,无论如何我都不会将它们用于任何事情。希望这能有所帮助。
[for (s : Slot | instanceSpecification.slot->select(definingFeature.name = 'column')->sortedBy(value->asSequence()->first().name)]
... do work here ...
[/for]https://stackoverflow.com/questions/20366831
复制相似问题