# GMF Connections



## js2002 (28. Jan 2008)

Hi,

ich möchte eine einfach Verbindung ziwschen "LeistungsPlatzhalter"n haben.
Das hat auch funktioniert wie man auf den Grafiken sieht.
Beim Drag & Drop der Connection wird die "Connection" EClass erzeugt und "Source" und "Target" werden gefüllt.
Im ECore Modell habe ich bei der EClass für "LeistungsPlatzhalter" noch 2 Referenzen. Siehe Grafik 2. Die werden leider nicht gefüllt. Was muss ich da tun?

Mein Ziel was dahintersteckt ist:
Ich möchte beim Zeichnen sicherstellen, dass ein "LeistungsPlatzhalter" maximal EINE ankommende Connection hat.
Ich stelle mir das so vor, dass ich dann (wenn es endlich klappt) "Sourceconnections" auf 1 beschränke.
Geht das so oder macht man das anders?


2. Wo kann ich was über EOpposite und EContainment lesen?

Langsam verzweifel ich, ich finde einfach keine gute GMF Literatur.


----------



## Wildcard (29. Jan 2008)

Wenn die Reference targetConnection als upper bound 1 hat (und der Rest richtig modelliert ist), kann auch nur eine Connection gezogen werden.


----------



## js2002 (29. Jan 2008)

Was meinste mit "Reference targetConnection". Die bei der EClass "LeistungsPlatzhalter" oder die bei EClass "Connection"?

Hier mal die
My.ecore

Die Beschränkung fehlt logischerweise noch.

Mir fällt grad auch noch auf, dass ich mehr als eine Connection von und zu einem "LeistungsPlatzhalter" zeichnen kann. Das soll auch nicht so sein :-(


----------



## Wildcard (29. Jan 2008)

```
<eClassifiers xsi:type="ecore:EClass" name="LeistungsPlatzhalter">
    <eStructuralFeatures xsi:type="ecore:EAttribute" name="name" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
    <eStructuralFeatures xsi:type="ecore:EReference" name="targetconnections" upperBound="1"
        eType="#//Connection"/>
    <eStructuralFeatures xsi:type="ecore:EReference" name="sourceconnections" upperBound="-1"
        eType="#//Connection"/>
  </eClassifiers>
```
Das eOpposite musst du noch setzen.
EOpposite von Connection#source wäre LeistungsPlatzhalter#sourceconnections, das eOpposite von Connection#target wäre LeistungsPlatzhalter#targetconnections


----------



## js2002 (29. Jan 2008)

Danke, ich probiere es gleich mal aus. (Auch wenn ich schon gefühlte 40 Stunden am PC sitze)
Kannste mir denn sagen woher ich sowas wissen soll?
Ich kann dich ja nicht ewig als mein persönliches Handbuch "benutzen"....


----------



## Wildcard (29. Jan 2008)

Ich halte speziell EMF für sehr gut dokumentiert.
Die Properties sind ja nun nicht gerade endlos viele, daher sollte man in der Lage sein nachzuschauen wenn einem Property XY nichts sagt.


----------



## js2002 (29. Jan 2008)

Ich hab das IBM RedBook und Containment steht da in sehr schlechtem Englisch erklärt.
EOppsite nicht.


----------



## Wildcard (29. Jan 2008)

js2002 hat gesagt.:
			
		

> Ich hab das IBM RedBook und Containment steht da in sehr schlechtem Englisch erklärt.
> EOppsite nicht.


Das sehe ich anders:


			
				http://www.redbooks.ibm.com/redbooks/pdfs/sg246302.pdf hat gesagt.:
			
		

> The EMF eOpposite attribute of the eReferences entity is very helpful when
> making a connection between two ports with an edge, because for all the
> references with an eOpposite attribute, EMF keeps track of the changes on the
> other side of the reference. This means, for example, that if you add an Edge to
> ...


----------



## js2002 (29. Jan 2008)

Ja, entschuldige, es lag wohl an meiner Übermüdung und dem Zeitdruck. Sorry.

Das mit dem name="targetconnections" upperBound="1"  funktioniert wunderbar!
Mein Editor erlaubt nun nur mehrfache Ausgänge und nur einen Eingang.

Eins ist da noch komisch dran.
Man kann "Platzhalter" A ---> "Platzhalter" C und  "Platzhalter" B ---> "Platzhalter" C erstmal zeichnen. 
Wenn refreshed wird (z.B. durch einfügen von irgendwas) verschwindet das zuerstgezeichnete, also A->C.

2 Möglichkeiten:

1. Jedes mal nach dem Einfügen einer "Connection" refresh'en, also neuzeichnen lassen. Nicht so die feine Lösung, denn vielleicht wollte der Zeichner die alte Verbindung behalten.

2. Diese Lösung wäre schöner: Wenn man eine zweite "Connection" auf den "Leistungsplatzhalter" zieht, sollte ein Symbol beim Mauszeiger kommen ala "nicht möglich". (Wie es ja auch passiert, wenn ich versuche diese Connection mit anderen Figures zu benutzen, meine, dass der Mauszeiger zu diesem Stopschild wird)

Ist das oben beschriebene Verhalten normal oder ist mein mapping fehlerhaft?

Ich schicks mal mit:
My.gmfmap


----------



## Wildcard (29. Jan 2008)

Schau dir die Error Log View, oder das Eclipse Log an. Hört sich eher nach einer Exception an.


----------



## js2002 (29. Jan 2008)

Console zeigt nix.


----------



## js2002 (29. Jan 2008)

Hier mal der Code:

Workspace (alles)

(sry for doppelpost)


----------

