# EMF Codegenerierung steuern



## Daniel75 (24. Jun 2010)

Hallo zusammen,

ich möchte mit EMF nicht nur Javaklassen generieren (Modell mit Ecore erstellt), sondern zusätzlich eine Funktion aus einer API aufrufen. D.h., bei der Codegenierung soll pro Klasse eine Methode aufgerufen werden, die einen entsprechenden Parameter erhält.

Soweit ich verstehe, kann man über EMF.edit zwar die Instanzierung steuern, nicht aber die Codegenerierung beeinflussen.

Da ich den Code aus einem relationalen Modell erzeugen will, möchte ich an dem Ecoreeditor oder einem UML-Tool  festhalten. Wie kann ich aber solch ein Modell erweitern, um EMF klar zu machen, dass  zusätzlich Javamethoden aufgerufen werden sollen? 

Ist evtl. Xtext das richtige Werkzeug? Ich meine, könnte man damit ein "ergänzendes" Modell schreiben, das den Zweck erfüllt? Aber wie kombiniere ich dann beide Modelle?

Bei AndroMDA gab es das Konzept der Cartridges, außerdem konnte man, soweit ich weiß, Skripte bei der Generierung auszuführen. Gibt es in EMF etwas entsprechendes?

Viele Grüße und Danke im Vorraus.

Daniel


----------



## Wildcard (24. Jun 2010)

> ich möchte mit EMF nicht nur Javaklassen generieren (Modell mit Ecore erstellt), sondern zusätzlich eine Funktion aus einer API aufrufen. D.h., bei der Codegenierung soll pro Klasse eine Methode aufgerufen werden, die einen entsprechenden Parameter erhält.


Ich verstehe die Frage nicht. Was ist ein 'entsprechender Parameter'? Möchtest du das der Codegenerator selbst eine Methode aufruft? Was soll diese Methode denn tun? 
Die Codegenerierung kannst du über Java Emitter Templates (JET) beeinflussen. Wenn du die Frage konkreter stellst kann ich vielleicht konkreter helfen.

EDIT: Oder meinst du deine generierten Klassen sollen zusätzliche Methoden bzgw. custom Code enthalten? In diesem Fall kannst du einfach eOperations im Modell anlegen. Code in generierten Methoden kannst du beliebige verändern. Einfach das @generated zu '@generated NOT' ändern und der Generator lässt diesen Teil des Quellcodes in Zukunft in Ruhe.


----------



## Daniel75 (24. Jun 2010)

Ich möchte die Codegenerierung beeinflussen. Der Parameter soll im wesentlichen der Klassenname und ein URI auf eine Klasse innerhalb der XSD sein, die ich ebenfalls aus dem Modell erzeugen will. 

D.h. ich will:

1. Ein Ecore Modell erstellen
2. Eine XSD mit dem Bordmittel "Generate Schema" erzeugen
3. Den Code generieren und dabei pro Klasse eine Java Methode aufrufen, die als Parameter den Klassennamen und die URI auf die entsprechende Klasse innerhalb der XSD erhält.

Dann werde ich mal gucken wie weit ich mit JET komme. Danke für die Antwort.


----------



## Wildcard (24. Jun 2010)

Ich verstehe nicht wozu du dafür in die Codegenerierung eingreifen musst.
Lies doch einfach das ecore ein und verarbeite es. Du wirst es dir schon gedacht haben, ecore ist ebenfalls ein EMF Modell...


----------

