/* * MailClientMessageHolder.java * * Created on den 27 september 2001, 14:51 */ package ip1.u9; import javax.mail.*; import javax.swing.*; import javax.swing.event.*; import java.io.*; import java.util.*; import ip1.u7.b.*; import java.awt.*; /** MailClientMessageHolder är en samlingsklass, speciellt avpassad för att hålla och hantera * MailClientMessage-objekt, som i sin tur innehåller e-postmeddelanden. * MailClientMessageHolder arbetar utåt(mot MailInfoComponent) med Javamail Message-objekt, * men lagrar och visar MailClientMessage-objekt. * * @author Henrik Johansson, DS80 * @version ht2001 */ public class MailClientMessageHolder implements Serializable { private SortedSet messages; transient private MailClientMessage oldMailClientMessage; transient protected EventListenerList messageChosenListeners; /** Skapar ett nytt MailClientMessageHolder */ public MailClientMessageHolder() { messages = new TreeSet(); messageChosenListeners = new EventListenerList(); } /** Tar bort ett meddelande från samlingen * *@param message Det Message-objekt som motsvaras av det MailClientMessage-objekt som * skall tas bort. */ public void removeMail(Message message) { Iterator iter = messages.iterator(); MailClientMessage tmp = null; while(iter.hasNext()) { if((tmp = (MailClientMessage) iter.next()).equals(message)) { messages.remove(tmp); tmp.setVisible(false); fireMessageChosen(new MessageChosenEvent(null, null)); break; } } } /** Matchar Javamail Message-objekt mot de i samlingen lagrade MailClientMessage-objekten. * Om matchningen lyckas uppdateras MailClientMessage-objektet med motsvarande Javamailmessage, * annars skapas och läggs ett nytt MailClientMessage-objekt till samlingen, det nya * MailClientMessage-objektet läggs till den JPanel som skickas med in i mapMessages. * *@param msgs De Javamail Message-objekt som skall matchas. *@param parent Den JPanel som skall visa upp eventuella nya MailClientMessage-objekt. */ protected boolean mapMessages(Message[] msgs, JPanel parent) { for(int i = 0; i < msgs.length; i++) { Iterator iter = messages.iterator(); MailClientMessage msg = null; boolean notContained = true; while(iter.hasNext() && notContained) { msg = (MailClientMessage) iter.next(); if(msg.equals(msgs[i])) { msg.setMessage(msgs[i]); notContained = false; } } if(notContained) { MailClientMessage mcm = new MailClientMessage(msgs[i]); messages.add(mcm); mcm.addMessageChosenListener(new MessageChosenListener() { public void dispatchMessageChosen(MessageChosenEvent evt) { ((MailClientMessage) evt.getInfo()).setChosen(true); if(oldMailClientMessage != null) oldMailClientMessage.setChosen(false); oldMailClientMessage = (MailClientMessage) evt.getInfo(); fireMessageChosen(evt); } }); parent.add(mcm); } } return true; } /** Lägger in alla MailClientMessage-objekt i samlingen i den JPanel som skickas med * *@param parent Den JPanel som skall visa upp MailClientMessage-objekten i samlingen */ protected void showMessages(JPanel parent) { Iterator iter = messages.iterator(); while(iter.hasNext()) { MailClientMessage tmp = (MailClientMessage) iter.next(); tmp.addMessageChosenListener(new MessageChosenListener() { public void dispatchMessageChosen(MessageChosenEvent evt) { ((MailClientMessage) evt.getInfo()).setChosen(true); if(oldMailClientMessage != null) oldMailClientMessage.setChosen(false); oldMailClientMessage = (MailClientMessage) evt.getInfo(); fireMessageChosen(evt); } }); parent.add(tmp); } parent.validate(); parent.repaint(); } /** Låter andra prenumerera på MessageChosenEvents från MailClientMessage-objekten i samlingen. * @param listener prenumerant */ public void addMessageChosenListener(MessageChosenListener listener) { if(messageChosenListeners == null) messageChosenListeners = new EventListenerList(); messageChosenListeners.add(MessageChosenListener.class, listener); } /** Låter andra avlägsna prenumeration på MessageChosenEvents från MailClientMessage-objekten i samlingen. * @param listener prenumerant */ public void removeMessageChosenListener(MessageChosenListener listener) { messageChosenListeners.remove(MessageChosenListener.class, listener); } /** Vidaresänder MessageChosenEvents till eventuella prenumeranter * @param evt det Event som skall skickas vidare till prenumeranterna */ protected void fireMessageChosen(MessageChosenEvent evt) { Object[] listeners = messageChosenListeners.getListenerList(); // loop through each listener and pass on the event if needed for(int i = 0; i < listeners.length; i++) { if (listeners[i] == MessageChosenListener.class) { // pass the event to the listeners event dispatch method ((MessageChosenListener)listeners[i + 1]).dispatchMessageChosen(evt); } } } }