# EMF ecore model updaten



## Zer0Cool (14. Sep 2010)

Hallo,

ich erstelle nach dieser Anleitung dynamisch mit einer *.xsd und einer *.xml ecore Objekte und kann diese auch in einem TreeViewer anzeigen. Jetzt würde ich gerne diese Objekte automatisch updaten lassen da sie von einer externen Quelle mit neuen Daten gespeist werden sollen. Ich erhalte ein Datenpaket in dem die ID des upzudatenden Objekts und das neue Attribut enthalten sind. 
Ich versuche mich seit einer Woche mit den Grundlagen von EMF vertraut zu machen komme aber nur langsam voran. Ich vermute das mit den CommandObjekten die Attribute meiner Objekte geändert werden können aber ich steige da noch überhaupt nicht durch. Kann mir jemand sagen wie man da am besten vorgeht?

mfg,

Zer0Cool


----------



## Wildcard (14. Sep 2010)

Hast du den Edit Code generiert und verwendest den AdapterFactoryContentProvider und AdapterFactoryLabelProvider um dein Modell im TreeViewer darzustellen? In diesem Fall übernimmt EMF das aktualisieren des TreeViewers automatisch, du musst nur dein Modell ändern.


----------



## Zer0Cool (15. Sep 2010)

Also wie in der Anleitung benutze ich die beiden Provider, jedoch habe ich keine Ahnung wie ich den Edit Code dynamisch generiere (falls das überhaupt möglich ist). Eigentlich muss das ganze auch nicht unbedingt dynamisch generiert werden, aber ich wollte es eben ohne wizard automatisch erzeugen lassen und das einzige was ich dazu gefunden habe war die dynamische Generierung. 
Ausserdem frage ich mich wie man auf die Attribute zugreift.
Mit resourceSet.getResources().get(0).getContents(); erhalte ich "DocumentRoot" und mit weiteren get().getContents() kann ich auch auf meine Objekte zugreifen aber um mit eGet() auf die Attribute zuzugreifen brauch ich doch erst mal das EStructuralFeature das ich gar nicht habe. Wie soll ich also an das Attribut rankommen? oder habe ich das falsch verstanden?

lg,

Zer0Cool


----------



## Wildcard (15. Sep 2010)

Ich bin nicht sicher ob ich dich richtig verstehe. Warum genau brauchst du dynamic Ecore? Bekommst du die XSDs erst zur Laufzeit? Ein paar Hintergrundinformationen würden mir wohl helfen deine Frage beantworten zu können.



> Mit resourceSet.getResources().get(0).getContents(); erhalte ich "DocumentRoot" und mit weiteren get().getContents() kann ich auch auf meine Objekte zugreifen aber um mit eGet() auf die Attribute zuzugreifen brauch ich doch erst mal das EStructuralFeature das ich gar nicht habe. Wie soll ich also an das Attribut rankommen? oder habe ich das falsch verstanden?


Die EClass enthält alle Features des Objekts, damit kannst du dann eGet und eSet füttern. An die EClass kommst du mit resource.getContents().get(0).eClass()

Wie genau das Event Handling bei den Item Providern mit dynamic Ecore funktioniert kann ich dir aus dem Stehgreif leider auch nicht sagen. Wenn du static Ecore verwendest und die entsprechenden Klassen generierst funktioniert das was du möchtest out-of-the-box.
Da du dich, wie du schreibst, gerade erst in EMF einarbeitest, würde ich erst mal auf dynamic Ecore verzichten wenn es nicht unbedingt nötig ist. Static Ecore ist einfach komfortabler und leichter zu verstehen. Wenn man static ecore verstanden hat, kann man auch wesentlich mehr mit dynamic Ecore anfangen.


----------



## Zer0Cool (16. Sep 2010)

Nein ich brauche kein dynamic ecore, ich hab jedoch nichts zur statischen Generierung gefunden ohne das GUI verwenden zu müssen. Ich würde halt gerne die xsd und die xml übergeben bekommen um dann daraus automatisch die modelle erzeugen zu lassen. Danach erhalte ich Datenpakete die die Attribute updaten sollen.

Vielen Dank soweit!


----------



## Wildcard (17. Sep 2010)

> Ich würde halt gerne die xsd und die xml übergeben bekommen um dann daraus automatisch die modelle erzeugen zu lassen.


Warum möchtest du das denn ohne UI machen wenn du kein dynamic Ecore brauchst?

Auch wenn ich den Sinn dahinter nicht verstehe ist es natürlich möglich. Mir sind 3 Varianten bekannt:
1. Per ANT Task (Maven geht AFAIK auch)
2. Per Kommandozeilenaufruf
3. Programmatisch (dazu müsstest du im EMF Forum nachfragen, oder dir einfach selbst den Code der 'generate' Action anschauen.


----------

