Eclipse EMF - 有没有办法在不同的eclipse插件中引用作为模型一部分的类而不必存储tostring()?

时间:2017-09-06 08:25:22

标签: java eclipse eclipse-rcp emf

eclipse插件模型中的一个类需要在完全不同的模型和插件中引用另一个类。

为此,我发现了这个thread,建议使用edatatype并使用我需要链接的类型初始化其实例类。但是,当我尝试在不同的模型中链接到我的类时,它会保存类的tostring,如下例所示

<tasks description="" id="p1.tsk4" label="1" type="place" time="10">
  <requiredCapabilityDescriptor>cod.gen.impl.CapabilityDescriptorImpl@78483404 (description: , id: cap2, label: ) (parent: null)</requiredCapabilityDescriptor>
  <involvedResource>cod.gen.impl.ResourceDescriptorImpl@2839ac4c (description: null, id: null, label: null) (cad: null, material: null, pointySurface: &lt;unset>, sharpEdges: &lt;unset>, thumbnail: null, weight: &lt;unset>) (changeCost: null, generic: &lt;unset>, investCost: null, manufacturer: null)</involvedResource>
</tasks>

在这个例子中,我链接到两个不同的外部类CapabilityDescriptorImpl和ResourceDescriptorImpl。正如您所看到的那样存储了tostring,这在存储和可读性方面不方便,我也不太确定在这种情况下的一致性处理(我的意思是删除,编辑引用的实例)。根据线程写的tostring是因为我选择了数据类型是可序列化的,我试过让它不可序列化,但是这不起作用。

所以我尝试了另一种使用eReference的方法,它将字符串最小化以保存为

<tasks description="" id="p1.tsk4" label="1" type="place" time="10">
 <requiredCapabilityDescriptor xsi:type="CoD:CapabilityDescriptor" description="" id="cap2" label=""/>
  <involvedResource xsi:type="CoD:ResourceDescriptor"/>
</tasks>

在可读性和存储方面要好得多,但我真的怀疑它是一个实际的引用它不包含任何可以引用原始实例的东西。实际上我确信它不是指原始对象,因为它没有显示任何econtainer。再次出现一致性问题。

我的最后一个选项 - 我能想到的 - 是存储引用对象的URI,但在这种情况下,我必须自己管理所有的一致性问题。

所以我的问题是&#34;是否有更好的方法来实现这种外部类引用?&#34;

1 个答案:

答案 0 :(得分:0)

Generating an Extended EMF Model的启发。我做了以下事情:

  1. 首先,我将所有单独的模型文件放入其中一个模型文件的包中。
  2. 导出genmodel以分隔每个包的xsds。
  3. 确保每个xsd文件中的import标记指向导入模型的xsd的有效URL。
  4. 在我的插件中分发xsd文件。
  5. 在每个插件中创建genmodel时,我刚刚引用了导入模型的genmodel(必须以相同的import序列生成genmodel,一个不首先导入任何模型的模型,然后只依赖于它的那个模型)等等)
  6. 现在使用引用指向不同模型中的类。
  7. 这创建了一个看起来像

    的xmI文件
     <c xmlns:c="platform:/resource/my_project/Resource/c.xsd">
      <c:res C:id="r" C:label="r">
        <C:des>My.des#//@rDes.0</C:des>
      </C:resources>
    </C:c>
    

    指向另一个名为My.des

    的XMI文件