2017-09-06 58 views
1

eclipse插件模型中的一个类需要在完全不同的模型和插件中引用另一个类。Eclipse EMF - 有没有办法在不需要存储tostring()的情况下引用不同eclipse插件中模型的一部分的类?

这样做,我发现这thread,建议使用edatatype并初始化它的实例类与我需要链接到的类型。然而,当我试图在不同的模型链接到我的课,这样可以节省类的toString就像下面这个例子

<tasks description="" id="p1.tsk4" label="1" type="place" time="10"> 
    <requiredCapabilityDescriptor>[email protected] (description: , id: cap2, label:) (parent: null)</requiredCapabilityDescriptor> 
    <involvedResource>[email protected] (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,但在这种情况下,我将不得不自己管理所有的一致性问题。

所以我的问题是“是否有更好的方法来实现这个外部类的引用?”

回答

0

Generating an Extended EMF Model的启发。我做了以下工作:

  1. 首先,我将所有单独的模型文件放入其中一个模型文件的包中。
  2. 导出genmodel以分离每个包的xsds。
  3. 确保每个xsd文件中的导入标签都指向导入模型的xsd的有效URL。
  4. 通过我的插件分发xsd文件。
  5. 关于在每个插件中创建genmodel我只是引用了导入模型的genmodel(必须以相同的导入顺序生成genmodel,一个模型不首先导入,然后依赖于它的模型和等等)
  6. 现在使用引用来指向通常在不同模型中的类。

这创造了一个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文件
相关问题