/* * MessageContentViewer.java * * Created on den 14 september 2001, 18:54 */ package ip1.u9; import javax.mail.*; import java.io.*; import ip1.u7.b.*; import javax.swing.*; import javax.mail.internet.MimeMultipart; import javax.mail.internet.MimeBodyPart; import ip1.u9.util.*; /** Komponent för att visa upp ett e-postmeddelande * * @author Henrik Johansson, DS80 * @version ht2001 */ public class MailContentComponent extends javax.swing.JPanel implements MessageContent{ protected JFileChooser chooser = null; /** Skapar en ny MessageContentViewer */ public MailContentComponent() { initComponents(); saveAttachmentButton.setEnabled(false); } /** Sätter kontrollklassen.Prenumererar på MessageChosenEvents för att få veta vilka * meddelanden som skall visas upp. Prenumererar på ServerInfoChangeEvents för att * kunna rensa komponenten när användaren byter konto. * * @param controller Kontrollobjektet */ public void setController(MailReceiverGUI controller) { controller.addMessageChosenListener(new MessageChosenListener() { public void dispatchMessageChosen(MessageChosenEvent evt) { showContent(evt.getMessage()); } }); controller.addServerInfoChangeListener(new ServerInfoChangeListener() { public void dispatchServerInfoChange(ServerInfoChangeEvent evt) { clearContent(); } }); } /** Visar upp ett e-postmeddelande i komponenten. Visar adresaterna, avsändare, ämnesrad, * innehåll samt eventuella attachments. * *@param message e-postmeddelandet som skall visas. */ public void showContent(Message message) { try { if(message != null) { MessageWrap mw = MessageWrapFactory.getMessageWrap(message, MessageType.SHOW); messageContent.setText(mw.getContent()); messageSubject.setText(mw.getSubject()); messageTo.setModel(new DefaultComboBoxModel(mw.getRecipients())); attachmentsBox.setModel(new DefaultComboBoxModel(mw.getAttachments())); messageFrom.setModel(new DefaultComboBoxModel(mw.getFrom())); } else clearContent(); } catch(IOException e) { System.err.println(e.getMessage()); } catch(MessagingException e) { System.err.println(e.getMessage()); } } /** Tömmer komponenten*/ public void clearContent() { messageContent.setText(""); ((DefaultComboBoxModel) messageTo.getModel()).removeAllElements(); messageSubject.setText(""); ((DefaultComboBoxModel) messageFrom.getModel()).removeAllElements(); ((DefaultComboBoxModel) attachmentsBox.getModel()).removeAllElements(); } /** Anropas av komponentens kontrollklass vid uppstart. */ public void start() {} /** Anropas av komponentens kontrollklass när programmet avslutas. */ 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 jLabel1 = new javax.swing.JLabel(); jLabel2 = new javax.swing.JLabel(); jLabel3 = new javax.swing.JLabel(); messageSubject = new javax.swing.JTextField(); jScrollPane2 = new javax.swing.JScrollPane(); messageContent = new javax.swing.JEditorPane(); messageTo = new javax.swing.JComboBox(); messageFrom = new javax.swing.JComboBox(); attachmentPanel = new javax.swing.JPanel(); attachmentsBox = new javax.swing.JComboBox(); saveAttachmentButton = new javax.swing.JButton(); attachments = new javax.swing.JLabel(); setLayout(new java.awt.GridBagLayout()); java.awt.GridBagConstraints gridBagConstraints1; setBackground(java.awt.Color.white); jLabel1.setText("\u00c4mne:"); gridBagConstraints1 = new java.awt.GridBagConstraints(); gridBagConstraints1.gridx = 0; gridBagConstraints1.gridy = 3; gridBagConstraints1.insets = new java.awt.Insets(7, 5, 0, 0); gridBagConstraints1.anchor = java.awt.GridBagConstraints.EAST; add(jLabel1, gridBagConstraints1); jLabel2.setText("Fr\u00e5n:"); gridBagConstraints1 = new java.awt.GridBagConstraints(); gridBagConstraints1.gridx = 0; gridBagConstraints1.gridy = 1; gridBagConstraints1.insets = new java.awt.Insets(2, 5, 0, 0); gridBagConstraints1.anchor = java.awt.GridBagConstraints.EAST; add(jLabel2, gridBagConstraints1); jLabel3.setText("Till:"); jLabel3.setBorder(new javax.swing.border.EmptyBorder(new java.awt.Insets(1, 1, 1, 1))); gridBagConstraints1 = new java.awt.GridBagConstraints(); gridBagConstraints1.gridx = 0; gridBagConstraints1.gridy = 0; gridBagConstraints1.insets = new java.awt.Insets(5, 5, 0, 0); gridBagConstraints1.anchor = java.awt.GridBagConstraints.EAST; add(jLabel3, gridBagConstraints1); messageSubject.setEditable(false); messageSubject.setPreferredSize(new java.awt.Dimension(4, 26)); messageSubject.setBorder(new javax.swing.border.EtchedBorder()); gridBagConstraints1 = new java.awt.GridBagConstraints(); gridBagConstraints1.gridx = 1; gridBagConstraints1.gridy = 3; gridBagConstraints1.fill = java.awt.GridBagConstraints.HORIZONTAL; gridBagConstraints1.insets = new java.awt.Insets(7, 5, 0, 5); gridBagConstraints1.weightx = 1.0; add(messageSubject, gridBagConstraints1); messageContent.setEditable(false); jScrollPane2.setViewportView(messageContent); gridBagConstraints1 = new java.awt.GridBagConstraints(); gridBagConstraints1.gridx = 0; gridBagConstraints1.gridy = 4; gridBagConstraints1.gridwidth = 2; gridBagConstraints1.fill = java.awt.GridBagConstraints.BOTH; gridBagConstraints1.insets = new java.awt.Insets(10, 5, 5, 5); gridBagConstraints1.weightx = 1.0; gridBagConstraints1.weighty = 1.0; add(jScrollPane2, gridBagConstraints1); messageTo.setBorder(new javax.swing.border.EmptyBorder(new java.awt.Insets(1, 1, 1, 1))); gridBagConstraints1 = new java.awt.GridBagConstraints(); gridBagConstraints1.gridx = 1; gridBagConstraints1.gridy = 0; gridBagConstraints1.fill = java.awt.GridBagConstraints.HORIZONTAL; gridBagConstraints1.insets = new java.awt.Insets(5, 5, 0, 5); gridBagConstraints1.weightx = 1.0; add(messageTo, gridBagConstraints1); messageFrom.setBorder(new javax.swing.border.EmptyBorder(new java.awt.Insets(1, 1, 1, 1))); gridBagConstraints1 = new java.awt.GridBagConstraints(); gridBagConstraints1.gridx = 1; gridBagConstraints1.gridy = 1; gridBagConstraints1.fill = java.awt.GridBagConstraints.HORIZONTAL; gridBagConstraints1.insets = new java.awt.Insets(2, 5, 0, 5); gridBagConstraints1.weightx = 1.0; add(messageFrom, gridBagConstraints1); attachmentPanel.setLayout(new java.awt.GridBagLayout()); java.awt.GridBagConstraints gridBagConstraints2; attachmentPanel.setBackground(java.awt.Color.white); attachmentsBox.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { attachmentsBoxActionPerformed(evt); } }); gridBagConstraints2 = new java.awt.GridBagConstraints(); gridBagConstraints2.fill = java.awt.GridBagConstraints.HORIZONTAL; gridBagConstraints2.weightx = 1.0; attachmentPanel.add(attachmentsBox, gridBagConstraints2); saveAttachmentButton.setText("Spara"); saveAttachmentButton.setPreferredSize(new java.awt.Dimension(69, 26)); saveAttachmentButton.setMaximumSize(new java.awt.Dimension(69, 26)); saveAttachmentButton.setMinimumSize(new java.awt.Dimension(69, 26)); saveAttachmentButton.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { saveAttachmentButtonActionPerformed(evt); } }); gridBagConstraints2 = new java.awt.GridBagConstraints(); attachmentPanel.add(saveAttachmentButton, gridBagConstraints2); gridBagConstraints1 = new java.awt.GridBagConstraints(); gridBagConstraints1.gridx = 1; gridBagConstraints1.gridy = 2; gridBagConstraints1.fill = java.awt.GridBagConstraints.HORIZONTAL; gridBagConstraints1.insets = new java.awt.Insets(2, 5, 0, 5); gridBagConstraints1.weightx = 1.0; add(attachmentPanel, gridBagConstraints1); attachments.setText("Attachments:"); gridBagConstraints1 = new java.awt.GridBagConstraints(); gridBagConstraints1.gridx = 0; gridBagConstraints1.gridy = 2; gridBagConstraints1.insets = new java.awt.Insets(2, 5, 0, 0); add(attachments, gridBagConstraints1); }//GEN-END:initComponents private void attachmentsBoxActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_attachmentsBoxActionPerformed saveAttachmentButton.setEnabled(true); }//GEN-LAST:event_attachmentsBoxActionPerformed // Sparar det attachment som användaren har valt private void saveAttachmentButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_saveAttachmentButtonActionPerformed try { Attachment attachment = (Attachment) attachmentsBox.getSelectedItem(); if(chooser == null) { // Om det inte finns någon instans av filväljaren skapas en sådan här. chooser = new JFileChooser(); chooser.setApproveButtonText("Spara Attachment"); chooser.setCurrentDirectory(new File("./")); chooser.setName(attachment.getPart().getFileName()); } int returnVal = chooser.showSaveDialog(this); if(returnVal == JFileChooser.APPROVE_OPTION) { File file = chooser.getSelectedFile(); if(file.exists()) System.out.println(file + ": Filen finns redan"); else { //sparar attachment som en fil file.createNewFile(); FileOutputStream fos = new FileOutputStream(file); BufferedOutputStream bos = new BufferedOutputStream(fos); BufferedInputStream bis = new BufferedInputStream(attachment.getPart().getInputStream()); byte[] bytes = new byte[512]; int i = 0; while((i = bis.read(bytes)) != -1) { bos.write(bytes, 0, i); } bos.flush(); } } } catch(MessagingException e) { System.err.println(e.getMessage()); } catch(IOException e) { System.err.println(e.getMessage()); } }//GEN-LAST:event_saveAttachmentButtonActionPerformed // Variables declaration - do not modify//GEN-BEGIN:variables private javax.swing.JLabel jLabel1; private javax.swing.JLabel jLabel2; private javax.swing.JLabel jLabel3; private javax.swing.JTextField messageSubject; private javax.swing.JScrollPane jScrollPane2; private javax.swing.JEditorPane messageContent; private javax.swing.JComboBox messageTo; private javax.swing.JComboBox messageFrom; private javax.swing.JPanel attachmentPanel; private javax.swing.JComboBox attachmentsBox; private javax.swing.JButton saveAttachmentButton; private javax.swing.JLabel attachments; // End of variables declaration//GEN-END:variables }