2016-04-07 17 views
1

Ich versuche, ein Netzwerk mit EMF zu modellieren. Das Netzwerk sollte aus Knoten bestehen, die miteinander verbunden sind. Jeder Knoten sollte eine oder mehrere Verbindungen zu den anderen haben, wie ein Mesh-Netzwerk.modellieren selbst referenzierenden Knoten in EMF und bearbeiten sie mit ECP

Das Modell sollte von der EMC Client Platforms (ECP) Demo-Anwendung bearbeitet werden können. Wenn der Benutzer Knoten in ECPs Model-Explorer erstellt, kann er/sie die Verbindungen zu den anderen Knoten vorzugsweise in einer Liste festlegen.

Der erste Versuch war eine Selbstreferenz, aber das Problem ist, dass es keine bidirektionalen Selbstreferenzen gibt. Dies führt dazu, dass die Verbindung vom gegenüberliegenden Knoten nicht erkannt wird.

Meine nächste Idee war, eine Zwischenverbindungsklasse zu verwenden, die zu einem anderen Problem führt. Ich möchte diese Verbindung automatisch erstellen, ohne dass eine Verbindungsklasse im Model-Explorer erscheint. Was wäre im generierten EMF-Viewer möglich, aber nicht in der ECP-Demo-Anwendung, die ich verwende.

Dritte Idee: Die einzige Möglichkeit, die letzte Idee zu lösen, ist die Verwendung eines tableControl in der Ansicht des Knotens, um die Verbindungsklasse dort zu bearbeiten. Dann bleibt das Problem mit dem Verstecken der Verbindungsklasse im Model-Explorer bestehen und die Verbindungsklasse erscheint im Projektordner (oberste Ebene) und nicht in ihrer enthaltenen Klasse (in meinem Fall eine Netzwerkklasse).

Does hat jemand einige Ideen, wie man irgendwelche meiner Probleme löst?

bearbeiten: Zusätzliche Informationen

Die Verbindungen zwischen den Knoten sind per Definition Vollduplex. Und das Diagramm sollte anschließend als Eingabe für einen Algorithmus für den kürzesten Weg verwendet werden.

Antwort

1

Ihr erster Versuch ist der gute. Eigentlich können Sie das Gegenteil in Ecore modellieren. Dazu müssen Sie zwei EReferences auf das gleiche Objekt modellieren (also zwei Reflexivreferenzen) und dann die Eigenschaft eOpposite eines Ihrer EReference auf den anderen setzen.

Hier ist ein einfaches Metamodell mit dem eOpposite Satz: https://repository.genmymodel.com/vincent.aranega/NodeGraph

Im Ecore-XMI, es wie folgt aus (man beachte den eOpposite Wert) aussieht:

<eStructuralFeatures xsi:type="ecore:EReference" xmi:id="_pwXZhv1pEeW9zv77lynsJg" 
    name="references" upperBound="-1" eType="#_pwXZg_1pEeW9zv77lynsJg" eOpposite="#_pwXZiv1pEeW9zv77lynsJg"/> 

<eStructuralFeatures xsi:type="ecore:EReference" xmi:id="_pwXZiv1pEeW9zv77lynsJg" 
    name="relatives" upperBound="-1" eType="#_pwXZg_1pEeW9zv77lynsJg" eOpposite="#_pwXZhv1pEeW9zv77lynsJg" /> 

Mit diesem Metamodell, sind Sie in der Lage um eine Graph zu erstellen, die viele Node enthält. Jeder Knoten kann reference andere Knoten. Wenn ein NodeA als Verweis auf einen anderen mit dem Namen B, wird die relatives Sammlung von B automatisch mit A aktualisiert.

+0

Danke für die Richtung. Aber jetzt ist es wie eine In- und Out-Verbindung. Ist es eine gute Idee, die Referenzen automatisch zu den Verwandten hinzuzufügen (im generierten Code), so dass ich den Graphen nur mit einer der Referenzen durchgehen kann. – zumbie

+0

ou ich habe vergessen: und wenn ja, wo wäre der Ort, um diese doppelte hinzufügen (oder bessere Synchronisation der Referenzlisten) zu implementieren. BTW: Die ursprüngliche Frage ist beantwortet, also markiere ich deine. Danke noch einmal. – zumbie

+0

Ich bin mir nicht sicher, ob ich Ihre Anforderung richtig verstanden habe. Mit der Lösung, die ich Ihnen gegeben habe, können Sie den Graphen zum Beispiel nur mit der Kollektion 'references' durchlaufen.Die beiden Sammlungen werden automatisch synchronisiert, wenn Sie ein Element in eine der beiden Sammlungen einfügen, wird das andere aktualisiert. –