/* * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * - Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * - Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * - Neither the name of Oracle nor the names of its * contributors may be used to endorse or promote products derived * from this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ import java.awt.*; import java.awt.event.*; import javax.mail.*; import javax.activation.*; import java.util.Date; import java.io.IOException; import javax.swing.JPanel; /** * @author Christopher Cotton * @author Bill Shannon */ public class MessageViewer extends JPanel implements CommandObject { Message displayed = null; DataHandler dataHandler = null; String verb = null; Component mainbody; TextArea headers; public MessageViewer() { this(null); } public MessageViewer(Message what) { // set our layout super(new GridBagLayout()); // add the toolbar addToolbar(); GridBagConstraints gb = new GridBagConstraints(); gb.gridwidth = GridBagConstraints.REMAINDER; gb.fill = GridBagConstraints.BOTH; gb.weightx = 1.0; gb.weighty = 0.0; // add the headers headers = new TextArea("", 4, 80, TextArea.SCROLLBARS_NONE); headers.setEditable(false); add(headers, gb); // now display our message setMessage(what); } /** * sets the current message to be displayed in the viewer */ public void setMessage(Message what) { displayed = what; if (mainbody != null) remove(mainbody); if (what != null) { loadHeaders(); mainbody = getBodyComponent(); } else { headers.setText(""); TextArea dummy = new TextArea("", 24, 80, TextArea.SCROLLBARS_NONE); dummy.setEditable(false); mainbody = dummy; } // add the main body GridBagConstraints gb = new GridBagConstraints(); gb.gridwidth = GridBagConstraints.REMAINDER; gb.fill = GridBagConstraints.BOTH; gb.weightx = 1.0; gb.weighty = 1.0; add(mainbody, gb); invalidate(); validate(); } protected void addToolbar() { GridBagConstraints gb = new GridBagConstraints(); gb.gridheight = 1; gb.gridwidth = 1; gb.fill = GridBagConstraints.NONE; gb.anchor = GridBagConstraints.WEST; gb.weightx = 0.0; gb.weighty = 0.0; gb.insets = new Insets(4,4,4,4); // structure button gb.gridwidth = GridBagConstraints.REMAINDER; // only for the last one Button b = new Button("Structure"); b.addActionListener( new StructureAction()); add(b, gb); } protected void loadHeaders() { // setup what we want in our viewer StringBuffer sb = new StringBuffer(); // date sb.append("Date: "); try { Date duh = displayed.getSentDate(); if (duh != null) { sb.append(duh.toString()); } else { sb.append("Unknown"); } sb.append("\n"); // from sb.append("From: "); Address[] adds = displayed.getFrom(); if (adds != null && adds.length > 0) { sb.append(adds[0].toString()); } sb.append("\n"); // to sb.append("To: "); adds = displayed.getRecipients(Message.RecipientType.TO); if (adds != null && adds.length > 0) { sb.append(adds[0].toString()); } sb.append("\n"); // subject sb.append("Subject: "); sb.append(displayed.getSubject()); headers.setText(sb.toString()); } catch (MessagingException me) { headers.setText(""); } } protected Component getBodyComponent() { //------------ // now get a content viewer for the main type... //------------ try { DataHandler dh = displayed.getDataHandler(); CommandInfo ci = dh.getCommand("view"); if (ci == null) { throw new MessagingException("view command failed on: " + displayed.getContentType()); } Object bean = dh.getBean(ci); if (bean instanceof Component) { return (Component)bean; } else { throw new MessagingException("bean is not a component " + bean.getClass().toString()); } } catch (MessagingException me) { return new Label(me.toString()); } } /** * the CommandObject method to accept our DataHandler * @param dh the datahandler used to get the content */ public void setCommandContext(String verb, DataHandler dh) throws IOException { this.verb = verb; dataHandler = dh; Object o = dh.getContent(); if (o instanceof Message) { setMessage((Message)o); } else { System.out.println( "MessageViewer - content not a Message object, " + o); if (o != null){ System.out.println(o.getClass().toString()); } } } class StructureAction implements ActionListener { StringBuffer sb; public void actionPerformed(ActionEvent e) { System.out.println("\n\nMessage Structure"); dumpPart("", displayed); } protected void dumpPart(String prefix, Part p) { try { System.out.println(prefix + "----------------"); System.out.println(prefix + "Content-Type: " + p.getContentType()); System.out.println(prefix + "Class: " + p.getClass().toString()); Object o = p.getContent(); if (o == null) { System.out.println(prefix + "Content: is null"); } else { System.out.println(prefix + "Content: " + o.getClass().toString()); } if (o instanceof Multipart) { String newpref = prefix + "\t"; Multipart mp = (Multipart)o; int count = mp.getCount(); for (int i = 0; i < count; i++) { dumpPart(newpref, mp.getBodyPart(i)); } } } catch (MessagingException e) { e.printStackTrace(); } catch (IOException ioex) { System.out.println("Cannot get content" + ioex.getMessage()); } } } }