2016-12-06 5 views
0

Я хочу, чтобы получить значение EReference из программы JavaВозможно ли получить значение 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: NULL, тип: дерево-выход, х: 0.0, у : 0.0, connectionDetachedOnDrag: false)

+0

Я не» полностью понять, что вы пытаетесь выполнить. '/ @ nodes.0/@ connector.0' - это перекрестная ссылка на первый соединитель Object в первом узле Object в дереве, поэтому ссылка' source' должна получить его правильно .... Или вы хотите на самом деле получить значение String '/ @ nodes.0/@ connector.0'? Можете ли вы быть более конкретным? –

ответ

1

После того как я прочитал его снова, я полагаю, что понял ваш вопрос. Вы пытаетесь получить фактическое EObject в определенном месте, например: //@nodes.0/@connectors.0? Этот путь называется URIфрагментом. С помощью URIfragment вы можете получить EObject, который хранится в этой позиции из корня дерева ресурсов. Вы должны поместить Ваш GModel в э.д.с. 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

Благодарим вас за ответ. Я хочу получить URI-фрагмент. – user5772710

+0

Возможно ли получить это: //@nodes.0/@connectors.0 в виде строки? – user5772710

+1

'resource.getURIFragment (EObject eObject)' возвращает фрагмент URI как String (путь в дереве защиты в eObject) –

Смежные вопросы