G
Guest
Gast
Kann mir jemand sagen warum, meine Constraints nicht gehen? Ich sitze schon seit heute morgen (+ 2 oder 3 h gestern) an dem selben beschissenen Constraint, und verstehe nicht, warum das nicht geht. Also in meinem GMF-Diagramm werden einzelne Elemente (hier NodeObject) über gerichtete Graphen (Connection) verbunden. Jede Verbindung soll nur ein mal vorkommen können. Das heisst also, es dürfen keine 2 Verbindungen vorkommen, in denen sourceNodeObject und targetNodeObject gleich sind.
Die Ecore-Struktur sieht so aus (relevanter Auszug):
-NodeObject (ist abstrakt, hat 2 mögliche Realisierungen)
--NodeObjectConnections: Connection
-Connection
--sourceNodeObject: NodeObject
--targetNodeObject: NodeObject
Von der Logik her ist mir völlig klar, wie das funktionieren soll. Aber irgendwie krieg ich´s nicht in OCL gebacken. Ich habe im Mapping-Modell einen Constraint-Knoten (als Kind von Link Mapping <Connection...>) erstellt. Dort habe ich schon verschiedene OCL-Befehle ausprobiert. Das Problem ist, dass wenn ich mir nun eine Connection erstellen will und die mir von einem NodeObject auf das andere ziehe, nach dem Loslassen der Maustaste nichts passiert. Der Mauscursor zeigt zwar an, dass alles in Ordnung ist, aber die Connection verschwindet beim Loslassen der Maustaste. Folgende OCL-Befehle waren bisher am erfolgreichsten (bei den anderen hat der Mauscursor gleich gesagt, dass es nicht geht):
und
Ich kapiere nicht, wieso das nicht geht. Hilfe!
Die Ecore-Struktur sieht so aus (relevanter Auszug):
-NodeObject (ist abstrakt, hat 2 mögliche Realisierungen)
--NodeObjectConnections: Connection
-Connection
--sourceNodeObject: NodeObject
--targetNodeObject: NodeObject
Von der Logik her ist mir völlig klar, wie das funktionieren soll. Aber irgendwie krieg ich´s nicht in OCL gebacken. Ich habe im Mapping-Modell einen Constraint-Knoten (als Kind von Link Mapping <Connection...>) erstellt. Dort habe ich schon verschiedene OCL-Befehle ausprobiert. Das Problem ist, dass wenn ich mir nun eine Connection erstellen will und die mir von einem NodeObject auf das andere ziehe, nach dem Loslassen der Maustaste nichts passiert. Der Mauscursor zeigt zwar an, dass alles in Ordnung ist, aber die Connection verschwindet beim Loslassen der Maustaste. Folgende OCL-Befehle waren bisher am erfolgreichsten (bei den anderen hat der Mauscursor gleich gesagt, dass es nicht geht):
Code:
Connection.allInstances->forAll(c1, c2 | if (c1 <> c2
and
c1.sourceNodeObject = c2.sourceNodeObject) then
c1.targetNodeObject <> c2.targetNodeObject)
endif
und
Code:
Connection.allInstances->forAll(c1, c2 | (c1 <> c2 and c1.sourceNodeObject = c2.sourceNodeObject)
implies
c1.targetNodeObject <> c2.targetNodeObject)
Ich kapiere nicht, wieso das nicht geht. Hilfe!