2016-12-06 129 views
0

我想從一個Java程序獲得的EReference的價值是否有可能通過名稱獲得EReference的價值?

我使用這個庫:https://github.com/tesis-dynaware/graph-editor

這裏是生成一個XMI文件的例子:

<?xml version="1.0" encoding="ASCII"?> 
<graph:GModel xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:graph="http://de.tesis.dynaware.grapheditor.model/1.0"> 
    <nodes type="tree-node" x="1217.0" y="556.0"> 
    <connectors type="tree-output" connections="//@connections.0 //@connections.1" connectionDetachedOnDrag="false"/> 
    </nodes> 
    <nodes type="tree-node" x="1020.0" y="756.0"> 
    <connectors type="tree-input" connections="//@connections.0"/> 
    <connectors type="tree-output" connectionDetachedOnDrag="false"/> 
    </nodes> 
    <nodes type="tree-node" x="1260.0" y="775.0"> 
    <connectors type="tree-input" connections="//@connections.1"/> 
    <connectors type="tree-output" connectionDetachedOnDrag="false"/> 
    </nodes> 
    <connections type="tree-connection" source="//@nodes.0/@connectors.0" target="//@nodes.1/@connectors.0"/> 
    <connections type="tree-connection" source="//@nodes.0/@connectors.0" target="//@nodes.2/@connectors.0"/> 
</graph:GModel> 

什麼,我要的是獲取EReference源的值,我必須得到的例子:/@nodes.0/@connectors.0

我試了下面的代碼

GModel gModel=model; 
     EList<GConnection> connections=gModel.getConnections(); 
     for(GConnection connection : connections) 
     { 
      GConnector source=connection.getSource(); 
      System.out.println(" valeur source =" +source); 
     } 

,但我得到下面的結果:

valeur [email protected]1dd34be(ID:空,類型:樹輸出中,x:0.0,Y :0.0,connectionDetachedOnDrag:false)

+0

我不完全理解你想要完成的事情。 '/ @ nodes.0/@ connectors.0'是對樹中第一個節點Object中第一個連接器Object的交叉引用,因此'source'引用應該正確地檢索它....或者你想實際上檢索字符串值'/ @ nodes.0/@ connectors.0'?你能更具體一點嗎? –

回答

1

我再次閱讀後,我想我明白你的問題。 您正試圖在特定位置獲得實際的EObject,例如://@nodes.0/@connectors.0? 這條路徑被稱爲URIfragment。使用URIfragment,您可以從資源樹的根目錄獲取存儲在此位置的EObject。 你需要把你的GModel在EMF org.eclipse.emf.ecore.resource.Resource,如果沒有這方面的資料(您可以檢查gModel.eResource()

假設gModel.eResource() == null

//create a new Resource 
Resource resource = new ResourceImpl(); 
//add the gModel 
resource.getContents().add(gModel); 
//get the EObject from the URIfragment 
GConnector connector = (GConnector)resource.getEObject("//@nodes.0/@connectors.0"); 

assert resource.getURIFragment(connector).equals("//@nodes.0/@connectors.0"); 
+0

謝謝你的回答。我想要的是獲取URIfragment。 – user5772710

+0

是否有可能得到這個://@nodes.0/@connectors.0作爲一個字符串? – user5772710

+1

'resource.getURIFragment(EObject eObject)'將URI片段返回爲String(包含樹中eObject的路徑) –

相關問題