Scheinaufgabe Kompaktkurs Java WS 98/99

Realisieren Sie ein Java-Programm zur Verwaltung und Steuerung von Aktivitäten.
Das Programm soll dreierlei tun:
  1. eine Datei einlesen, in der Aktivitäten beschrieben sind,
  2. die Aktivitäten auf Konsistenz prüfen,
  3. die Aktivitäten übersichtlich darstellen.
Das Programm ist als Applet zu realisieren, das eine Aktivitätendatei als Parameter (tag <param ...>) erhält.

Aktivitätendatei

Die einzulesende Datei soll aus einer beliebigen Anzahl von Einträgen bestehen, wobei jeder Eintrag die folgenden Felder besitzt: Bezeichnung der Aktivität, zugehöriges Projekt, Ausführende, Beginn der Aktivität, Ende der Aktivität, abhängige Aktivitäten, benötigte Hilfsmittel, Benachrichtigungen, Priorität. Die folgende EBNF beschreibt den Aufbau der Datei präzise. [] steht dabei für optionale Elemente, * für eine Sequenz von n > 0 Elementen, A-list für nicht-leere Listen von A's, durch ',' getrennt. Zwischen Symbolen in Produktionen, die nicht durch Großbuchstaben (z.B. ZEIT) benannt sind, dürfen in der Datei beliebig viele Leerzeichen, Zeilenumbrüche oder Tabulatoren stehen. Bei den anderen Produktionen (DATUM, JAHR, ZEIT, STRING, NAME) dürfen keine Leerzeichen etc. zwischen den einzelnen Token stehen. Anmerkungen in der Datei dürfen an beliebiger Stelle stehen. Sie werden mit '--' eingeleitet und gehen bis zum Ende der Zeile.

Aktivitätendatei ::= Projekt*

Projekt ::= "Projekt:" Projektbezeichnung Beginn "-" Ende
                     "Mitarbeiter:" (Personenname ["(" email ")"])-list
                     "Aktivitäten:" Aktivität*

email ::= STRING
Projektbezeichnung ::= NAME | STRING
Personenname ::= NAME | STRING

Aktivität ::= Aktivitätsbezeichnung [Ausführende] Beginn ["-" Ende]
                      ["vor:" Abhängige_Aktivitäten] ["Benachrichtigen:" Benachrichtigung-list]
                     ["Benötigt:" Hilfsmittel-list] ["Priorität:" Priorität] ["Sonstiges:" Kommentar]

Aktivitätsbezeichnung ::= NAME | STRING

Ausführende ::= NAME-list | "alle"

Abhängige_Aktivitäten ::= Aktivitätsbezeichnung-list

Beginn ::= Zeitpunkt
Ende ::= Zeitpunkt

Zeitpunkt ::= DATUM [ZEIT] | ZEIT

DATUM ::= Tag "." Monat "." [JAHR]
Tag ::= "1" | ... | "31"
Monat ::= "1" | ... | "12"
JAHR ::= Digit Digit*

ZEIT ::= [Digit] Digit ":" Digit Digit

Hilfsmittel ::= STRING

Benachrichtigung ::= Zeitpunkt (Personenname-list | "alle")

Priorität ::= "1" | "2" | "3" | "4"

Kommentar ::= STRING

NAME ::= Letter (Letter | Digit | "-")*
Letter ::= "a" | ... | "z" | "A" ... | "Z" | ä | ö | ü | Ä | Ö | Ü | ß
Digit ::= "0" | ... | "9"
STRING ::= '"' (Letter | Digit | SpecialCharacter | " ")* '"'

Konsistenzprüfungen

Das Programm soll beim Einlesen der Aktivitätendatei Prüfungen durchführen. Grundsätzlich ist bei jedem entdeckten Fehler die Position (Zeile, Spalte) und die Art des Fehlers präzise zu beschreiben. Die folgenden Prüfungen sind zu tätigen:
  • Die Aktivitätendatei ist syntaktisch korrekt.
  • Die Ausführenden einer Aktivität müssen beim Projekt aufgeführt sein. Dieser Eintrag darf nur fehlen, wenn einem Projekt genau ein Mitarbeiter zugeordnet ist. In diesem Fall ist dieser Mitarbeiter implizit auch der Ausführende.
  • Für die zu benachrichtigenden Mitarbeiter muss eine e-mail Adresse angegeben sein.
  • Datums- und Zeitangaben sind syntaktisch legal, ebenso Datumsbereiche (Beginn-Ende). Zeitangaben sind nur erlaubt, falls eine Tagesangabe vorhanden ist. Eine Zeitangabe bei Ende setzt eine Zeitangabe bei Beginn voraus.
  • Terminangaben bei Aktivitäten müssen im Zeitrahmen des Projekts erfolgen. Eine fehlende Jahresangabe bei Aktivitäten muss eindeutig aus dem Projektzeitraum ermittelt werden können.
  • Von einer Aktivität A abhängige Aktivitäten sind als Aktivitäten aufgeführt (nicht notwendigerweise vor dieser Aktivität) und beginnen nicht vor dem Ende von A.
  • Darstellung der Aktivitäten

    Die Aktivitäten der Datei sollen in Netscape 4.5 dargestellt werden. Dabei sollen die folgenden Filter für den Benutzer zur Verfügung stehen:
    1. Selektion der zu einem bestimmten Projekt gehörenden Aktivitäten.
    2. Alle Aktivitäten, bei der eine bestimmte Person beteiligt ist.
    3. Alle Aktivitäten einer bestimmten Priorität.
    Diese Filter sollen auch in Kombination ausgewählt werden können, so dass sich der Benutzer z.B. alle Aktivitäten einer Person in einem bestimmten Projekt mit der Priorität 4 (höchste Priorität) anzeigen lassen kann.

    Die selektierten Aktivitäten sollen in zeitlicher Reihenfolge geordnet mit sämtlichen spezifizierten Attributen erscheinen (es ist nicht vorgeschrieben, in welcher grafischen Darstellung dies zu erfolgen hat). Zusätzlich soll der Benutzer durch Drücken eines Buttons eine grafische Übersicht über die ausgewählten Aktivitäten erhalten, wobei die Aktivitäten als (mglw. parallele) Balken über einer beschrifteten Zeitachse erscheinen.

    Organisatorisches

    Aus der Spezifikation der oben beschriebenen Eingabesprache kann mit Hilfe des Parsergenerators (javacc) ein funktionsfähiger Parser erzeugt werden (eine modifizierte ASTZeitpunkt-Datei finden sie hier). Ein Makefile finden Sie hier. Eine (korrekte) Beispieldatei für Projektbeschreibungen finden Sie hier. Die Spezifikation ist bereits angereichert mit einigen Angaben und Code für die Verwendung des Werkzeugs jjtree. Die Sourcen für beide Werkzeuge stehen auf den CIP-Pool-Rechnern unter /home/holzmuel/javakk/javacc/. Erweitern Sie Ihre PATH-Variable entsprechend um das dortige bin-Verzeichnis. Wenden Sie jjtree zuerst einmal auf die Spezifikaton an (siehe Makefile) und erzeugen Sie so einige ASTxxx-Klassen, die Sie dann nach Ihren Bedürfnissen vervollständigen können. Ergänzen Sie außerdem die u.U. noch fehlenden Teile in der Spezifikation (siehe Kommentare in der Spezifikation). Die Aufgabe kann in Gruppen zu jeweils 2 Personen bearbeitet werden, d.h. jede Gruppe liefert ein Resultat ab. Definieren Sie entsprechende Teilaufgaben und die Schnittstellen zwischen den Teilaufgaben. Die Lösung (Namen der Autoren mit Matrikelnummern, Source-Dateien [.java], Bytecode-Dateien [.class], HTML-Datei für das Applet sowie ein Testfile mit mindestens zwei Projekten mit dem Namen "projects.txt", das als Parameter im html-file für das Applet verwendet wird) ist elektronisch bis 9.4.1999, 23:59 per e-mail an Thomas Eisenbarth eisenbarth@informatik.uni-stuttgart.de abzugeben (zip-Format als Attachment).

    Wichtig: Testen Sie Ihr Produkt sorgfältig! Leiten Sie aus dieser Aufgabenbeschreibung einen vollständigen Satz an Testfällen ab und unterziehen Sie der Software eine entsprechende Prüfung. Offensichtlich ungetestete Software wird rigoros abgelehnt.

    Viel Erfolg!