当前位置: 首页 > 知识库问答 >
问题:

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

司空丰
2023-03-14

但是如果我不知道我想要获得的属性的名称怎么办?比方说,基于设计,模型由开发人员具有一些固定的属性,同时还有用户可以动态设置的特性。

因此,目前我使用geteallStructuralFeature()并通过get()使用索引来访问由用户创建的属性,因为我知道我得到的列表将以模型的固定属性作为它的第一个元素,以索引0开头。但我发现这个解决方案不明确而且效率低。也有的时候,说我想工作,不适合。

例如:iemfeditProperty prop=emfeditProperties.list(editingDomain,emfModelPackage.Literals.emfModel.GeteAllStructuralFeatures().Get(X));

每一次的帮助都将得到感激。

共有1个答案

蒋茂
2023-03-14

我最近一直在处理一个类似的案例,我首先尝试定义一个eStructuralFeature来精确地访问我需要的对象的设置/属性。

但是,如果您研究一下ECore中的内部工作方式,就会发现这是不可能的,因为索引绑定到在运行时为特定上下文(即eClass实例)创建的eStructuralFeature对象的对象标识。

然后,我的方法是检查eClass.geteallStructuralFeatures提出的特性,或者对这些特性进行迭代,并检查eObject.eget返回的对象,以了解这个特性(其中eClass eClass=eObject.eClass())。

示例:在一个UML概要文件中,我定义了一个名为“bean”的UML原型,其属性名为FactoryEntity。该属性将引用一个UML类,其原型“Entity”与这个bean最接近,并且将为其生成一个静态工厂方法。

在模型中,我将有一个UML类被类型为Bean,一个类型为Entity。

然后,对于类型为“bean”的类,我将为概要文件中定义的属性/属性factoryentity设置一个值。

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;
    }
}
 类似资料:
  • 我通过Xtext创建了一个DSL,现在需要将编辑器中创建的模型转换为另一个模型。我认为最直接的方法是使用某种M2M转换框架,但我需要访问文本文件后面的模型。问题:如何获得模型的引用?

  • 我有一个Java方法,它被传递一个字符串和一个EMF eObject。字符串是eObject属性的名称。例如,如果向它传递“foo”和EObject eobj,那么它将需要访问eobj.getFoo()。我知道如何从EAttibute的featureID中获取它的值,但似乎找不到通过属性名获取它的方法。这有可能吗?

  • 我有两个基于同一ecore模型的EMF实例版本。我需要以以下格式准备一个从v1到v2更改的事物列表

  • 不同的业务应用场景,会有完全不同的非法终端控制策略,常见的限制策略有终端 IP 、访问域名端口,这些可以通过防火墙等很多成熟手段完成。可也有一些特定限制策略,例如特定 cookie、url、location,甚至请求 body 包含有特殊内容,这种情况下普通防火墙就比较难限制。 Nginx 是 HTTP 7 层协议的实现者,相对普通防火墙从通讯协议有自己的弱势,同等的配置下的性能表现绝对远不如防火

  • 我想用Java代码生成EMF模型。例如,我想创建一个新的Ecore建模项目,然后构建一个简单的模型,就像很多教程(比如vogella教程)中看到的那样。但我不想用GUI手工完成。我想学习如何使用EMF-Ecore-API用Java代码创建模型。 我试着找关于这个话题的教程。但令我失望的是,我找不到太多关于这个话题的资料。我能找到的唯一东西是一些代码片段,用来按代码加载和修改现有模型。但没有关于创建

  • 我有一个基于emf的模型。在模型中,我有一个feature类,我可以向这些feature添加约束。例如,特性A“暗示”特性B。我正在尝试使用emf命令堆栈向特性添加约束。它将约束添加到特征中,但缺少属性。我的代码如下