Projekt:2021/MyMail

Aus Informatik-Box
Zur Navigation springen Zur Suche springen

Seite zum Projekt MyMail des Informatik LK im Schuljahr 2021/22.

Projekt MyMail

Icon Heft.png
Arbeitsauftrag

Implementiere einen POP3 Mail-Client.


MyMail ist nach dem MVC-Prinzip modelliert, einem Entwurfsprinzip für Software.

Icon Info.png
ModelViewControllerDiagram2.svg

Das MVC-Prinzip

MVC steht für Model-View-Controller und beschreibt ein Prinzip, nach dem die Klassen eines Programms mit graphischer Oberfläche strukturiert werden. Es gibt eine (oder mehrere) Klassen, die die Darstellung übernehmen (View). Andere Klassen verwalten die Daten (Model) und weitere Klassen übernehmen die Steuerung des Programms (Controller).


Der View und das Model sind bereits fertig und stehen euch im Projekt zur Verfügung. Eure Aufgabe ist es, den Hauptcontroller des Programms zu entwickeln - die Klasse MyMail.

Links

Dokumentationen

Die Klasse MyMail

Die Controller-Klasse MyMail ist in verschiedene Hilfsmethoden unterteilt, die einzeln implementiert werden müssen. Beginne mit den Methoden boolean connectToServer() und boolean login(), die eine neue Verbindung zum Server herstellt bzw. die Authentifizierung am POP3-Server durchführt.

Hinweise zur Umsetzung und genauere Beschreibungen findest du im Quelltext der Klasse.

Die Methoden geben jeweils zurück. ob sie erfolgreich waren, oder nicht. Sollte ein Fehler auftreten, speichern sie eine sinnvolle Fehlermeldung in der Objektvariablen lastError. Diese Fehlermeldung kann dem Nutzer angezeigt werden, um ihn über den Fehler zu informieren.

Für die Implementierung der Methode int getMessageCount() muss die Antwort auf den STAT Befehl geparsed werden, um an die Anzahl der Mails (als int) zu kommen. Dazu muss die empfangene Textzeile "zerschnitten" werden. Dabei helfen diese String-Methoden:

String.indexOf(String search) Sucht den Index des ersten Vorkommens des String search im String. "+OK 5 4089".indexOf(" ") // 3
String.substring(int from, int to) Schneidet den Text zwischen den beiden Indizes aus. "+OK 5 4089".substring(4,5) // "5"
Integer.parseInt(String str) Wandelt den Text str in einen Integer um. Integer.parseInt("5") // 5

Die Klasse Connection

Objekte der Klasse Connection ermöglichen eine Netzwerkverbindung mit dem TCP/IP-Protokoll. Es können nach Verbindungsaufbau zu einem Server Zeichenketten (Strings) gesendet und empfangen werden. Zur Vereinfachung geschieht dies zeilenweise, das bedeutet, beim Senden einer Zeichenkette wird ein Zeilentrenner (NL, "new line") ergänzt und beim Empfangen wird er wieder entfernt.

Eine Fehlerbehandlung, zum Beispiel ein Zugriff auf eine bereits geschlossene Verbindung, ist in dieser Klasse aus Gründen der Vereinfachung nicht vorgesehen.

Connection(String pServerIP, int pServerPort) Es wird eine Verbindung zum durch IP-Adresse und Portnummer angegebenen Server aufgebaut, so dass Daten gesendet und empfangen werden können.
void send(String pMessage) Die angegebene Nachricht pMessage wird - um einen Zeilentrenner (NL) erweitert - an den Server versandt.
String receive() Es wird auf eine eingehende Nachricht vom Server gewartet und diese Nachricht zurückgegeben, wobei der vom Server angehängte Zeilentrenner entfernt wird. Während des Wartens ist der ausführende Prozess blockiert. Das bedeutet, es werden erst weitere Befehle ausgeführt, wenn eine vollständige Zeile empfangen wurde.
void close() Die Verbindung wird getrennt und kann nicht mehr verwendet werden.

Die Klasse MyMailGUI

MyMailGUI ist die Haupt-View des Programms. Beim Start des Programms wird eine GUI erstellt und mit der Hauptklasse des Programms verknüpft. Das Programm kann die GUI über diese Methoden verändern:

setStatus( String pStatus ) Zeigt den Text in der Statusleiste am unteren Rand an.
setError( String pStatus ) Zeigt den Fehlertext in der Statusleiste am unteren Rand an.
addMailToList( Mail pMail ) Fügt ein Mail-Objekt der GUI hinzu.
addMailsToList( Mail[] pMails ) Fügt alle Mails im Array der GUI hinzu.
addMailsToList( List<Mail> pMails ) Fügt alle Mails der Liste der GUI hinzu.
removeMailFromList( Mail pMail ) Entfernt die übergebene Mail aus der GUI, falls sie vorher hinzugefügt wurde.
clearAllMails() Entfernt alle Mails aus der GUI.

Die Klasse Mail

Die Klasse Mail stellt das Modell des Programms dar und speichert die Daten einer einzelnen Mail.