EMUGEN ist ein Generator, mit dem man aus Beschreibung der Daten-, Aufgaben-, Benutzer- und Layoutmodells interaktive Informationssysteme mit Benutzungsoberflächen für mehrere Benutzer generieren kann. EMU bedeutet Extensible Models for Multiple-User Interfaces.
Wir benutzen im Praktikum einen reduzierten Umfang des Generators, wir generieren nur Formulare und keine graphischen Editoren, die man bei der Realisierung von Workflow-Managementsystemen braucht. Die grundliegenden Ideen von EMUGEN sind in der Dissertation von Herrn Brandl beschrieben und es gibt eine Benutzungsanleitung für EMUGEN; beides online, Links sind unten angegeben.
Im Sommersemester 2004 verwenden wir VisualEmugen, das eine Erweiterung von EMUGEN um eine bequeme Oberfläche und um die Visualisierung des Datenmodells ist. VisualEmugen wurde von Herrn Petter als Systementwicklungsprojekt am Lehrstuhl Seidl im Sommer 2003 erstellt. VisualEmugen ist in dem vorgegebenen CompilerConstructionKit enthalten, in dem alle im Praktikum verwendeten Werkzeuge: Ant, JFlex, CUP-TUM, Classgen, Code2Html und VisualEmugen geliefert werden.
Es folgt ein kleines Beispiel für eine Spezifikation des Datenmodells für ein Adressenbuch und das dafür generierte Formular.
Adressbuch::=Personen
Personen::= Person*
Person::= String:Name
String:Vorname
String:Telefon
wird folgendes Formular erzeugt.
Ein Teil des Formulars soll eine Liste von Veranstaltungen enthalten, aus der der Student seine Veranstaltungen auswählen kann. Im zweiten Teil des Formulars kann der Student für sich eine Terminliste für die ganze Woche zusammenstellen.
Das Formular besteht also aus zwei Listen, eine Liste von Veranstaltungen mit Angaben wie
Generieren Sie mit VisualEmugen Ihr Formular (Menü Program: generate, compile, run).
Wie Sie sehen, werden für Listen automatisch die Aktionen: Einfügen, Löschen, Editieren und Verschieben der Listenelemente generiert. Für weitere Aktionen müssen Sie in der EMUGEN-Eingabe Aktionen definieren (im Text hinter der Grammatik).
Um diese Aktionen zu realisieren, ergänzen Sie die EMUGEN-Eingabe für das Formular um Aktionen. Die Syntax für Aktionen sieht folgendermaßen aus:
actions of Terminplan {In den geschweiften Klammern stehen Java-Anweisungen. Aktionsdefinitionen stehen in der Eingabe nach der Grammatik. (Reihenfolge insgesamt: Grammatik, Methoden für einzelne Klassen, Layout, Aktionen). Für obige Oeffnen-Aktion generiert EMUGEN einen JButton Oeffnen und den sonstigen Code, um den JButton mit dem Aktionscode zu verbinden. Sehen sich die generierten Klassen: Terminplan, TerminplanPanel und TerminplanOeffnenAction an. Die generierten Javaklassen stehen in /tmp/emuXXXX.tmp/src, wobei für XXXX irgendeine Zahl steht. Die Javaklassen werden nach der Java-übersetzung (compile) gelöscht, also vorher hinschauen.
token Oeffnen [] () -> {:
// hier ergaenzen
return 0;
:} Ok;
// weitere Aktionen von Terminplan
}
Wenn der Oeffnen-Button geklickt wird, wird die Aktion ausgeführt.
Um die Speichern- und Oeffnen- Aktionen zu implementieren müssen Sie nur die von EMUGEN für Terminplan (Startnonterminal der Grammatik) generierten Methoden:
public void writeToFile()aufrufen. Diese Methoden geben die Daten in eine XML-Datei aus bzw. lesen die Daten aus einer XML-Datei in die entsprechenden Formularfelder.
public void readFromFile()
Diese Methoden verwenden wiederum die für alle Klassen des Datenmodells generierten Methoden:
public String toXML()Solche Ein/Ausgabeaktionen sollten Sie für alle Formulare, die Sie erstellen, vorsehen.
public void loadFromXML(org.w3c.dom.Element e)
Geben Sie als Lösung der Aufgabe die erzeugte jar-Datei und eine mit code2html erzeugte html-Datei mit der VisualEmugen-Eingabe und einem Screenshot Ihres Formulars. Den Screenshot erst nach dem code2html-Lauf einfügen (wie hier im Aufgabenblatt 2 "Adressbuch.gif") sonst haben Sie statt dem Bild den Quelltext des Bildes in Ihrem html-Datei.
...
emu_runtime.datamodel.IOString name;
String s ;
Person p = new Person(); // Hier werden die Listener und Komponenten initializiert
p.getVorname().setValue("Thomas");//Vornamen besetzen
Person p1 = ((Person)getPersonen().getLastSelectedElement()); // Selektierte Person
p1.getVorname().setValue("Hanna"); //Vornamen besetzen
int i= 0;
getPersonen().append(p1);
getPersonen().append(p);
name = ((Person)getPersonen().elementAt(i)).getVorname(); //Indizierter Zugriff
s = name.getValue();
emu_runtime.jarim aktuellen Verzeichnis, wird aus der obigen Addressbuch-Eingabe mit Hilfe der Kommandos:
VisualEmugen.jar (bzw. emugen.jar)
java -jar VisualEmugen.jar -f -fo adressbuch.emu
(bzw. java -jar emugen.jar -f -fo adressbuch.emu)
javac -classpath .:emu_runtime.jar AdressbuchPanel.java
java -classpath .:emu_runtime.jar AdressbuchPanel
obiges Formular erzeugt.