3.2 Entwurf der Anwendung und der Templates
Mein Vorgehen bei Model-to-Code
Ich entwerfe zunächst eine grobe Anwendungsstruktur (1) und schreibe in (2) zwei Bestandteile:
- Den "Rumpf", d.h. so viele Klassen, wie ich brauche, um das Zusammenspiel der generierten Klassen auszuprobieren.
- Den "Aufrufer", der die Schnittstelle zu den generierten Klassen darstellt.
Dann erzeuge ich aus dem "Rumpf" die Templates (3) und starte die Korrekturschleife.
Ich lasse aus den Templates den Code generieren (4) und teste den generierten Code(5).
Falls die Tests nicht erfolgreich waren, überarbeite ich Modell und/oder Templates (6) und starte einen neuen Schleifendurchlauf.
Dieser Ablauf sieht schematisch so aus:
Schritt 1: Die Anwendungsstruktur entwerfen
Mein Entwurf für die Anwendung ist wie folgt:
Das oberste Element im XML, File, wird von FileParser (2) eingelesen, in einer Instanz von FileElement (3) gespeichert und zurück geliefert.
Die direkten Kinder von File, in diesem Fall Table, werden von TableParser (4) eingelesen und in Instanzen von TableElement (5) gespeichert.
Dieses Vorgehen setzt sich dann für die untergeordneten Elemente immer weiter fort.
Die oberste Ebene, FlexmlParser (1), dient als Adapter zwischen der Anwendung und dem generierten Code. Da er Aufgaben ausführt, die über die generierten Parser-Klassen hinausgehen, habe ich ihn von Hand geschrieben.
Mit den drei Ebenen FlexmlParser, FileParser und TableParser habe ich sowohl die Struktur als auch die Schnittstellen und die Implementation der einzelnen Klassen so weit geklärt, dass ich in der Lage war, die Templates zu erstellen.
Aus diesem Entwurf ergibt sich die Code-Erzeugung: Aus dem Modell werden für jedes XML-Element zwei Klassen erstellt: Eine Klasse für die Speicherung des Elements und eine Parser-Klasse, um das Element aus dem XML zu lesen.
Die generierten Dateien in das Zielprojekt kopieren
Aus dem Generator-Projekt werden durch build.xml zwei Arten von Code in das Parser-Projekt kopiert.
- Generierter Code wird nach src-gen/main/java kopiert (2a). Dies sind z.B. die Klassen FileElement und FileParser.
- Handgeschriebener Code wird nach src/main/java kopiert (2b). Dies ist die Klasse FlexmlParser.
Arbeiten mit den Projekten
Das Generator-Projekt finden Sie im Eclipse-Projekt "Flexml.Generator.Ch3.2".
Das Parser-Projekt finden Sie im Eclipse-Projekt "Flexml.Parser.Ch3".
Im Generator-Projekt:
- Erstellen Sie die ecore-Datei und registrieren Sie die EPackages für FlexibleXmlParser.emf. Dies ist in Abschnitt 2 des Tutorials beschrieben.
- Führen Sie build.xml aus. Verwenden Sie beim ersten Mal den Punkt "Run as Ant Build..." und wählen Sie unter dem Reiter "JRE" den Punkt "Run in the same JRE as the workspace" aus.
Führen Sie einen Refresh auf dem Generator-Projekt und dem Parser-Projekt aus. Die Fehler müssten verschwunden sein.