/* * MessagesHolder.java * * Created on den 13 september 2001, 20:30 */ package ip1.u7.b; import javax.swing.event.EventListenerList; import javax.mail.*; import javax.swing.JPanel; /** Visar vilka e-postmeddelanden som tagits emot och * låter användaren välja ett sådant * * @author Henrik Johansson, DS80 * @version ht2001 */ public class MailInfoViewer extends JPanel { /** hyser prenumeranter på MessageChosenEvents */ protected EventListenerList messageChosenListeners; private MessageInfo messageInfo = null; /** Creates new form MessagesHolder */ public MailInfoViewer() { messageChosenListeners = new EventListenerList(); initComponents(); } /** Sätter kontrollklassen * @param controller kontrollobjektet */ public void setController(MailReceiverGUI controller) { // prenumererar på ServerInfoChangeEvents controller.addServerInfoChangeListener(new ServerInfoChangeListener() { public void dispatchServerInfoChange(ServerInfoChangeEvent evt) { serverInfoChanged(evt.getServerInfo()); } }); // prenumererar på MailReceivedEvents controller.addMailReceivedListener(new MailReceivedListener() { public void dispatchMailReceived(MailReceivedEvent evt) { mailReceived(evt.getMailServerContent()); } }); } /** Aktiveras när ett ServerInfoChangeEvent tagit emot * @param serverInfo information om servern */ protected void serverInfoChanged(ServerInfo serverInfo) { clearContent(); } /** Aktiveras när ett MailReceivedEvent tagit emot * @param serverContent innehåller de meddelanden som skall visas */ protected void mailReceived(MailServerContent serverContent) { setMessages(serverContent.getMessages()); } /** Tar bort alla e-postmeddelanden från komponenten */ protected void clearContent() { messageInfoPanel.removeAll(); validate(); this.repaint(); } /** Lägger till meddelanden till komponenten */ private void setMessages(Message[] messages) { for(int i = 0; i < messages.length; i++) { MessageInfo mi = new MessageInfo(messages[i]); // prenumererar på MessageChosenEvent från meddelande mi.addMessageChosenListener(new MessageChosenAdapter() { public void dispatchMessageChosen(MessageChosenEvent evt) { if(messageInfo != null) messageInfo.setChosen(false); messageInfo = (MessageInfo) evt.getInfo(); fireMessageChosen(evt); } }); addMessage(mi); } validate(); } /** Lägger till ett meddelande till komponenten * @param message meddelandet som skall läggas till */ protected void addMessage(JPanel message) { messageInfoPanel.add(message); } /** returnerar den JPanel som meddelanden läggs in i * @return Panel att lägga meddelanden i */ protected JPanel getMessagePanel() { return messageInfoPanel; } /** Låter andra prenumerera på MessageChosenEvents från de meddelanden komponenten hyser. * @param listener prenumerant */ public void addMessageChosenListener(MessageChosenListener listener) { messageChosenListeners.add(MessageChosenListener.class, listener); } /** Låter andra avlägsna prenumeration på MessageChosenEvents från de meddelanden komponenten hyser. * @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(); int numListeners = listeners.length; for(int i = 0; i < numListeners; i++) { if (listeners[i] == MessageChosenListener.class) { ((MessageChosenListener)listeners[i + 1]).dispatchMessageChosen(evt); } } } /** alla komponenter skall ha en startmetod */ public void start() {} /** alla komponenter skall ha en stopmetod */ public void stop() {} /** 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 jScrollPane1 = new javax.swing.JScrollPane(); messageInfoPanel = new javax.swing.JPanel(); setLayout(new java.awt.BorderLayout()); setBackground(java.awt.Color.white); messageInfoPanel.setLayout(new javax.swing.BoxLayout(messageInfoPanel, javax.swing.BoxLayout.Y_AXIS)); messageInfoPanel.setBackground(java.awt.Color.white); jScrollPane1.setViewportView(messageInfoPanel); add(jScrollPane1, java.awt.BorderLayout.CENTER); }//GEN-END:initComponents // Variables declaration - do not modify//GEN-BEGIN:variables private javax.swing.JScrollPane jScrollPane1; private javax.swing.JPanel messageInfoPanel; // End of variables declaration//GEN-END:variables }