Referenzen definiert man in EMUGEN mit Referenzproduktionen. Referenzen beziehen sich immer auf einen Tupeltyp (z.B. Person). Syntaktisch sieht eine Referenzproduktion folgendermaßen aus:
PersonRef::= Nachname -> PersonDabei definiert PersonRef eine Referenz auf den benutzerdefinierten Typ Person. Die Angabe einer Komponente des Referierten Typs vor dem Pfeil (hier Nachname) ist Plicht; der Wert dieser Komponente (z.B. Müller) wird auf der Benutzungsoberfläche als Auswahl angezeigt. (Als Referenzbezeichnung wird standardmäßig die erste Komponente des Tupels gespeichert).
Eine Liste von Referenzen definieren Sie dann z.B.
WichtigePersonen::= Wichtig*
Wichtig = PersonRef: Person
Bei oben definierten Referenz werden alle Personen, die in der Liste der privaten oder geschäftlichen Liste eingetragen sind als Auswahl angezeigt. Sie haben durch Angabe von Einschränkungen die Möglichkeit die Auswahl zu begrenzen. Sie könnten bei Personen als neue Komponente Persontyp angeben (z.B. Kunde, Freund, Chef). Dann könnten Sie folgendermaßen die Auswahl auf Feunde begrenzen.
PersonRef::= Vorname -> Person [Persontyp is Freund]
Vergessen Sie nicht das Adressbuchformular um Aktionen zu ergänzen, mit denen man die Formulardaten in eine Datei schreibt bzw. aus der Datei einliest (wie auf dem Blatt 2 erklärt).
Definieren Sie ein Adressbuch wie oben beschrieben ist und 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. Geben Sie auch die *.emu-Quelldatei sowie die Formulardaten-Datei *.xml ab.
Die konkrete EMU-Datenmodell-Grammatik ist in der Dissertation von Herrn Brandl auf der Seite 160 angegeben. Sie fängt an mit
<Datamodel> ::= <Tupelprod> <Prod>*Wir werden das Datenmodell nur mit Tupel- und Listenproduktionen definieren, also Varianten- und Referenzproduktionen lassen wir weg. Als Basistypen können Sie String und Integer wählen. Als erste Produktion in der EMUGEN-Eingabe könnte man nun folgendes angeben:
Datamodel ::= String:Datum Prod*Das Datum nehmen wir dazu, weil wir in EMUGEN-Eingabe mit einer Tupelproduktion anfangen müssen (was wir in unserer Datenmodell-Definition ignorieren). Eine Typdefinition für die Tupelkomponenten könnte so aussehen:
Type ::= UserType | StringType | IntegerTypewobei mit UserType die benutzerdefinierten Typen, wie Adressbuch, Person usw. im Adressbuch-Beispiel gemeint ist.
In der konkreten EMU-Datenmodell-Grammatik kommt <Ident> mehrfach vor, wobei manchmal Name manchmal Type gemeint ist. Sie sollten diese Unterscheidung in Ihrer Definition durchführen, so dass die Oberfläche wirklich hilfreich ist.
Als Eingabe zu Ihrer EMUGEN-Oberfläche verwenden Sie das Adressbuch-Beispiel ohne Referenzen (also ohne die wichtigen Personen und Referenzen).
Vergessen Sie nicht das Formular um Aktionen zu ergänzen, mit denen man die Formulardaten in eine Datei schreibt bzw. aus der Datei einliest (wie auf dem Blatt 2 erklärt).
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. Geben Sie auch die *.emu-Quelldatei sowie die Formulardaten-Datei *.xml ab.