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

Java编程

开发平台:

Java

  1. /*
  2.  * @(#)MultipartViewer.java 1.14 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. import java.awt.*;
  39. import java.awt.event.*;
  40. import java.io.*;
  41. import java.beans.*;
  42. import javax.activation.*;
  43. import javax.mail.*;
  44. import javax.swing.JPanel;
  45. /**
  46.  * A Viewer Bean for the type multipart/mixed
  47.  *
  48.  * @version 1.14, 01/05/23
  49.  * @author Christopher Cotton
  50.  */
  51. public class MultipartViewer extends JPanel implements CommandObject {
  52.     
  53.     protected DataHandler dh = null;
  54.     protected String verb = null;
  55.     
  56.     public MultipartViewer() {
  57. super(new GridBagLayout());
  58.     }
  59.     
  60.     public void setCommandContext(String verb, DataHandler dh) throws IOException {
  61. this.verb = verb;
  62. this.dh = dh;
  63. // get the content, and hope it is a Multipart Object
  64. Object content = dh.getContent();
  65. if (content instanceof Multipart) {
  66.     setupDisplay((Multipart)content);
  67. } else {
  68.     setupErrorDisplay(content);
  69. }
  70.     }
  71.     protected void setupDisplay(Multipart mp) {
  72. // we display the first body part in a main frame on the left, and then
  73. // on the right we display the rest of the parts as attachments
  74. GridBagConstraints gc = new GridBagConstraints();
  75. gc.gridheight = GridBagConstraints.REMAINDER;
  76. gc.fill = GridBagConstraints.BOTH;
  77. gc.weightx = 1.0;
  78. gc.weighty = 1.0;
  79. // get the first part
  80. try {
  81.     BodyPart bp = mp.getBodyPart(0);
  82.     Component comp = getComponent(bp);
  83.     add(comp, gc);
  84.     
  85. } catch (MessagingException me) {
  86.     add(new Label(me.toString()), gc);
  87. }
  88. // see if there are more than one parts
  89. try {
  90.     int count = mp.getCount();
  91.     // setup how to display them
  92.     gc.gridwidth = GridBagConstraints.REMAINDER;
  93.     gc.gridheight = 1;
  94.     gc.fill = GridBagConstraints.NONE;
  95.     gc.anchor = GridBagConstraints.NORTH;
  96.     gc.weightx = 0.0;
  97.     gc.weighty = 0.0;
  98.     gc.insets = new Insets(4,4,4,4);
  99.     // for each one we create a button with the content type
  100.     for(int i = 1; i < count; i++) { // we skip the first one 
  101. BodyPart curr = mp.getBodyPart(i);
  102. String label = null;
  103. if (label == null) label = curr.getFileName();
  104. if (label == null) label = curr.getDescription();
  105. if (label == null) label = curr.getContentType();
  106. Button but = new Button(label);
  107. but.addActionListener( new AttachmentViewer(curr));
  108. add(but, gc);
  109.     }
  110.     
  111.     
  112. } catch(MessagingException me2) {
  113.     me2.printStackTrace();
  114. }
  115.     }
  116.     protected Component getComponent(BodyPart bp) {
  117. try {
  118.     DataHandler dh = bp.getDataHandler();
  119.     CommandInfo ci = dh.getCommand("view");
  120.     if (ci == null) {
  121. throw new MessagingException(
  122.     "view command failed on: " +
  123.     bp.getContentType());
  124.     }
  125.     
  126.     Object bean = dh.getBean(ci);
  127.     if (bean instanceof Component) {
  128. return (Component)bean;
  129.     } else {
  130. if (bean == null)
  131.     throw new MessagingException(
  132. "bean is null, class " + ci.getCommandClass() +
  133. " , command " + ci.getCommandName());
  134. else
  135.     throw new MessagingException(
  136. "bean is not a awt.Component" +
  137. bean.getClass().toString());
  138.     }
  139. }
  140. catch (MessagingException me) {
  141.     return new Label(me.toString());
  142. }
  143.     }
  144.     
  145.     
  146.     protected void setupErrorDisplay(Object content) {
  147. String error;
  148. if (content == null)
  149.     error = "Content is null";
  150. else
  151.     error = "Object not of type Multipart, content class = " +
  152.     content.getClass().toString();
  153. System.out.println(error);
  154. Label lab = new Label(error);
  155. add(lab);
  156.     }
  157.    
  158.     class AttachmentViewer implements ActionListener {
  159. BodyPart bp = null;
  160. public AttachmentViewer(BodyPart part) {
  161.     bp = part;
  162. }
  163. public void actionPerformed(ActionEvent e) {
  164.     ComponentFrame f = new ComponentFrame(
  165. getComponent(bp), "Attachment");
  166.     f.pack();
  167.     f.show();
  168. }
  169.     }
  170. }