# EMF Model Code Generierung



## jlex (20. Mai 2010)

Erstmal ein nettes Hallo an die Community,

ich bin neu hier, habe schon viele Erfahrungen mit Java gesammelt und mache mich nun in einem Projekt mit dem Thema EMF vertraut. Was man damit machen kann, habe ich ausprobiert, mache wohl aber zuviele gedankliche Fehler. Meine Fragen sind:
1. Kann man das generierte EMF Model (Java Code) wieder extrahieren und in einem anderen Projekt (z.B. einer GUI mit Datenbank) wiederverwenden? 
2. Kann man andere EMF Modelle als Basis nutzen und Sie um eigene Objekte erweitern, also praktisch importieren?
3. Ist es zwingend notwendig, im EMFProject mit dem Modell zu arbeiten und wenn ja, wieso?

Danke vorab. Bin gerade bisschen mit der Architektur und dem Hintergedanken des Projekts überfordert und blick da wahrscheinlich einfach noch nicht durch.

Liebe Grüße Alex


----------



## Wildcard (20. Mai 2010)

jlex hat gesagt.:


> ich bin neu hier, habe schon viele Erfahrungen mit Java gesammelt und mache mich nun in einem Projekt mit dem Thema EMF vertraut.


Super Idee 



> 1. Kann man das generierte EMF Model (Java Code) wieder extrahieren und in einem anderen Projekt (z.B. einer GUI mit Datenbank) wiederverwenden?


Was genau meinst du mit extrahieren? Das ist ganz normaler Java Code den du in jeder Art Projekt verwenden kannst.


> 2. Kann man andere EMF Modelle als Basis nutzen und Sie um eigene Objekte erweitern, also praktisch importieren?


Absolut. Einfach rechtsklick im Ecore Editor -> Load Resource, schon hast du ein anderes Ecore Referenziert.


> 3. Ist es zwingend notwendig, im EMFProject mit dem Modell zu arbeiten und wenn ja, wieso?


Die Frage verstehe ich leider nicht.



> Danke vorab. Bin gerade bisschen mit der Architektur und dem Hintergedanken des Projekts überfordert und blick da wahrscheinlich einfach noch nicht durch.



Die Basisfunktionalität ist:
EMF generiert aus einer High Level Beschreibung eines Modells Java Code in Hand Written Quality.

Über die Basisfunktionalität hinaus gibt es ca. 3 Milliarden Features und Zusatzbibliotheken, wenn du konkrete Fragen hast helfe ich gerne aber das jetzt alles zu beschreiben könnte Länger dauern.


----------



## jlex (25. Mai 2010)

> Was genau meinst du mit extrahieren? Das ist ganz normaler Java Code den du in jeder Art Projekt verwenden kannst.


Wie verwende ich den Code nun? Kann ich irgendwo im Projekt ne neue Klasse anlegen, ein main reinknallen und dann die erzeugten Klassen verwenden? Mir ist nicht ganz klar, welche Möglichkeiten es gibt, das Modell zu benutzen. 

Vielleicht erkläre ich einfach kurz um was es geht. Ich habe Daten die von irgendwo her einfach kommen. Diese möchte ich dann in mein Modell laden, verändern und wieder zurück schicken. Ich möchte dazu eine eigene GUI implementieren, in der ich dann z.B. eine paging Funktion habe oder Attribute in einem WYSIWIG Editor ändern kann.

Momentan bin ich auf dem Stand:
-neues emf projekt
-neues ecore diagramm
-genmodel erzeugen
-edit und editor erzeugen (wozu eigentlich?)
-als eclipse application starten

mir fehlen also folgende Anhaltspunkte:
-wo kann ich die GUI um eigene Komponenten (Reiter, Editoren, usw.) erweitern
-wie greife ich dazu auf das Modell zu und wo?
-gibt es eine Startklasse um mal den Verlauf anzusehen (was wird gestartet und womit initialisiert?

Danke für die schnelle Antwort, war dieses WE leider nicht mehr da... 

Beste Grüße


----------



## Wildcard (25. Mai 2010)

> Wie verwende ich den Code nun? Kann ich irgendwo im Projekt ne neue Klasse anlegen, ein main reinknallen und dann die erzeugten Klassen verwenden? Mir ist nicht ganz klar, welche Möglichkeiten es gibt, das Modell zu benutzen.


Lass dir den Test Code generieren dann siehst du wie man das Modell Standalone in einer main Methode verwendet.




> Vielleicht erkläre ich einfach kurz um was es geht. Ich habe Daten die von irgendwo her einfach kommen. Diese möchte ich dann in mein Modell laden, verändern und wieder zurück schicken. Ich möchte dazu eine eigene GUI implementieren, in der ich dann z.B. eine paging Funktion habe oder Attribute in einem WYSIWIG Editor ändern kann.


Entweder einen komplett eigenen Editor bauen, den generierten Editor erweitern, oder einen Graph Editor mit GMF erzeugen lassen



> -edit und editor erzeugen (wozu eigentlich?)


Der Edit Code ist nicht zwingend erforderlich. Dort ist Code zum Rendern (LabelProvider, ContentProvider) und Editieren (Commands) enthalten. Eine Art Glue Code zwischen Modell und UI, man kann aber auch seinen eigenen Glue Code schreiben.
Der Editor ist gedacht als ein Sample Editor mit dem man sein Modell testen kann. Instanzen erstellen, laden, verändern, speichern...



> -wo kann ich die GUI um eigene Komponenten (Reiter, Editoren, usw.) erweitern


Du meinst den generierten Editor? Der erbt von MultiPageEditorPart du kannst also beliebig viele Pages hinzufügen


> -wie greife ich dazu auf das Modell zu und wo?


Der generierte Editor sollte als ein Member eine EMF Resource haben in der dein Modell liegt


> -gibt es eine Startklasse um mal den Verlauf anzusehen (was wird gestartet und womit initialisiert?


Der generierte Editor ist ein Standard Eclipse Editor, folgt also dem generellen Editor Lifecyle der durch Eclipse vorgegeben wird. Editor wird initialisiert mit einem IEditorInput und einer IWorkbenchPage und die createContents Methode wird aufgerufen.
Der generierte Editor ist allerdings wirklich nicht die Universalantwort. Du kannst damit schnell ein paar Sachen ausprobieren und er dient gleichzeitig als Example Code. Wenn der Editor sehr nahe an dem ist was du sowieso haben willst, dann pass ihn an deine Bedürfnisse an, wenn dir eigentlich etwas anderes vorschwebt dann schreib deinen eigenen Editor.
Es gibt wie gesagt auch GMF für Graphen basierte Editoren und Xtext für textuelle Editoren. Wichtig ist erstmal das du dir überlegst was du haben willst und dann kann man entscheiden wie man dort am besten hinkommt.


----------

