2017-09-06 6 views
1

eclipseプラグイン・モデルのクラスの1つは、まったく異なるモデルとプラグインで別のクラスを参照する必要があります。Eclipse EMF - tostring()を格納することなく、別のEclipseプラグインのモデルの一部であるクラスを参照する方法はありますか?

これを行うには、edatatypeを使用し、そのインスタンスクラスを私がリンクする必要があるタイプで初期化することを提案するthreadが見つかりました。私は別のモデルに私のクラスにリンクしようとしたときにしかし、それは私は2つの異なる外部のクラスCapabilityDescriptorImplとResourceDescriptorImplにリンクしています。この例では、次の例では

<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> 

のようにクラスのToStringメソッド保存されます。 tostringが格納されているのがわかりますが、これは保存と可読性の面で不便です。そのような場合の一貫性の取り扱いについてはわかりません(参照インスタンスの削除、編集を意味します)。スレッドによると、シリアライズ可能なデータ型を選択したためにtostringが書かれていますが、シリアライズできないようにしようとしましたが、それは機能しませんでした。

は、だから私は、読みやすさとストレージの面ではるかに優れている

<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> 

になるために保存するための文字列を最小化しeReferenceを使用して、別のアプローチを試してみましたが、私は実際にそれが実際のリファレンスそれで疑います元のインスタンスを参照できるものは含まれていません。実際には、それはどんなコンテナも表示されないので、元のオブジェクトを参照していないと確信しています。また、一貫性の問題もあります。

最後に、私が考えることができるのは、参照されたオブジェクトのURIを格納することですが、この場合、すべての一貫性の問題を自分で管理する必要があります。

私の質問は「この外部クラスを参照するためのよりよい方法はありますか」です。

答えて

0

Generating an Extended EMF Modelからインスパイアされます。私は次のようにしました:

  1. 最初に、すべてのモデルファイルをモデルファイルのいずれかのパッケージに入れました。
  2. genmodelをエクスポートして、各パッケージのxsdsを区切ります。
  3. すべてのxsdファイルのインポートタグが、インポートされたモデルのxsdの有効なURLを指していることを確認しました。
  4. 私のプラグインにxsdファイルを分散しました。
  5. 各プラグインでgenmodelを作成したとき、私はインポートされたモデルのgenmodelを参照しました(インポートの同じシーケンスでgenmodelを生成する必要があります。最初にインポートしないモデルと、など)
  6. 参照を使用して、異なるモデルのクラスを通常は参照します。

これはMy.des

という名前の別の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> 

のように見えるXMIファイルを作成

関連する問題