2015-07-04 34 views
1

是否可以使用字符串文字在EMF中設置EStructuralFeature的值?用字符串文字設置EMF EStructuralFeature

實施例:

someObject.set(intFeature, "1") 
someObject.set(stringFeature, "1") 

在此之後I`d期望intFeature的值設定爲與值1的整數,和stringFeature的值設定爲包含「1」。

我懷疑這樣的功能是可用的,因爲EStructuralFeature :: defaultValueLiteral是一個字符串,所以它也必須以某種方式解析。

回答

2

要做這種事情,你必須處理元模型和EFactory。通過查看EStructuralFeature中的setDefaultValue,可以看到EStructuralFeature類型的EFactory用於生成該值(僅當EStructuralFeature類型爲EDatatype時)。

這是一個普遍的片斷(我們假設我們有一個EObject eobj):

// We get the estructuralfeature 
EStructuralFeature feature = eobj.eClass().getEStructuralFeature("myfeature"); 
// Is the feature type "primitive" 
if (feature.getEType() instanceof EDataType) { 
    EDataType dtype = (EDataType)ea.getEType(); 
    // We get the EFactory 
    EFactory factory = feature.getEType().getEPackage().getEFactoryInstance(); 
    eobj.eSet(feature, factory.createFromString(dtype, "mystringvalue")); 
} 

這裏是UML的例子:

Property p = UMLFactory.eINSTANCE.createProperty(); 
EStructuralFeature ea = p.eClass().getEStructuralFeature("lower"); 
... // if and stuffs 
EFactory factory = ea.getEType().getEPackage().getEFactoryInstance(); 
p.eSet(ea, factory.createFromString((EDataType)ea.getEType(), "1"));