/* * MailReceiverGUI.java * * Created on den 13 september 2001, 11:24 */ package ip1.u7.b; import javax.mail.*; import java.io.*; import javax.swing.event.EventListenerList; import javax.swing.JPanel; import java.awt.Component; /** Kontrollklass, och behållare för komponenter och MailTask-objekt. * prenumererar på Events från samtliga komponenter. andra komponenter kan sedan * prenumerera på dessa i sin tur. MailTask-objekt ber denna kontrollklass att vidarebefodra * sina uppgifter till rätt komponent.
* MailReceiverGUI håller sina komponenter enligt skissen nedan.
* ____________________________________
* | | |
* | ServerInfoPanel | MailInfoViewer |
* |_________________|________________|
* | |
* | MessageContent |
* |__________________________________|

* MailTask-objekten ligger i en verktygslist. * * @author Henrik Johansson, DS80 * @version ht2001 */ public class MailReceiverGUI extends javax.swing.JFrame { private MailReceiver controller = null; private Message[] messages; private MailInfoViewer messageInfoViewer = null; private MessageContent messageContentViewer = null; private ServerInfoPanel serverInfoPanel = null; private MailReceiveComponent mailReceiver = null; private EventListenerList messageChosenListeners; private EventListenerList serverInfoChangeListeners; private EventListenerList mailReceivedListeners; /** Creates new form MailReceiverGUI * @param miv MailInfo-komponenten * @param mcv MessageContent-komponenten * @param sip ServerInfo-komponenten * @param mrc MailReceive-komponenten */ public MailReceiverGUI(MailInfoViewer miv, MessageContent mcv, ServerInfoPanel sip, MailReceiveComponent mrc) { messageChosenListeners = new EventListenerList(); serverInfoChangeListeners = new EventListenerList(); mailReceivedListeners = new EventListenerList(); initComponents(); setMailInfoComponent(miv); setMessageContentViewer(mcv); setServerInfoViewer(sip); setReceiveMail(mrc); pack(); this.setSize(640, 480); show(); } //////////////////////////////////////////////////////////////////// // Initierar mailkomponenterna private void setMessageContentViewer(MessageContent mcv) { messageContentViewer = mcv; mcv.setController(this); jSplitPane1.setRightComponent((Component) messageContentViewer); } private void setServerInfoViewer(ServerInfoPanel sip) { serverInfoPanel = sip; sip.setController(this); sip.addServerInfoChangeListener(new ServerInfoChangeListener() { public void dispatchServerInfoChange(ServerInfoChangeEvent evt) { fireServerInfoChange(evt); } }); jSplitPane2.setLeftComponent((JPanel) serverInfoPanel); } private void setReceiveMail(MailReceiveComponent rm) { mailReceiver = rm; rm.setController(this); rm.addMailReceivedListener(new MailReceivedListener() { public void dispatchMailReceived(MailReceivedEvent evt) { fireMailReceived(evt); } }); } private void setMailInfoComponent(MailInfoViewer miv) { messageInfoViewer = miv; miv.setController(this); miv.addMessageChosenListener(new MessageChosenListener() { public void dispatchMessageChosen(MessageChosenEvent evt) { fireMessageChosen(evt); } }); jSplitPane2.setRightComponent(messageInfoViewer); } //////////////////////////////////////////////////////////////////////////////// // Hantering av komponenternas Events. En komponent som vill ta emot // events från andra komponenter registrerar sig som lyssnare här hos MailReceiverGUI. // MailReceiverGUI lyssnar efter events från samtliga komponenter och skickar dessa // vidare till de komponenter som anmält sig för detta. På detta sätt undviks att // komponenterna är direkt kopplade till varandra. /** Lyssnare som vill prenumerera på MailReceivedEvents använder denna funktion * * @param listener Lyssnaren */ final public void addMailReceivedListener(MailReceivedListener listener) { mailReceivedListeners.add(MailReceivedListener.class, listener); } /** Lyssnare som vill säga upp sin prenumeration på MailReceivedEvents använder denna funktion * * @param listener Lyssnaren */ public void removeMailReceivedListener(MailReceivedListener listener) { mailReceivedListeners.remove(MailReceivedListener.class, listener); } private void fireMailReceived(MailReceivedEvent evt) { Object[] listeners = mailReceivedListeners.getListenerList(); int numListeners = listeners.length; for(int i = 0; i < numListeners; i++) { if (listeners[i] == MailReceivedListener.class) { ((MailReceivedListener)listeners[i + 1]).dispatchMailReceived(evt); } } } /** Lyssnare som vill prenumerera på ServerInfoChangeEvents använder denna funktion * * @param listener Lyssnaren */ final public void addServerInfoChangeListener(ServerInfoChangeListener listener) { serverInfoChangeListeners.add(ServerInfoChangeListener.class, listener); } /** Lyssnare som vill säga upp sin prenumeration på ServerInfoChangeEvents använder denna funktion * * @param listener Lyssnaren */ public void removeServerInfoChangedListener(ServerInfoChangeListener listener) { serverInfoChangeListeners.remove(ServerInfoChangeListener.class, listener); } private void fireServerInfoChange(ServerInfoChangeEvent evt) { Object[] listeners = serverInfoChangeListeners.getListenerList(); int numListeners = listeners.length; for(int i = 0; i < numListeners; i++) { if (listeners[i] == ServerInfoChangeListener.class) { ((ServerInfoChangeListener)listeners[i + 1]).dispatchServerInfoChange(evt); } } } /** Lyssnare som vill prenumerera på MessageChosenEvents använder denna funktion * * @param listener Lyssnaren */ final public void addMessageChosenListener(MessageChosenListener listener) { messageChosenListeners.add(MessageChosenListener.class, listener); } /** Lyssnare som vill säga upp sin prenumeration på MessageChosenEvents använder denna funktion * * @param listener Lyssnaren */ public void removeMessageChosenListener(MessageChosenListener listener) { messageChosenListeners.remove(MessageChosenListener.class, listener); } private void fireMessageChosen(MessageChosenEvent evt) { Object[] listeners = messageChosenListeners.getListenerList(); int numListeners = listeners.length; for(int i = 0; i < numListeners; i++) { if (listeners[i] == MessageChosenListener.class) { ((MessageChosenListener)listeners[i + 1]).dispatchMessageChosen(evt); } } } /////////////////////////////////////////////////////////////////////////////////// /** Lägger till ny mailtask till verktygslisten * * @param mt MailTask-objekt att lägga till */ public void addMailTask(MailTask mt) { toolBar.add(mt); toolBar.validate(); } /** * skickar begäran om att hämta mail vidare till mailhämtarkomponenten. * * @param si ServerInfo-objektet innehåller information om den server som skall användas */ public void receiveMail(ServerInfo si) { MailServerContent msc = new MailServerContent(si); mailReceiver.receiveMail(msc); } /** * stoppar alla komponenter genom att anropa dem med stop(). */ protected void stopComponents() { messageInfoViewer.stop(); messageContentViewer.stop(); serverInfoPanel.stop(); mailReceiver.stop(); } /** * startar alla komponenter genom att anropa dem med start(). */ protected void startComponents() { messageInfoViewer.start(); messageContentViewer.start(); serverInfoPanel.start(); mailReceiver.start(); } /** Avslutar programmet. stoppar först alla komponenter så attde får em chans att * spara undan och ellr städa upp efter sig */ public void exit() { stopComponents(); System.exit(0); } /** This method is called from within the constructor to * initialize the form. * WARNING: Do NOT modify this code. The content of this method is * always regenerated by the Form Editor. */ private void initComponents() {//GEN-BEGIN:initComponents toolBar = new javax.swing.JToolBar(); jSplitPane1 = new javax.swing.JSplitPane(); jSplitPane2 = new javax.swing.JSplitPane(); setTitle("MailClient"); addWindowListener(new java.awt.event.WindowAdapter() { public void windowClosing(java.awt.event.WindowEvent evt) { exitForm(evt); } }); getContentPane().add(toolBar, java.awt.BorderLayout.NORTH); jSplitPane1.setDividerSize(3); jSplitPane1.setOrientation(javax.swing.JSplitPane.VERTICAL_SPLIT); jSplitPane2.setDividerSize(3); jSplitPane1.setLeftComponent(jSplitPane2); getContentPane().add(jSplitPane1, java.awt.BorderLayout.CENTER); pack(); }//GEN-END:initComponents /** Exit the Application */ private void exitForm(java.awt.event.WindowEvent evt) {//GEN-FIRST:event_exitForm exit(); }//GEN-LAST:event_exitForm // Variables declaration - do not modify//GEN-BEGIN:variables private javax.swing.JToolBar toolBar; private javax.swing.JSplitPane jSplitPane1; private javax.swing.JSplitPane jSplitPane2; // End of variables declaration//GEN-END:variables }