gpt4 book ai didi

attributes - 如何访问 EMF 模型的某些 EStructuralFeatures?

转载 作者:行者123 更新时间:2023-12-04 19:07:56 26 4
gpt4 key购买 nike

我知道有一些方法可以访问 EAttribute Eclipse EMF 模型的 featureID或通过不同的间接方法通过其名称。为此,我发现了以下内容:Eclipse EMF: How to get access EAttribute by name?

但是如果我不知道我想要获取的属性的名称怎么办?比方说,根据设计,模型有一些开发者固定的属性,以及可以由用户动态设置的特性。

所以,我暂时使用 getEAllStructuralFeatures()并通过 get() 使用索引达到由用户创建的属性,因为我知道我得到的列表将模型的固定属性作为从索引 0 开始的第一个元素。但我发现这个解决方案不清楚且效率低下。另外在某些情况下,我想工作,不适合。

例如:IEMFEditProperty prop = EMFEditProperties.list(editingDomain, EMFMODELPackage.Literals.EMFMODEL.getEAllStructuralFeatures().get(X));
您知道此问题的解决方案或解决方法吗?据我所知,没有直接的方法可以获取模型的这种动态创建的特征。

每一个帮助将不胜感激。

最佳答案

我最近一直在研究一个类似的案例,我第一次尝试定义一个 EStructuralFeature准确访问我需要的对象的设置/属性。

但是如果你看看 ECore 内部是如何工作的,你会发现,这永远不会起作用,因为索引绑定(bind)到 EStructuralFeature 的对象标识。在运行时为特定上下文创建的对象(即 EClass 实例)。

然后我的方法是检查 EClass.getEAllStructuralFeatures 提出的功能。或迭代特征并检查 EObject.eGet 返回的对象对于这个功能(其中 EClass eClass = eObject.eClass() )。

示例:在 UML 配置文件中,我定义了一个名为“Bean”的 UML Stereotype,其属性名为 FactoryEntity。 .该属性应引用一个具有构造型“实体”的 UML 类,该类最接近这个 bean,并且将为其生成一个静态工厂方法。

enter image description here

在模型中,我将有一个类型为 Bean 的 UML 类和一个类型为实体的 UML 类。

enter image description here

然后对于键入为“Bean”的类,我将为属性/属性设置一个值 factoryEntity在配置文件中定义。

enter image description here

问题是如何在 ECore 中访问属性值。我最终迭代了 EObject 的 EClass 的可用 EStructuralFeature 列表并检查 eGet 返回的对象的类型.

final EObject eObject = (EObject) holdingClass.getValue(stereotype, stereoTypePropertyName);

final EList<EStructuralFeature> allEStructFeats = eObject.eClass().getEAllStructuralFeatures();

for(EStructuralFeature esf : allEStructFeats)
{
final Object o = eobject.eGet(esf);

if(o instanceof org.eclipse.uml2.uml.Class)
{
return (org.eclipse.uml2.uml.Class) o;
}
}

也许这不是访问结构特征的最优雅的方式,但它是我认为唯一一种足够健壮的方式。

如果您对如何改进这一点有任何建议,请告诉我。

关于attributes - 如何访问 EMF 模型的某些 EStructuralFeatures?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19867448/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com