/* * MailInfoComponent.java * * Created on den 26 september 2001, 17:46 */ package ip1.u9; import ip1.u7.b.*; import javax.mail.*; import java.io.*; import javax.mail.internet.*; /** 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 MailInfoComponent extends ip1.u7.b.MailInfoViewer { protected ServerInfo serverInfo; protected Message[] messages; private MailClientMessageHolder messageHolder = null; private MailReceiverGUI controller; private boolean changed = false; /** Skapar en ny MailInfoComponent */ public MailInfoComponent() { } /** Tar bort ett meddelande från MailInfoComponent * *@param message Meddelande som skall tas bort */ public void removeMail(Message message) { messageHolder.removeMail(message); } /** Sätter kontrollklassen * @param controller kontrollobjektet */ public void setController(MailReceiverGUI controller) { super.setController(controller); this.controller = controller; } /** Aktiveras när ett ServerInfoChangeEvent tagit emot. Sparar undan meddelanden som hör * till det gamla kontot, tar bort den visuella representationen av dessa e-postmeddelanden * från komponenten, samt läser in och visar gamla meddelanden som hör till det nya kontot. * @param serverInfo Det nya kontot. */ synchronized protected void serverInfoChanged(ServerInfo serverInfo) { clearContent(); if(serverInfo != null) { if(messageHolder != null) { saveMessages(); } this.serverInfo = serverInfo; readMessages(); controller.receiveMail(serverInfo); } } /** Läser in och visar lokalt lagrade e-postmeddelanden som hör till aktuellt konto. * Detta sker genom att det MailClientMessageHolder-objekt, som sköter hanteringen av * e-postmeddelanden internt inom MailInfoComponent, läses in. */ protected void readMessages() { try { File file = new File("./Messages/" + serverInfo.getAccountName() + "/Messages.msg"); if(file.exists()) { FileInputStream fis = new FileInputStream(file); ObjectInputStream ois = new ObjectInputStream(fis); messageHolder = (MailClientMessageHolder) ois.readObject(); messageHolder.addMessageChosenListener(new MessageChosenListener() { public void dispatchMessageChosen(MessageChosenEvent evt) { fireMessageChosen(evt); } }); messageHolder.showMessages(getMessagePanel()); ois.close(); fis.close(); } else { MailClientMessageHolder tmp = new MailClientMessageHolder(); tmp.addMessageChosenListener(new MessageChosenListener() { public void dispatchMessageChosen(MessageChosenEvent evt) { fireMessageChosen(evt); } }); messageHolder = tmp; } } catch(IOException e) { System.err.println(e.getMessage()); } catch(ClassNotFoundException e) { System.err.println(e.getMessage()); } } /** Sparar hämtade e-postmeddelanden som hör till aktuellt konto lokalt på hårddisken. * Detta sker genom att det MailClientMessageHolder-objekt, som sköter hanteringen av * e-postmeddelanden internt inom MailInfoComponent, sparas undan på hårddisken. */ protected void saveMessages() { try { File file = new File("./Messages/" + serverInfo.getAccountName() + "/"); if(! file.exists()) { file.mkdirs(); } file = new File(file, "Messages.msg"); if(!file.exists()) file.createNewFile(); FileOutputStream fos = new FileOutputStream(file); ObjectOutputStream oos = new ObjectOutputStream(fos); oos.writeObject(messageHolder); oos.close(); fos.close(); } catch(FileNotFoundException e) { System.err.println(e.getMessage()); } catch(IOException e) { System.err.println(e.getMessage()); } } /** Aktiveras när ett MailReceivedEvent tagit emot. mailReceived skickar meddelandena vidare * till det MailClientMessageHolder-objekt som sköter hanteringen av e-postmeddelanden internt * i MailInfoComponent. * * @param serverContent innehåller de meddelanden som skall visas */ synchronized protected void mailReceived(MailServerContent serverContent) { if(messageHolder != null && serverInfo.equals(serverContent.getServerInfo())) { if(messageHolder.mapMessages(serverContent.getMessages(), getMessagePanel())) { this.validate(); this.repaint(); changed = true; } } } /** Om meddelandemängden förändrats: utökats, minskats eller uppdaterats, * anropas saveMessages()-metoden */ public void stop() { if(changed) saveMessages(); } }