EMF Automatisches hinzufügen von Kindelementen?

greeni

Mitglied
Hallo Zusammen,

ich benutze den von EMF generierten Editor.
Wenn ich in dem Editor, über das Kontextmenu ein neues Element hinzufüge (Nennen Wir es mal Element 3), so möchte ich das alle Kindelemente von Element 3 auch automatisch hinzugefügt werden. Also Element 3.1, Element 3.2, Element 3.3, usw...

Verstehe ich das richtig, das ich hierzu die CreateCommand Methode von Element 3 überschreiben muss?
Wenn ich mir diese Metohode anschaue ist dies ziemlich verwirrend... da sie sehr komplex ist. Was müsste ich da denn genau ändern? Bzw. ist das mit dem Überschreiben dieser Methode überhaubt der richtige Ansatz?
 
Zuletzt bearbeitet:

Wildcard

Top Contributor
Verstehe ich es richtig das Element 3 bereits irgendwo existiert, 3 Kinder hat und du es irgendwo referenzieren willst? Falls nein, wo kommen die 3 Kinder 3.1, 3.2 und 3.3 überhaupt her?
Falls ja: du kannst im genmodel einstellen welche Referenzen als Kinder im Baum dargestellt werden, dazu brauchst du keinen Code zu schreiben
 

greeni

Mitglied
Nein, so ist es nicht...

Also der Ist-Stand ist folgender:
Ich wähle in dem Editor das Wurzelelement aus und bekomme jetzt über das Kontextmenü alle Elemente dargestellt, welche ich dem Wurzelelement hinzufügen kann.
Hier steht auch mein Element 3. Wenn ich dieses auswähle sieht mein Baum volgender Maßen aus:
<Wurzelelement>
---<Element 3>

Wähle ich jetzt das Element 3 aus, so bekomme ich im Kontextmenu die Elemente 3.1, 3.2 und 3.3 dargestellt. Diese muss ich jetzt von Hand wiederum alle auswählen wenn ich sie dem Element 3 hinzufügen möchte.


Der Soll-Stand soll aber folgender sein:
Ich wähle über das Kontextmenü dss Element 3 aus und sofort wird auch Elemente 3.1, 3.2 und 3.3 erstellt und Element 3 zugewiesen und der Baum sieht folgender maßen aus.

<Wurzelelement>
---<Element 3>
-------<Element 3.1>
-------<Element 3.2>
-------<Element 3.3>
 

Wildcard

Top Contributor
Ach so, du möchtest direkt einige Children erzeugen?
Hmm, ok, ich habe selten mit dem generierten Editor zu tun, daher ist das vielleicht nicht der eleganteste Weg (das EMF Buch zeigt sicher wie es richtig geht), aber es funktioniert:
Ich habe ein Modell gebaut mit einer EClass Root die ein Kind Element3 aufnehmen kann. Element3 hat 3 mögliche Kinder, Element3_1, Element3_2 und Element3_3. Das entspricht in etwa deinem Setting?

Geh in den RootItemProvider (oder wie immer der Parent von Element3 bei dir heißt).
Dort überschreibst du folgende Methode:

Java:
	@Override
	protected Command createCreateChildCommand(EditingDomain domain,
			EObject owner, EStructuralFeature feature, Object value, int index,
			Collection<?> collection) {
		if(feature==MymodelPackage.Literals.ROOT__ELEMENT3 && value instanceof Element3)
		{
			Element3 element3 =(Element3)value;
			element3.setElement1(MymodelFactory.eINSTANCE.createElement3_1());
			element3.setElement2(MymodelFactory.eINSTANCE.createElement3_2());
			element3.setElement3(MymodelFactory.eINSTANCE.createElement3_3());
		}
		return super.createCreateChildCommand(domain, owner, feature, value, index,
				collection);
	}
 

Ähnliche Java Themen


Oben