/* ** 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.gui.anwendungssicht; import java.awt.BorderLayout; import java.awt.Color; import java.awt.Dimension; import java.awt.Image; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.KeyAdapter; import java.awt.event.KeyEvent; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.awt.event.WindowEvent; import java.beans.PropertyVetoException; import java.net.URL; import java.util.HashMap; import java.util.Iterator; import java.util.LinkedList; import java.util.ListIterator; import java.util.Observable; import java.util.Vector; import java.util.regex.Pattern; import javax.swing.BorderFactory; import javax.swing.Box; import javax.swing.DefaultListModel; import javax.swing.ImageIcon; import javax.swing.JButton; import javax.swing.JComboBox; import javax.swing.JEditorPane; import javax.swing.JInternalFrame; import javax.swing.JLabel; import javax.swing.JList; import javax.swing.JOptionPane; import javax.swing.JPanel; import javax.swing.JPasswordField; import javax.swing.JProgressBar; import javax.swing.JScrollPane; import javax.swing.JTabbedPane; import javax.swing.JTable; import javax.swing.JTextArea; import javax.swing.JTextField; import javax.swing.event.InternalFrameEvent; import javax.swing.event.ListSelectionEvent; import javax.swing.event.ListSelectionListener; import javax.swing.table.DefaultTableModel; import javax.swing.table.TableColumnModel; import javax.swing.tree.DefaultMutableTreeNode; import filius.rahmenprogramm.EingabenUeberpruefung; import filius.Main; import filius.software.email.EmailAnwendung; import filius.software.email.Email; import filius.software.email.EmailKonto; import filius.software.email.SMTPClient; import filius.software.email.POP3Client; import filius.software.system.Datei; /** * Applikationsfenster fr den Email-Client * * @author Thomas Gerding & Johannes Bade * */ public class GUIApplicationEmailAnwendungWindow extends GUIApplicationWindow { /** * */ private static final long serialVersionUID = 1L; private JTabbedPane tabbedPane; private JPanel gesendetPanel, eingangPanel, backPanel; private JScrollPane gesendetScroll, eingangScroll; private JEditorPane emailVorschau; private JButton buttonMailsAbholen, buttonMailVerfassen, buttonMailAntworten, buttonKonten, buttonEmailLoeschen; private Email aktuelleMail = null; private JProgressBar progressBar; private JInternalFrame inFrVerfassen, inFrAbholen, inFrKonten; private Box middleBox; private DefaultTableModel posteingangModell = new DefaultTableModel(0, 2); private DefaultTableModel gesendeteModell = new DefaultTableModel(0, 2); private JTable posteingangTable, gesendeteTable; private DefaultListModel lmKonten; private JList jlKonten; private JTextField tfName, tfEmailAdresse, tfPOP3Server, tfPOP3Port, tfSMTPServer, tfSMTPPort, tfBenutzername; private JPasswordField tfPasswort; private JPanel rechtesKontenPanel; private int index, zeilenNummer; private boolean kontoMailOK, kontoPOPPortOK, kontoSMTPPortOK, kontoBenutzerOK; private int auswahlfuerloeschen, paa = -1; public GUIApplicationEmailAnwendungWindow(GUIDesktopPanel desktop, String appName) { super(desktop, appName); ((EmailAnwendung) holeAnwendung()).holePOP3Client().hinzuBeobachter( this); initialisiereKomponenten(); } private void initialisiereKomponenten() { backPanel = new JPanel(new BorderLayout()); tabbedPane = new JTabbedPane(); gesendetPanel = new JPanel(new BorderLayout()); eingangPanel = new JPanel(new BorderLayout()); Box gesendetBox = Box.createHorizontalBox(); gesendetBox.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5)); Box eingangBox = Box.createHorizontalBox(); eingangBox.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5)); Box vorschauBox = Box.createHorizontalBox(); vorschauBox.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5)); posteingangTable = new JTableEditable(posteingangModell, false); TableColumnModel tcm = posteingangTable.getColumnModel(); tcm.getColumn(0).setHeaderValue( messages.getString("emailanwendung_msg1")); tcm.getColumn(1).setHeaderValue( messages.getString("emailanwendung_msg2")); eingangScroll = new JScrollPane(posteingangTable); posteingangTable.getSelectionModel().addListSelectionListener( new ListSelectionListener() { public void valueChanged(ListSelectionEvent lse) { zeilenNummer = posteingangTable.getSelectedRow(); auswahlfuerloeschen = zeilenNummer; paa = 0; if (zeilenNummer != -1) { Email tmpEmail = (Email) ((EmailAnwendung) holeAnwendung()) .getEmpfangeneNachrichten().get( zeilenNummer); emailVorschau.setContentType("text/plain"); emailVorschau.setText(tmpEmail.getText()); aktuelleMail = tmpEmail; emailVorschau.updateUI(); } } }); eingangBox.add(eingangScroll); eingangPanel.add(eingangBox, BorderLayout.CENTER); gesendeteTable = new JTableEditable(gesendeteModell, false); TableColumnModel tcmGesendet = gesendeteTable.getColumnModel(); tcmGesendet.getColumn(0).setHeaderValue( messages.getString("emailanwendung_msg3")); tcmGesendet.getColumn(1).setHeaderValue( messages.getString("emailanwendung_msg2")); gesendeteTable.getSelectionModel().addListSelectionListener( new ListSelectionListener() { public void valueChanged(ListSelectionEvent lse) { zeilenNummer = gesendeteTable.getSelectedRow(); auswahlfuerloeschen = zeilenNummer; paa = 1; if (zeilenNummer != -1) { Email tmpEmail = (Email) ((EmailAnwendung) holeAnwendung()) .getGesendeteNachrichten() .get(zeilenNummer); emailVorschau.setContentType("text/plain"); emailVorschau.setText(tmpEmail.getText()); aktuelleMail = tmpEmail; emailVorschau.updateUI(); } } }); gesendetScroll = new JScrollPane(gesendeteTable); gesendetBox.add(gesendetScroll); gesendetPanel.add(gesendetBox, BorderLayout.CENTER); emailVorschau = new JEditorPane(); emailVorschau.setBackground(new Color(255, 255, 255)); emailVorschau.setContentType("text/html"); emailVorschau.setEditable(false); emailVorschau .setText("<html><head><base href=\"file:bilder\"></head><body>" + "<img src=\"config/email_icon.png\" align=\"top\">" + "<font face=arial>" + messages.getString("emailanwendung_msg4") + "!<br /></font>" + "</body></html>"); JScrollPane vorschauScrollPane = new JScrollPane(emailVorschau); vorschauScrollPane.setPreferredSize(new Dimension(300,200)); vorschauBox.add(vorschauScrollPane); eingangPanel.add(vorschauBox, BorderLayout.SOUTH); tabbedPane.addTab(messages.getString("emailanwendung_msg5"), new ImageIcon(getClass().getResource("/gfx/desktop/email_ordner_posteingang.png")), eingangPanel); tabbedPane.addTab(messages.getString("emailanwendung_msg6"), new ImageIcon(getClass().getResource("/gfx/desktop/email_ordner_gesendet.png")), gesendetPanel); tabbedPane.setTabPlacement(JTabbedPane.LEFT); Box topBox = Box.createHorizontalBox(); ImageIcon image = new ImageIcon(getClass().getResource("/gfx/desktop/email_emails_abholen.png")); buttonMailsAbholen = new JButton(image); image = new ImageIcon(getClass().getResource("/gfx/desktop/email_emails_abholen.gif")); buttonMailsAbholen.setRolloverIcon(image); buttonMailsAbholen.setFocusPainted(false); buttonMailsAbholen.setActionCommand("Abholen"); buttonMailsAbholen.setToolTipText(messages.getString("emailanwendung_msg7")); topBox.add(buttonMailsAbholen); topBox.add(Box.createHorizontalStrut(5)); // Platz zw. urlFeld und // senden image = new ImageIcon(getClass().getResource("/gfx/desktop/email_email_verfassen.png")); buttonMailVerfassen = new JButton(image); /* Gif Animation fuer Hover Effekt */ image = new ImageIcon(getClass().getResource("/gfx/desktop/email_email_verfassen.gif")); buttonMailVerfassen.setRolloverIcon(image); buttonMailVerfassen.setFocusPainted(false); buttonMailVerfassen.setActionCommand("Verfassen"); buttonMailVerfassen.setToolTipText(messages.getString("emailanwendung_msg8")); /* ActionListener */ ActionListener al = new ActionListener() { public void actionPerformed(ActionEvent arg0) { if (arg0.getActionCommand() == buttonMailVerfassen .getActionCommand()) { emailVerfassen(null); } if (arg0.getActionCommand() == buttonMailAntworten .getActionCommand()) { emailVerfassen(aktuelleMail); } if (arg0.getActionCommand() == buttonMailsAbholen .getActionCommand()) { emailsAbholen(); } if (arg0.getActionCommand() == buttonKonten.getActionCommand()) { kontoVerwalten(); kontoAktualisieren(); } if (arg0.getActionCommand() == buttonEmailLoeschen .getActionCommand()) { emailLoeschen(auswahlfuerloeschen, paa); } } }; buttonMailVerfassen.addActionListener(al); buttonMailsAbholen.addActionListener(al); topBox.add(buttonMailVerfassen); topBox.add(Box.createHorizontalStrut(5)); image = new ImageIcon(getClass().getResource("/gfx/desktop/email_email_antworten.png")); buttonMailAntworten = new JButton(image); image = new ImageIcon(getClass().getResource("/gfx/desktop/email_email_antworten.gif")); buttonMailAntworten.setRolloverIcon(image); buttonMailAntworten.setFocusPainted(false); buttonMailAntworten.addActionListener(al); buttonMailAntworten.setActionCommand("antworten"); buttonMailAntworten.setToolTipText(messages .getString("emailanwendung_msg9")); topBox.add(buttonMailAntworten); topBox.add(Box.createHorizontalStrut(5)); image = new ImageIcon(getClass().getResource("/gfx/desktop/icon_emailloeschen.png")); buttonEmailLoeschen = new JButton(messages .getString("emailanwendung_msg43")); buttonEmailLoeschen.addActionListener(al); buttonEmailLoeschen.setActionCommand("loeschen"); buttonEmailLoeschen.setToolTipText(messages .getString("emailanwendung_msg10")); topBox.add(buttonEmailLoeschen); topBox.add(Box.createHorizontalStrut(5)); buttonKonten = new JButton(messages.getString("emailanwendung_msg44")); buttonKonten.addActionListener(al); buttonKonten.setActionCommand("konten"); buttonKonten.setToolTipText(messages.getString("emailanwendung_msg11")); topBox.add(buttonKonten); topBox.add(Box.createHorizontalStrut(5)); topBox.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5)); backPanel.add(tabbedPane, BorderLayout.CENTER); backPanel.add(vorschauBox, BorderLayout.SOUTH); backPanel.add(topBox, BorderLayout.NORTH); this.getContentPane().add(backPanel); pack(); laden(); posteingangAktualisieren(); gesendeteAktualisieren(); } /** * loescht eine ausgewaehlte und als Parameter uebergebene Email aus dem * Posteingang oder dem Postausgang des Client. Dazu dient der zweite * Parameter als Abfrage. * * @return boolean */ public void emailLoeschen(int i, int j /* ob Posteingang- oder ausgang */) { if (j == 0) // dann loeschen aus dem Posteingang { // Main.debug // .println("================================= GUIAppl. Client Action command: größe der Liste: " // + ((EmailAnwendung) holeAnwendung()) // .getEmpfangeneNachrichten().size() // + " ==============="); ((EmailAnwendung) holeAnwendung()).getEmpfangeneNachrichten() .remove(i); posteingangModell.setRowCount(0); zeilenNummer = zeilenNummer - 1; posteingangAktualisieren(); emailVorschau.setText(" "); emailVorschau.updateUI(); } if (j == 1) // dann loeschen aus dem Postausgang { ((EmailAnwendung) holeAnwendung()).getEmpfangeneNachrichten() .remove(i); gesendeteModell.setRowCount(0); zeilenNummer = zeilenNummer - 1; gesendeteAktualisieren(); emailVorschau.setText(" "); emailVorschau.updateUI(); } else if (j == -1) { // Main.debug // .println("============================================GuiAppl. Emailloeschen: Email konnte nicht geloescht werden======================================="); } } // provide more sophisticated and 'real' layout for quoted text private String replyLayout(String text) { return "> "+text.replaceAll("\\n", "\n> "); } private String extractMailAddress(String mailTo) { if(mailTo.indexOf("<")<0) // no "<...>" form, i.e. no name return mailTo.trim(); else { return mailTo.substring(mailTo.indexOf("<")+1, mailTo.indexOf(">")).trim(); } } private void emailVerfassen(Email antwortAuf) { ImageIcon image; inFrVerfassen = new JInternalFrame(messages.getString("emailanwendung_msg12")); inFrVerfassen.setBounds(100, 50, 512, 384); inFrVerfassen.setVisible(true); inFrVerfassen.setResizable(true); inFrVerfassen.setClosable(true); image = new ImageIcon(getClass().getResource("/gfx/desktop/email_email_verfassen_icon.png")); image.setImage(image.getImage().getScaledInstance(16, 16, Image.SCALE_AREA_AVERAGING)); inFrVerfassen.setFrameIcon(image); addFrame(inFrVerfassen); try { inFrVerfassen.setSelected(true); } catch (PropertyVetoException e) { e.printStackTrace(Main.debug); } JPanel verfassenPanel = new JPanel(new BorderLayout()); /* Obere Box (Sende Button usw.) */ Box topBox = Box.createHorizontalBox(); JButton buttonSenden = new JButton(messages.getString("emailanwendung_msg13")); buttonSenden.setActionCommand("senden"); topBox.add(buttonSenden); topBox.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5)); verfassenPanel.add(topBox, BorderLayout.NORTH); /* * Mittlere Box (enthält das Betreffs- & Nachrichten Feld sowie An,CC * und BCC */ middleBox = Box.createVerticalBox(); Box absenderBox = Box.createHorizontalBox(); Iterator it = ((EmailAnwendung) holeAnwendung()).getKontoListe() .values().iterator(); Vector kontenVector = new Vector(); while (it.hasNext()) { EmailKonto aktuellesKonto = (EmailKonto) it.next(); kontenVector.addElement(aktuellesKonto.getBenutzername()); } final JComboBox cbAbsender = new JComboBox(kontenVector); absenderBox.add(cbAbsender); absenderBox.setBorder(BorderFactory.createEmptyBorder(2, 2, 2, 2)); middleBox.add(absenderBox); /* Box mit An Feld und dazugehörigem Label */ Box kleineBox = Box.createHorizontalBox(); JLabel anLabel = new JLabel(messages.getString("emailanwendung_msg14")); anLabel.setPreferredSize(new Dimension(50, 20)); kleineBox.add(anLabel); kleineBox.add(Box.createHorizontalStrut(5)); final JTextField anField = new JTextField(); anField.addKeyListener(new KeyAdapter() { public void keyReleased(KeyEvent e) { mailPruefen(anField); } }); anField.setBorder(null); kleineBox.add(anField); middleBox.add(kleineBox); middleBox.add(Box.createVerticalStrut(3)); /* Box mit CC Feld und dazugehörigem Label */ kleineBox = Box.createHorizontalBox(); JLabel ccLabel = new JLabel(messages.getString("emailanwendung_msg15")); ccLabel.setPreferredSize(new Dimension(50, 20)); kleineBox.add(ccLabel); kleineBox.add(Box.createHorizontalStrut(5)); final JTextField ccField = new JTextField(); ccField.addKeyListener(new KeyAdapter() { public void keyReleased(KeyEvent e) { mailPruefen(ccField); } }); ccField.setBorder(null); kleineBox.add(ccField); middleBox.add(kleineBox); middleBox.add(Box.createVerticalStrut(3)); /* Box mit CC Feld und dazugehörigem Label */ kleineBox = Box.createHorizontalBox(); JLabel bccLabel = new JLabel(messages.getString("emailanwendung_msg16")); bccLabel.setPreferredSize(new Dimension(50, 20)); kleineBox.add(bccLabel); kleineBox.add(Box.createHorizontalStrut(5)); final JTextField bccField = new JTextField(); bccField.addKeyListener(new KeyAdapter() { public void keyReleased(KeyEvent e) { mailPruefen(bccField); } }); bccField.setBorder(null); kleineBox.add(bccField); middleBox.add(kleineBox); middleBox.add(Box.createVerticalStrut(10)); /* Box mit Betreffszeile und dazugehörigem Label */ kleineBox = Box.createHorizontalBox(); JLabel betreffLabel = new JLabel(messages .getString("emailanwendung_msg17")); betreffLabel.setPreferredSize(new Dimension(50, 20)); kleineBox.add(betreffLabel); kleineBox.add(Box.createHorizontalStrut(5)); final JTextField betreffszeile = new JTextField(); betreffszeile.setBorder(null); kleineBox.add(betreffszeile); middleBox.add(kleineBox); middleBox.add(Box.createVerticalStrut(5)); final JTextArea inhaltField = new JTextArea(); inhaltField.setPreferredSize(new Dimension(100, 300)); middleBox.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5)); JScrollPane inhaltScrollPane = new JScrollPane(inhaltField); middleBox.add(inhaltScrollPane); verfassenPanel.add(middleBox); if (antwortAuf != null) { betreffszeile.setText(messages.getString("emailanwendung_msg18") + " " + antwortAuf.getBetreff()); if(!(antwortAuf.getAbsender().indexOf("<") >= 0)){ if(antwortAuf.getAbsender().indexOf("@")>=0) { inhaltField.setText("\n\n<" + antwortAuf.getAbsender() + "> " + messages.getString("emailanwendung_msg19") + "\n" + replyLayout(antwortAuf.getText())); } else { inhaltField.setText("\n\n" + antwortAuf.getAbsender() + " " + messages.getString("emailanwendung_msg19") + "\n" + replyLayout(antwortAuf.getText())); } anField.setText(antwortAuf.getAbsender()); } else if(antwortAuf.getAbsender().substring(0,antwortAuf.getAbsender().indexOf("<")).trim().isEmpty()) { inhaltField.setText("\n\n" + antwortAuf.getAbsender() + " " + messages.getString("emailanwendung_msg19") + "\n" + replyLayout(antwortAuf.getText())); anField.setText(extractMailAddress(antwortAuf.getAbsender())); } else { inhaltField.setText("\n\n" + antwortAuf.getAbsender().substring(0,antwortAuf.getAbsender().indexOf("<")).trim() + " " + messages.getString("emailanwendung_msg19") + "\n" + replyLayout(antwortAuf.getText())); anField.setText(antwortAuf.getAbsender()); } } inFrVerfassen.getContentPane().add(verfassenPanel); inhaltField.requestFocus(); inhaltField.grabFocus(); inhaltField.setCaretPosition(0); /* ActionListener fuer Senden Button */ ActionListener al = new ActionListener() { public void actionPerformed(ActionEvent arg0) { Email mail; String kontoString; EmailKonto versendeKonto; boolean eingabeFehler = false; String[] adressen; mail = new Email(); kontoString = cbAbsender.getSelectedItem().toString(); versendeKonto = (EmailKonto) ((EmailAnwendung) holeAnwendung()) .getKontoListe().get(kontoString); // Main.debug.println("kontoString = " + kontoString); //Main.debug.println(versendeKonto.toString()); mail.setAbsender(versendeKonto.getVorname() + (!versendeKonto.getNachname().isEmpty() ? (" " + versendeKonto.getNachname()) : "") + " <" + versendeKonto.getEmailAdresse() + ">"); if (!mailPruefen(anField)) { // anField.setText(""); eingabeFehler = true; } else { adressen = anField.getText().split(","); for (int i = 0; i < adressen.length; i++) { if (!adressen[i].trim().equals("")) mail.getEmpfaenger().add(extractMailAddress(adressen[i].trim())); } } if (!mailPruefen(ccField)) { // ccField.setText(""); eingabeFehler = true; } else { adressen = ccField.getText().split(","); for (int i = 0; i < adressen.length; i++) { if (!adressen[i].trim().equals("")) mail.getCc().add(extractMailAddress(adressen[i].trim())); } } if (!mailPruefen(bccField)) { // bccField.setText(""); eingabeFehler = true; } else { adressen = bccField.getText().split(","); for (int i = 0; i < adressen.length; i++) { if (!adressen[i].trim().isEmpty()) mail.getBcc().add(extractMailAddress(adressen[i].trim())); } } if (eingabeFehler) { showMessageDialog(messages .getString("emailanwendung_msg20")); } else if (mail.getEmpfaenger().size() == 0 && mail.getCc().size() == 0 && mail.getBcc().size() == 0) { showMessageDialog(messages .getString("emailanwendung_msg21")); } else { mail.setBetreff(betreffszeile.getText()); mail.setText(inhaltField.getText()); progressBar = new JProgressBar(0, 100); progressBar.setValue(0); progressBar.setIndeterminate(true); progressBar.setStringPainted(true); middleBox.add(progressBar); middleBox.invalidate(); middleBox.validate(); progressBar.setString(messages .getString("emailanwendung_msg22")); ((EmailAnwendung) holeAnwendung()).versendeEmail( versendeKonto.getSmtpserver(), mail, versendeKonto .getEmailAdresse()); tabbedPane.setSelectedIndex(1); } } }; buttonSenden.addActionListener(al); } public void emailsAbholen() { inFrAbholen = new JInternalFrame(messages .getString("emailanwendung_msg23")); inFrAbholen.setBounds(100, 50, 384, 64); inFrAbholen.setVisible(true); inFrAbholen.setResizable(true); inFrAbholen.setClosable(true); addFrame(inFrAbholen); try { inFrAbholen.setSelected(true); } catch (PropertyVetoException e) { e.printStackTrace(Main.debug); } progressBar = new JProgressBar(0, 100); progressBar.setValue(0); progressBar.setIndeterminate(true); progressBar.setStringPainted(true); inFrAbholen.getContentPane().add(progressBar); inFrAbholen.getContentPane().invalidate(); inFrAbholen.getContentPane().validate(); Iterator it = ((EmailAnwendung) holeAnwendung()).getKontoListe() .values().iterator(); while (it.hasNext()) { EmailKonto aktuellesKonto = (EmailKonto) it.next(); progressBar.setString(messages.getString("emailanwendung_msg24") + aktuellesKonto.getEmailAdresse() + ")"); ((EmailAnwendung) holeAnwendung()).emailsAbholenEmails( aktuellesKonto.getBenutzername(), aktuellesKonto .getPasswort(), aktuellesKonto.getPop3port(), aktuellesKonto.getPop3server()); tabbedPane.setSelectedIndex(0); } } private void posteingangAktualisieren() { posteingangModell.setRowCount(0); ListIterator mailit = ((EmailAnwendung) holeAnwendung()) .getEmpfangeneNachrichten().listIterator(); while (mailit.hasNext()) { Email neueMail = (Email) mailit.next(); Vector v = new Vector(); String absender = neueMail.getAbsender(); if(absender.indexOf("<")>=0 && absender.substring(0,absender.indexOf("<")).trim().isEmpty()) { v.add(absender.substring(absender.indexOf("<")+1, absender.indexOf(">"))); } else { v.add(absender); } v.add(neueMail.getBetreff()); posteingangModell.addRow(v); } } public void gesendeteAktualisieren() { gesendeteModell.setRowCount(0); ListIterator mailit = ((EmailAnwendung) holeAnwendung()) .getGesendeteNachrichten().listIterator(); while (mailit.hasNext()) { Email neueMail = (Email) mailit.next(); Vector v = new Vector(); v.add(neueMail.getEmpfaenger()); v.add(neueMail.getBetreff()); gesendeteModell.addRow(v); } } private void kontoAktualisieren() { Iterator it; EmailKonto konto; it = ((EmailAnwendung) holeAnwendung()).getKontoListe().values() .iterator(); if (it.hasNext()) { konto = (EmailKonto) it.next(); tfName.setText(konto.getVorname() + " " + konto.getNachname()); tfEmailAdresse.setText(konto.getEmailAdresse()); tfPOP3Server.setText(konto.getPop3server()); tfPOP3Port.setText(konto.getPop3port()); tfSMTPServer.setText(konto.getSmtpserver()); tfSMTPPort.setText(konto.getSmtpport()); tfBenutzername.setText(konto.getBenutzername()); tfPasswort.setText(konto.getPasswort()); } } private void kontoVerwalten() { JLabel label; JPanel panel; Box vBox, hBox; JButton button; JScrollPane scroller; inFrKonten = new JInternalFrame(messages .getString("emailanwendung_msg25")); inFrKonten.setBounds(100, 50, 400, 350); inFrKonten.setVisible(true); inFrKonten.setResizable(true); inFrKonten.setClosable(true); inFrKonten.getContentPane().setLayout(new BorderLayout()); vBox = Box.createVerticalBox(); /* Name */ label = new JLabel(messages.getString("emailanwendung_msg45")); label.setPreferredSize(new Dimension(150, 25)); tfName = new JTextField(); tfName.setPreferredSize(new Dimension(150, 25)); hBox = Box.createHorizontalBox(); hBox.setBorder(BorderFactory.createEmptyBorder(2, 2, 2, 2)); hBox.add(label); hBox.add(tfName); vBox.add(hBox); /* Email-Adresse */ label = new JLabel(messages.getString("emailanwendung_msg26")); label.setPreferredSize(new Dimension(150, 25)); tfEmailAdresse = new JTextField(); tfEmailAdresse.setPreferredSize(new Dimension(150, 25)); tfEmailAdresse.addKeyListener(new KeyAdapter() { public void keyReleased(KeyEvent e) { gueltigkeitPruefen(tfEmailAdresse, EingabenUeberpruefung.musterEmailAdresse); } }); hBox = Box.createHorizontalBox(); hBox.setBorder(BorderFactory.createEmptyBorder(2, 2, 2, 2)); hBox.add(label); hBox.add(tfEmailAdresse); vBox.add(hBox); /* POP3 Server */ label = new JLabel(messages.getString("emailanwendung_msg27")); label.setPreferredSize(new Dimension(150, 25)); tfPOP3Server = new JTextField(); tfPOP3Server.setPreferredSize(new Dimension(150, 25)); hBox = Box.createHorizontalBox(); hBox.setBorder(BorderFactory.createEmptyBorder(2, 2, 2, 2)); hBox.add(label); hBox.add(tfPOP3Server); vBox.add(hBox); /* POP3 Port */ label = new JLabel(messages.getString("emailanwendung_msg28")); label.setPreferredSize(new Dimension(150, 25)); tfPOP3Port = new JTextField(); tfPOP3Port.setPreferredSize(new Dimension(150, 25)); tfPOP3Port.setText("110"); tfPOP3Port.addKeyListener(new KeyAdapter() { public void keyReleased(KeyEvent e) { gueltigkeitPruefen(tfPOP3Port, EingabenUeberpruefung.musterPort); } }); hBox = Box.createHorizontalBox(); hBox.setBorder(BorderFactory.createEmptyBorder(2, 2, 2, 2)); hBox.add(label); hBox.add(tfPOP3Port); vBox.add(hBox); /* SMTP Server */ label = new JLabel(messages.getString("emailanwendung_msg29")); label.setPreferredSize(new Dimension(150, 25)); tfSMTPServer = new JTextField(); tfSMTPServer.setPreferredSize(new Dimension(150, 25)); hBox = Box.createHorizontalBox(); hBox.setBorder(BorderFactory.createEmptyBorder(2, 2, 2, 2)); hBox.add(label); hBox.add(tfSMTPServer); vBox.add(hBox); /* SMTP Port */ label = new JLabel(messages.getString("emailanwendung_msg30")); label.setPreferredSize(new Dimension(150, 25)); tfSMTPPort = new JTextField(); tfSMTPPort.setPreferredSize(new Dimension(150, 25)); tfSMTPPort.setText("25"); tfSMTPPort.addKeyListener(new KeyAdapter() { public void keyReleased(KeyEvent e) { gueltigkeitPruefen(tfSMTPPort, EingabenUeberpruefung.musterPort); } }); hBox = Box.createHorizontalBox(); hBox.setBorder(BorderFactory.createEmptyBorder(2, 2, 2, 2)); hBox.add(label); hBox.add(tfSMTPPort); vBox.add(hBox); /* Benutzername */ label = new JLabel(messages.getString("emailanwendung_msg31")); label.setPreferredSize(new Dimension(150, 25)); tfBenutzername = new JTextField(); tfBenutzername.setPreferredSize(new Dimension(150, 25)); tfBenutzername.addKeyListener(new KeyAdapter() { public void keyReleased(KeyEvent e) { gueltigkeitPruefen(tfBenutzername, EingabenUeberpruefung.musterEmailBenutzername); } }); hBox = Box.createHorizontalBox(); hBox.setBorder(BorderFactory.createEmptyBorder(2, 2, 2, 2)); hBox.add(label); hBox.add(tfBenutzername); vBox.add(hBox); /* Passwort */ label = new JLabel(messages.getString("emailanwendung_msg32")); label.setPreferredSize(new Dimension(150, 25)); tfPasswort = new JPasswordField(); tfPasswort.setPreferredSize(new Dimension(150, 25)); hBox = Box.createHorizontalBox(); hBox.setBorder(BorderFactory.createEmptyBorder(2, 2, 2, 2)); hBox.add(label); hBox.add(tfPasswort); vBox.add(hBox); hBox = Box.createHorizontalBox(); /* Erstellen-Button */ button = new JButton(messages.getString("emailanwendung_msg33")); button.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { if (kontoSpeichern()) { inFrKonten.setVisible(false); } else { showMessageDialog(messages .getString("emailanwendung_msg46")); } } }); hBox.add(button); hBox.add(Box.createHorizontalStrut(5)); button = new JButton(messages.getString("emailanwendung_msg37")); button.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { inFrKonten.setVisible(false); } }); hBox.add(button); vBox.add(Box.createVerticalStrut(10)); vBox.add(hBox); panel = new JPanel(); panel.add(vBox); scroller = new JScrollPane(panel); inFrKonten.getContentPane().add(scroller, BorderLayout.CENTER); addFrame(inFrKonten); try { inFrKonten.setSelected(true); } catch (PropertyVetoException e) { e.printStackTrace(Main.debug); } } private boolean kontoSpeichern() { String[] teilStrings; String tmp = ""; EmailKonto neuesKonto = null; Iterator it; it = ((EmailAnwendung) holeAnwendung()).getKontoListe().values() .iterator(); if (it.hasNext()) neuesKonto = (EmailKonto) it.next(); if (EingabenUeberpruefung.isGueltig(tfPOP3Port.getText(), EingabenUeberpruefung.musterPort) && EingabenUeberpruefung.isGueltig(tfSMTPPort.getText(), EingabenUeberpruefung.musterPort) && EingabenUeberpruefung.isGueltig(tfBenutzername.getText(), EingabenUeberpruefung.musterEmailBenutzername)) { if (neuesKonto == null) { neuesKonto = new EmailKonto(); } if (tfName.getText().trim().equals("")) { neuesKonto.setVorname(""); neuesKonto.setNachname(""); } else { teilStrings = tfName.getText().split(" "); if (teilStrings.length == 1) { neuesKonto.setVorname(tfName.getText().trim()); } else if (teilStrings.length >= 2) { neuesKonto.setNachname(teilStrings[teilStrings.length - 1]); for (int i = 0; i < teilStrings.length - 1; i++) tmp += teilStrings[i] + " "; neuesKonto.setVorname(tmp.trim()); } } neuesKonto.setBenutzername(tfBenutzername.getText()); neuesKonto.setPasswort(new String(tfPasswort.getPassword())); neuesKonto.setPop3port(tfPOP3Port.getText()); neuesKonto.setPop3server(tfPOP3Server.getText()); neuesKonto.setSmtpport(tfSMTPPort.getText()); neuesKonto.setSmtpserver(tfSMTPServer.getText()); neuesKonto.setEmailAdresse(tfEmailAdresse.getText()); ((EmailAnwendung) holeAnwendung()).getKontoListe().clear(); ((EmailAnwendung) holeAnwendung()).getKontoListe().put( neuesKonto.getBenutzername(), neuesKonto); speichern(); return true; } else { return false; } } private void speichern() { ((EmailAnwendung) holeAnwendung()).speichern(); } private void laden() { ((EmailAnwendung) holeAnwendung()).laden(); } /** * Ueberprueft Eingabefelder auf Richtigkeit * * @author Johannes Bade & Thomas Gerding * @param pruefRegel * @param feld */ public void gueltigkeitPruefen(JTextField feld, Pattern pruefRegel) { if (EingabenUeberpruefung.isGueltig(feld.getText(), pruefRegel)) { feld.setForeground(EingabenUeberpruefung.farbeRichtig); JTextField temp = new JTextField(); feld.setBorder(temp.getBorder()); } else { feld.setForeground(EingabenUeberpruefung.farbeFalsch); feld.setBorder(BorderFactory.createLineBorder( EingabenUeberpruefung.farbeFalsch, 1)); } } /** * Funktion die während der Eingabe überprüft ob die bisherige Eingabe einen * korrekten Wert darstellt. * * @author Johannes Bade & Thomas Gerding * @param pruefRegel * @param feld */ private boolean mailPruefen(JTextField feld) { String[] adressen; boolean fehler = false; if (!feld.getText().trim().equals("")) { adressen = feld.getText().split(","); for (int i = 0; i < adressen.length; i++) { if (!EingabenUeberpruefung.isGueltig(adressen[i].trim(), EingabenUeberpruefung.musterEmailAdresse)) { fehler = true; } } } if (!fehler) { feld.setForeground(EingabenUeberpruefung.farbeRichtig); feld.setBorder(null); } else { feld.setForeground(EingabenUeberpruefung.farbeFalsch); feld.setBorder(BorderFactory.createLineBorder( EingabenUeberpruefung.farbeFalsch, 1)); } return !fehler; } public void update(Observable arg0, Object arg1) { posteingangAktualisieren(); gesendeteAktualisieren(); if (arg1 instanceof Exception) { showMessageDialog(((Exception) arg1).getMessage()); } //Main.debug.println(arg1); if (arg1 == null || arg1.equals("") || arg1 instanceof Exception) { if (inFrVerfassen != null) { inFrVerfassen.setVisible(false); inFrVerfassen = null; } if (inFrAbholen != null) { inFrAbholen.getContentPane().remove(progressBar); inFrAbholen.setVisible(false); inFrAbholen = null; } } } }