/*
** This file is part of Filius, a network construction and simulation software.
**
** Originally created at the University of Siegen, Institute "Didactics of
** Informatics and E-Learning" by a students' project group:
** members (2006-2007):
** André Asschoff, Johannes Bade, Carsten Dittich, Thomas Gerding,
** Nadja Haßler, Ernst Johannes Klebert, Michell Weyer
** supervisors:
** Stefan Freischlad (maintainer until 2009), Peer Stechert
** Project is maintained since 2010 by Christian Eibl <filius@c.fameibl.de>
** and Stefan Freischlad
** Filius is free software: you can redistribute it and/or modify
** it under the terms of the GNU General Public License as published by
** the Free Software Foundation, either version 2 of the License, or
** (at your option) version 3.
**
** Filius is distributed in the hope that it will be useful,
** but WITHOUT ANY WARRANTY; without even the implied
** warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
** PURPOSE. See the GNU General Public License for more details.
**
** You should have received a copy of the GNU General Public License
** along with Filius. If not, see <http://www.gnu.org/licenses/>.
*/
package filius.software.email;
import java.util.HashMap;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.ListIterator;
import java.util.Vector;
import filius.Main;
import filius.rahmenprogramm.EingabenUeberpruefung;
import filius.software.Anwendung;
import filius.software.system.Datei;
/**
*
* @author Andre Asschoff
*
*/
public class EmailAnwendung extends Anwendung {
// Attribute
private Vector adressbuch = new Vector();
private int sitzungsnummer = 0;
private LinkedList<Email> erstellteNachrichten = new LinkedList<Email>();
private LinkedList<Email> empfangeneNachrichten = new LinkedList<Email>();
private LinkedList<Email> gesendeteNachrichten = new LinkedList<Email>();
private HashMap kontoListe = new HashMap();
private POP3Client pop3client;
private SMTPClient smtpclient;
// Methoden
/**
* Startet die Email-Anwendung und für Sie jeweils einen Pop3- und
* Smtp-Client.
*/
public void starten() {
Main.debug.println("INVOKED ("+this.hashCode()+") "+getClass()+" (EmailAnwendung), starten()");
super.starten();
pop3client = new POP3Client(this);
pop3client.starten();
smtpclient = new SMTPClient(this);
smtpclient.starten();
}
/**
* Methode beendet die EmailAnwendung inkl. der dazu gehörigen smtp und pop3
* clients. Dazu wird die Methode der Superklasse aufgerufen und der Socket
* geschlossen.
*/
public void beenden() {
Main.debug.println("INVOKED ("+this.hashCode()+") "+getClass()+" (EmailAnwendung), beenden()");
super.beenden();
if (pop3client != null)
pop3client.beenden();
if (smtpclient != null)
smtpclient.beenden();
}
/**
* ruft die Methode versendeEmail in SMTPClient auf, um eine Email zu
* versenden. Diese Methode selbst ist nicht blockierend und übernimmt auch
* den Verbindungs- auf-,bzw. abbau.
*
* @param email
* @param remoteServerIP
*/
public void versendeEmail(String remoteServerIP, Email email,
String absender) {
Main.debug.println("INVOKED ("+this.hashCode()+") "+getClass()+" (EmailAnwendung), versendeEmail("+remoteServerIP+","+email+","+absender+")");
String rcpts = "";
if (email.getEmpfaenger().size() > 0)
rcpts += llzuStr(email.getEmpfaenger());
if (email.getCc().size() > 0) {
if (!rcpts.equals(""))
rcpts += ",";
rcpts += llzuStr(email.getCc());
}
if (email.getBcc().size() > 0) {
if (!rcpts.equals(""))
rcpts += ",";
rcpts += llzuStr(email.getBcc());
}
smtpclient.versendeEmail(remoteServerIP, email, absender, rcpts);
}
/**
*
* @param emailAdresse
* @param benutzername
* @param passwort
* @param pop3Port
* @param pop3Server
*/
public void emailsAbholenEmails(String benutzername, String passwort,
String pop3Port, String pop3Server) {
Main.debug.println("INVOKED ("+this.hashCode()+") "+getClass()+" (EmailAnwendung), emailsAbholenEmails("+benutzername+","+passwort+","+pop3Port+","+pop3Server+")");
pop3client.emailsHolen(pop3Server, pop3Port, benutzername, passwort);
}
/**
* Diese Mehtode wandelt eine LL in einen String, die einzelnen
* Listenelemente durch Kommata getrennt.
*
* @param args
* @return
*/
public String llzuStr(LinkedList args) {
Main.debug.println("INVOKED ("+this.hashCode()+") "+getClass()+" (EmailAnwendung), llzuStr("+args+")");
String str = "";
for (ListIterator iter = args.listIterator(); iter.hasNext();) {
str = str + ((String) iter.next());
if (iter.hasNext())
str += ",";
}
return str;
}
/**
* FUNKTIONIERT
*
* @param name
* @param vorname
* @param strasse
* @param hausnr
* @param plz
* @param wohnort
* @param email
* @param telefon
* @return
*/
public boolean kontaktHinzufuegen(String name, String vorname,
String strasse, int hausnr, int plz, String wohnort, String email,
String telefon) {
Main.debug.println("INVOKED ("+this.hashCode()+", T"+this.getId()+") "+getClass()+" (EmailAnwendung), kontaktHinzufuegen("+name+","+vorname+","+strasse+","+hausnr+","+plz+","+wohnort+","+email+","+telefon+")");
if (EingabenUeberpruefung.isGueltig(name,
EingabenUeberpruefung.musterMindEinZeichen)
&& EingabenUeberpruefung.isGueltig(vorname,
EingabenUeberpruefung.musterMindEinZeichen)
&& EingabenUeberpruefung.isGueltig(email,
EingabenUeberpruefung.musterEmailAdresse)) {
try {
Kontakt kontaktNeu = new Kontakt();
kontaktNeu.setName(name);
kontaktNeu.setVorname(vorname);
kontaktNeu.setStrasse(strasse);
kontaktNeu.setHausnr(hausnr);
kontaktNeu.setPlz(plz);
kontaktNeu.setWohnort(wohnort);
kontaktNeu.setEmail(email);
kontaktNeu.setTelefon(telefon);
getAdressbuch().add(kontaktNeu);
} catch (Exception e) {
e.printStackTrace(Main.debug);
return false;
}
} else {
return false;
}
return true;
}
/**
* FUNKTIONIERT
*
* @param name
* @param vorname
* @param email
* @return
*/
public boolean kontaktLoeschen(String name, String vorname, String email) {
Main.debug.println("INVOKED ("+this.hashCode()+", T"+this.getId()+") "+getClass()+" (EmailAnwendung), kontaktLoeschen("+name+","+vorname+","+email+")");
if (EingabenUeberpruefung.isGueltig(name,
EingabenUeberpruefung.musterMindEinZeichen)
&& EingabenUeberpruefung.isGueltig(vorname,
EingabenUeberpruefung.musterMindEinZeichen)
&& EingabenUeberpruefung.isGueltig(email,
EingabenUeberpruefung.musterEmailAdresse)) {
for (ListIterator iter = adressbuch.listIterator(); iter.hasNext();) {
Kontakt kontakt = (Kontakt) iter.next();
if (email.equalsIgnoreCase(kontakt.getEmail())) {
if (name.equals(kontakt.getName())
&& vorname.equals(kontakt.getVorname())) {
adressbuch.remove(kontakt);
return true;
}
}
}
} else {
}
return false;
}
public void speichern() {
Main.debug.println("INVOKED ("+this.hashCode()+", T"+this.getId()+") "+getClass()+" (EmailAnwendung), speichern()");
Datei datei = new Datei();
String kontenString = "";
Iterator iter = kontoListe.values().iterator();
while (iter.hasNext()) {
EmailKonto konto = (EmailKonto) iter.next();
kontenString += konto.toString() + "\n";
}
datei.setDateiInhalt(kontenString);
datei.setName("konten.txt");
datei.setDateiTyp("text/txt");
getSystemSoftware().getDateisystem().speicherDatei(
getSystemSoftware().getDateisystem().getRoot(), datei);
}
public void laden() {
Main.debug.println("INVOKED ("+this.hashCode()+", T"+this.getId()+") "+getClass()+" (EmailAnwendung), laden()");
Datei datei = getSystemSoftware().getDateisystem().holeDatei(
getSystemSoftware().getDateisystem().getRoot(), "konten.txt");
if (datei != null) {
String kontenString = datei.getDateiInhalt();
String[] konten = kontenString.split("\n");
for (int i = 0; i < konten.length; i++) {
String konto = konten[i];
EmailKonto tmpKonto = new EmailKonto(konto);
kontoListe.put(tmpKonto.getBenutzername(), tmpKonto);
}
}
}
public POP3Client holePOP3Client() {
return pop3client;
}
// GET- und SET-Methoden
public Vector getAdressbuch() {
return adressbuch;
}
public void setAdressbuch(Vector adressbuch) {
this.adressbuch = adressbuch;
}
public int getSitzungsnummer() {
return sitzungsnummer;
}
public void setSitzungsnummer(int sitzungsnummer) {
this.sitzungsnummer = sitzungsnummer;
}
public LinkedList getEmpfangeneNachrichten() {
return empfangeneNachrichten;
}
public void setEmpfangeneNachrichten(LinkedList empfangeneNachrichten) {
this.empfangeneNachrichten = empfangeneNachrichten;
}
public LinkedList getErstellteNachrichten() {
return erstellteNachrichten;
}
public void setErstellteNachrichten(LinkedList erstellteNachrichten) {
this.erstellteNachrichten = erstellteNachrichten;
}
public LinkedList getGesendeteNachrichten() {
return gesendeteNachrichten;
}
public void setGesendeteNachrichten(LinkedList gesendeteNachrichten) {
this.gesendeteNachrichten = gesendeteNachrichten;
}
public HashMap getKontoListe() {
return kontoListe;
}
public void setKontoListe(HashMap kontoListe) {
this.kontoListe = kontoListe;
}
}