/*
* 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
}