MessageViewer.java
上传用户:dinglihq
上传日期:2013-02-04
资源大小:99958k
文件大小:7k
源码类别:

Java编程

开发平台:

Java

  1. /*
  2.  * @(#)MessageViewer.java 1.16 01/05/23
  3.  *
  4.  * Copyright 1997-2000 Sun Microsystems, Inc. All Rights Reserved.
  5.  *
  6.  * Redistribution and use in source and binary forms, with or without
  7.  * modification, are permitted provided that the following conditions
  8.  * are met:
  9.  * 
  10.  * - Redistributions of source code must retain the above copyright
  11.  *   notice, this list of conditions and the following disclaimer.
  12.  * 
  13.  * - Redistribution in binary form must reproduce the above copyright
  14.  *   notice, this list of conditions and the following disclaimer in the
  15.  *   documentation and/or other materials provided with the distribution.
  16.  * 
  17.  * Neither the name of Sun Microsystems, Inc. or the names of contributors
  18.  * may be used to endorse or promote products derived from this software
  19.  * without specific prior written permission.
  20.  * 
  21.  * This software is provided "AS IS," without a warranty of any kind. ALL
  22.  * EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES,
  23.  * INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A
  24.  * PARTICULAR PURPOSE OR NON-INFRINGEMENT, ARE HEREBY EXCLUDED. SUN AND
  25.  * ITS LICENSORS SHALL NOT BE LIABLE FOR ANY DAMAGES OR LIABILITIES
  26.  * SUFFERED BY LICENSEE AS A RESULT OF  OR RELATING TO USE, MODIFICATION
  27.  * OR DISTRIBUTION OF THE SOFTWARE OR ITS DERIVATIVES. IN NO EVENT WILL
  28.  * SUN OR ITS LICENSORS BE LIABLE FOR ANY LOST REVENUE, PROFIT OR DATA, OR
  29.  * FOR DIRECT, INDIRECT, SPECIAL, CONSEQUENTIAL, INCIDENTAL OR PUNITIVE
  30.  * DAMAGES, HOWEVER CAUSED AND REGARDLESS OF THE THEORY OF LIABILITY,
  31.  * ARISING OUT OF THE USE OF OR INABILITY TO USE SOFTWARE, EVEN IF SUN HAS
  32.  * BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
  33.  * 
  34.  * You acknowledge that Software is not designed, licensed or intended
  35.  * for use in the design, construction, operation or maintenance of any
  36.  * nuclear facility.
  37.  */
  38. /*
  39.  * @(#)MessageViewer.java 1.16 01/05/23
  40.  *
  41.  * Copyright (c) 1997-1998 by Sun Microsystems, Inc.
  42.  * All Rights Reserved.
  43.  */
  44. import java.awt.*;
  45. import java.awt.event.*;
  46. import javax.mail.*;
  47. import javax.activation.*;
  48. import java.util.Date;
  49. import java.io.IOException;
  50. import javax.swing.JPanel;
  51. /**
  52.  * @version 1.16, 01/05/23
  53.  * @author Christopher Cotton
  54.  * @author Bill Shannon
  55.  */
  56. public class MessageViewer extends JPanel implements CommandObject {
  57.     
  58.     Message displayed = null;
  59.     DataHandler dataHandler = null;
  60.     String verb = null;
  61.     Component mainbody;
  62.     TextArea headers;
  63.     public MessageViewer() {
  64. this(null);
  65.     }
  66.     
  67.     public MessageViewer(Message what) {
  68. // set our layout
  69. super(new GridBagLayout());
  70. // add the toolbar
  71. addToolbar();
  72. GridBagConstraints gb = new GridBagConstraints();
  73. gb.gridwidth = GridBagConstraints.REMAINDER;
  74. gb.fill = GridBagConstraints.BOTH;
  75. gb.weightx = 1.0;
  76. gb.weighty = 0.0;
  77. // add the headers
  78. headers = new TextArea("", 4, 80, TextArea.SCROLLBARS_NONE);
  79. headers.setEditable(false);
  80. add(headers, gb);
  81. // now display our message
  82. setMessage(what);
  83.     }
  84.     
  85.     /**
  86.      * sets the current message to be displayed in the viewer
  87.      */
  88.     public void setMessage(Message what) {
  89. displayed = what;
  90. if (mainbody != null)
  91.     remove(mainbody);
  92. if (what != null) {
  93.     loadHeaders();
  94.     mainbody = getBodyComponent();
  95. } else {
  96.     headers.setText("");
  97.     TextArea dummy = new TextArea("", 24, 80, TextArea.SCROLLBARS_NONE);
  98.     dummy.setEditable(false);
  99.     mainbody = dummy;
  100. }
  101. // add the main body
  102. GridBagConstraints gb = new GridBagConstraints();
  103. gb.gridwidth = GridBagConstraints.REMAINDER;
  104. gb.fill = GridBagConstraints.BOTH;
  105. gb.weightx = 1.0;
  106. gb.weighty = 1.0;
  107. add(mainbody, gb);
  108. invalidate();
  109. validate();
  110.     }
  111.     protected void addToolbar() {
  112. GridBagConstraints gb = new GridBagConstraints();
  113. gb.gridheight = 1;
  114. gb.gridwidth = 1;
  115. gb.fill = GridBagConstraints.NONE;
  116. gb.anchor = GridBagConstraints.WEST;
  117. gb.weightx = 0.0;
  118. gb.weighty = 0.0;
  119.    gb.insets = new Insets(4,4,4,4);
  120. // structure button
  121. gb.gridwidth = GridBagConstraints.REMAINDER; // only for the last one
  122. Button b = new Button("Structure");
  123. b.addActionListener( new StructureAction());
  124.   add(b, gb);
  125.     }
  126.     protected void loadHeaders() {
  127. // setup what we want in our viewer
  128. StringBuffer sb = new StringBuffer();
  129. // date
  130. sb.append("Date: ");
  131. try {
  132.     Date duh = displayed.getSentDate();
  133.     if (duh != null) {
  134. sb.append(duh.toString());
  135.     } else {
  136. sb.append("Unknown");
  137.     }
  138.     
  139.     sb.append("n");
  140.     // from
  141.     sb.append("From: ");
  142.     Address[] adds = displayed.getFrom();
  143.     if (adds != null && adds.length > 0) {
  144. sb.append(adds[0].toString());
  145.     }
  146.     sb.append("n");
  147.     // to
  148.     sb.append("To: ");
  149.     adds = displayed.getRecipients(Message.RecipientType.TO);
  150.     if (adds != null && adds.length > 0) {
  151. sb.append(adds[0].toString());
  152.     }
  153.     sb.append("n");
  154.     // subject
  155.     sb.append("Subject: ");
  156.     sb.append(displayed.getSubject());
  157.     
  158.     headers.setText(sb.toString());
  159. } catch (MessagingException me) {
  160.     headers.setText("");
  161. }
  162.     }
  163.     protected Component getBodyComponent() {
  164. //------------
  165. // now get a content viewer for the main type...
  166. //------------
  167. try {
  168.     DataHandler dh = displayed.getDataHandler();
  169.     CommandInfo ci = dh.getCommand("view");
  170.     if (ci == null) {
  171. throw new MessagingException("view command failed on: " +
  172.      displayed.getContentType());
  173.     }
  174.     Object bean = dh.getBean(ci);
  175.     if (bean instanceof Component) {
  176. return (Component)bean;
  177.     } else {
  178. throw new MessagingException("bean is not a component " +
  179.      bean.getClass().toString());
  180.     }
  181. } catch (MessagingException me) {
  182.     return new Label(me.toString());
  183. }
  184.     }
  185.     
  186.     /**
  187.      * the CommandObject method to accept our DataHandler
  188.      * @param dh the datahandler used to get the content
  189.      */
  190.     public void setCommandContext(String verb,
  191.   DataHandler dh) throws IOException {
  192. this.verb = verb;
  193. dataHandler = dh;
  194. Object o = dh.getContent();
  195. if (o instanceof Message) {
  196.     setMessage((Message)o);
  197. }
  198. else {
  199.     System.out.println( 
  200. "MessageViewer - content not a Message object, " + o);
  201.     if (o != null){
  202. System.out.println(o.getClass().toString());
  203.     }
  204. }
  205.     }
  206.     class StructureAction implements ActionListener {
  207. StringBuffer sb;
  208. public void actionPerformed(ActionEvent e) {
  209.     System.out.println("nnMessage Structure");
  210.     dumpPart("", displayed);
  211. }
  212. protected void dumpPart(String prefix, Part p) {
  213.     try {
  214. System.out.println(prefix + "----------------");
  215. System.out.println(prefix + 
  216.    "Content-Type: " + p.getContentType());
  217. System.out.println(prefix + 
  218.    "Class: " + p.getClass().toString());
  219.         
  220. Object o = p.getContent();
  221. if (o == null) {
  222.     System.out.println(prefix + "Content:  is null");
  223. } else {
  224.     System.out.println(prefix +
  225.        "Content: " + o.getClass().toString());
  226. }
  227. if (o instanceof Multipart) {
  228.     String newpref = prefix + "t";
  229.     Multipart mp = (Multipart)o;
  230.     int count = mp.getCount();
  231.     for (int i = 0; i < count; i++) {
  232. dumpPart(newpref, mp.getBodyPart(i));
  233.     }
  234. }
  235.     } catch (MessagingException e) {
  236. e.printStackTrace();
  237.     } catch (IOException ioex) {
  238. System.out.println("Cannot get content" + ioex.getMessage());
  239.     }
  240. }
  241.     }
  242. }