/*
** 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.LinkedList;
import java.util.ListIterator;
import filius.Main;
/**
*
* @author Andre Asschoff
*
*/
public class Email {
private String absender;
private LinkedList<String> empfaenger = new LinkedList<String>();
private LinkedList<String> cc = new LinkedList<String>();
private LinkedList<String> bcc = new LinkedList<String>();
private String betreff;
private String text = "";
private boolean neu = true;// dient dazu, um festzustellen, ob eine Email
// schon mal abgerufen,
// und somit wahrscheinlich schon mal gelesen wurde. Standardmaessig
// ist das true, d.h. sie wurde noch nicht gelesen.
private String dateReceived = "";// dieser Wert wird vom Server, wenn
// erhalten gesetzt
private boolean delete = false;// wird als zu loeschen markiert, wenn sich
// ausgeloggt wird, wird
// sie endgueltig geloescht. Sie wird dann nur nicht mehr angezeigt.
private boolean versendet = false;
public Email() {}
/**
* Dies ist der Konstruktor der Email. Immer wenn eine neue Email erzeugt
* wird, wird ihr der String ihrer Attribute übergeben, die dann ausgelesen
* werden, und in ihren jeweiligen Attributen gespeichert werden. Bsp.:
* <br />
* <code>
* From: <bob@filius.de>
* To: <eve@filius.de>, <ken@uni.de>
* Cc: <john@uni.de>
* Bcc: <berta@filius.de>
* Subject: Eine kurze Nachricht
*
* Das ist der Nachrichtentext.
* </code>
*
* @param nachricht
*/
public Email(String nachricht) {
Main.debug.println("INVOKED ("+this.hashCode()+") "+getClass()+" (Email), constr: Email("+nachricht+")");
String tmp;
String[] liste;
String[] emaildaten = nachricht.split("\n");
int pos1, pos2;
for (int i = 0; i < emaildaten.length; i++) {
pos1 = 0;
pos2 = emaildaten[i].indexOf(":");
if (pos2 > pos1) tmp = emaildaten[i].substring(pos1, pos2).trim();
else tmp = "";
if (tmp.equalsIgnoreCase("from")) {
// pos1 = emaildaten[i].indexOf("<") + 1;
// pos2 = emaildaten[i].indexOf(">");
absender = emaildaten[i].substring(emaildaten[i].indexOf(":")+1).trim();
}
else if (tmp.equalsIgnoreCase("to")) {
empfaenger.clear();
liste = emaildaten[i].split(",");
for (int j = 0; j < liste.length; j++) {
pos1 = liste[j].indexOf("<") + 1;
pos2 = liste[j].indexOf(">");
if (pos1 >= 0 && pos2 > pos1)
empfaenger.add(liste[j].substring(pos1, pos2).trim());
}
}
else if (tmp.equalsIgnoreCase("cc")) {
cc.clear();
liste = emaildaten[i].split(",");
for (int j = 0; j < liste.length; j++) {
pos1 = liste[j].indexOf("<") + 1;
pos2 = liste[j].indexOf(">");
if (pos1 >= 0 && pos2 > pos1)
cc.add(liste[j].substring(pos1, pos2).trim());
}
}
else if (tmp.equalsIgnoreCase("bcc")) {
bcc.clear();
liste = emaildaten[i].split(",");
for (int j = 0; j < liste.length; j++) {
pos1 = liste[j].indexOf("<") + 1;
pos2 = liste[j].indexOf(">");
if (pos1 >= 0 && pos2 > pos1)
bcc.add(liste[j].substring(pos1, pos2).trim());
}
}
else if (tmp.equalsIgnoreCase("subject")) {
pos1 = emaildaten[i].indexOf(":") + 1;
pos2 = emaildaten[i].length();
if (pos1 > 0)
betreff = emaildaten[i].substring(pos1, pos2).trim();
}
else {
if (!text.equals("")) text = text + "\n";
text = text + emaildaten[i];
}
}
}
/**
* In dieser Methode werden die Attribute der Email wieder zu einem langen
* String zusammen gesetzt. Er hat anschliessend wieder die gleiche Form,
* wie der String, der beim Erzeugen eines neuen Email-Objektes mit
* uebergeben wurde. <br />
* <b> Achtung: </b> Die BCC-Empfaenger werden nicht mit ausgegeben! <br />
* Bsp.: <br />
* <code>
* From: <bob@filius.de>
* To: <eve@filius.de>, <ken@uni.de>
* Cc: <john@uni.de>
* Subject: Eine kurze Nachricht
*
* Das ist der Nachrichtentext.
* </code>
*/
public String toString() {
Main.debug.println("INVOKED ("+this.hashCode()+") "+getClass()+" (Email), toString()");
String ergebnis;
ListIterator<String> it;
String toListe = "", ccListe = "";
it = empfaenger.listIterator();
String nextReceiver;
while (it.hasNext()) {
nextReceiver = (String) it.next();
if(nextReceiver.indexOf("<")>=0)
toListe = toListe + nextReceiver;
else
toListe = toListe + "<" + nextReceiver + ">";
if (it.hasNext()) toListe = toListe + ", ";
}
it = cc.listIterator();
while (it.hasNext()) {
nextReceiver = (String) it.next();
if(nextReceiver.indexOf("<")>=0)
ccListe = ccListe + nextReceiver;
else
ccListe = ccListe + "<" + nextReceiver + ">";
if (it.hasNext()) ccListe = ccListe + ", ";
}
ergebnis = "";
if (absender != null) {
ergebnis += "From: " + absender.trim() + "" + "\n";
}
if (!toListe.equals("")) {
ergebnis += "To: " + toListe + "\n";
}
if (!ccListe.equals("")) {
ergebnis += "Cc: " + ccListe + "\n";
}
if (betreff != null) {
ergebnis += "Subject: " + betreff.trim()+"\n";
}
if (!dateReceived.equals("")) {
ergebnis += "Date Received: "+dateReceived+"\n";
}
if (text != null) {
ergebnis+= "\n" + text.trim();
}
return ergebnis;
}
public boolean getDelete() {
return delete;
}
public void setDelete(boolean delete) {
this.delete = delete;
}
public boolean getNeu() {
return neu;
}
public void setNeu(boolean neu) {
this.neu = neu;
}
public String getAbsender() {
return absender;
}
public LinkedList<String> getEmpfaenger() {
return empfaenger;
}
public String getBetreff() {
return betreff;
}
public String getText() {
return text;
}
public void setAbsender(String absender) {
this.absender = absender;
}
public void setBetreff(String betreff) {
this.betreff = betreff;
}
public void setEmpfaenger(LinkedList<String> empfaenger) {
this.empfaenger = empfaenger;
}
public void setText(String text) {
this.text = text;
}
public String getDateReceived() {
return dateReceived;
}
public void setDateReceived(String dateReceived) {
this.dateReceived = dateReceived;
}
public boolean isVersendet() {
return versendet;
}
public void setVersendet(boolean versendet) {
this.versendet = versendet;
}
public LinkedList<String> getBcc() {
return bcc;
}
public void setBcc(LinkedList<String> bcc) {
this.bcc = bcc;
}
public LinkedList<String> getCc() {
return cc;
}
public void setCc(LinkedList<String> cc) {
this.cc = cc;
}
}