EMF recusive子属性

问题描述 投票:-1回答:1

正如你所看到的,元模型有一个测试,其性能。这些也可以有子属性。

我现在想编写一个方法,这给后面的性能以及所有其他子属性。这里是没有递归幼稚的做法。请帮我。

public EList<TestProperty> getProperties() {
        if (properties == null) {
            properties = new EObjectContainmentEList<TestProperty>(TestProperty.class, this,
                    Iec62264Package.TEST__PROPERTIES);
        }
        for (TestProperty property : properties) {
            properties.add(property.getSubProperties());
        }
        return properties;
    }

Metamodel

java emf ecore mde
1个回答
0
投票

不要修改基本生成EMF getter和setter方法。他们所用的EMF坚持你的模型,它会引入明显的问题。

您可以添加一个EMethod getAllProperties,或allProperties的EReference与衍生=真。您将能够给你的具体实施,而这些类型的功能不参与EMF持久性。

所以,保持你的属性的EReference,它的GetProperties()吸气剂是,添加getAllProperties()EMethod,或allProperties衍生的EReference和代码它的东西,如:

/**
 * @generated
 */
public EList<TestProperty> getProperties() {
    if (properties == null) {
        properties = new EObjectContainmentEList<TestProperty>(TestProperty.class, this,
                Iec62264Package.TEST__PROPERTIES);
    }
    return properties;
}

/**
 * @generated NOT
 */
public EList<TestProperty> getAllProperties() {
    List<TestProperty> allProperties = new ArrayList<TestProperty>();
    for (TestProperty subProperty : getSubProperties()) {
        allProperties.add(subProperty);
        allProperties.addAll(subProperty.getAllProperties())
    }
    return allProperties;
}

而就在TestProperty的EClass的方法或派生的EReference allProperties返回所有子属性。

作为替代方案,你也可以使用或得到神奇的Xtext的EcoreUtil2.getAllContentsOfType(MYTEST,TestProperty.class)的灵感,并实现你的方法:

/**
 * @generated NOT
 */
public EList<TestProperty> getAllProperties() {
    return EcoreUtil2.getAllContentsOfType(this, TestProperty.class);
}
© www.soinside.com 2019 - 2024. All rights reserved.