Subversion Repositories javautils

Rev

Blame | Last modification | View Log | RSS feed

  1. /*
  2.  * Copyright 2001-2007 Sun Microsystems, Inc. All Rights Reserved.
  3.  *
  4.  * Redistribution and use in source and binary forms, with or without
  5.  * modification, are permitted provided that the following conditions
  6.  * are met:
  7.  *
  8.  *   - Redistributions of source code must retain the above copyright
  9.  *     notice, this list of conditions and the following disclaimer.
  10.  *
  11.  *   - Redistributions in binary form must reproduce the above copyright
  12.  *     notice, this list of conditions and the following disclaimer in the
  13.  *     documentation and/or other materials provided with the distribution.
  14.  *
  15.  *   - Neither the name of Sun Microsystems nor the names of its
  16.  *     contributors may be used to endorse or promote products derived
  17.  *     from this software without specific prior written permission.
  18.  *
  19.  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
  20.  * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
  21.  * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
  22.  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR
  23.  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
  24.  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
  25.  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
  26.  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
  27.  * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
  28.  * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
  29.  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  30.  */
  31.  
  32. package demo;
  33.  
  34. import java.io.*;
  35. import java.util.*;
  36. import javax.mail.*;
  37. import javax.mail.internet.*;
  38. import javax.servlet.jsp.*;
  39. import javax.servlet.jsp.tagext.*;
  40.  
  41. /**
  42.  * Custom tag for listing message attachments. The scripting variable is only
  43.  * within the body of the tag.
  44.  */
  45. public class ListAttachmentsTag extends BodyTagSupport {
  46.     private String messageinfo;
  47.     private int partNum = 1;
  48.     private int numParts = 0;
  49.     private AttachmentInfo attachmentinfo;
  50.     private MessageInfo messageInfo;
  51.     private Multipart multipart;
  52.  
  53.     /**
  54.      * messageinfo attribute getter method.
  55.      */
  56.     public String getMessageinfo() {
  57.         return messageinfo;
  58.     }
  59.    
  60.     /**
  61.      * messageinfo attribute setter method.
  62.      */
  63.     public void setMessageinfo(String messageinfo) {
  64.         this.messageinfo = messageinfo;
  65.     }
  66.  
  67.     /**
  68.      * Method for processing the start of the tag.
  69.      */
  70.     public int doStartTag() throws JspException {
  71.         messageInfo = (MessageInfo)pageContext.getAttribute(getMessageinfo());
  72.         attachmentinfo = new AttachmentInfo();
  73.        
  74.         try {
  75.             multipart = (Multipart)messageInfo.getMessage().getContent();
  76.             numParts = multipart.getCount();
  77.         } catch (Exception ex) {
  78.             throw new JspException(ex.getMessage());
  79.         }
  80.  
  81.         getPart();
  82.  
  83.         return BodyTag.EVAL_BODY_TAG;
  84.     }
  85.    
  86.     /**
  87.      * Method for processing the body content of the tag.
  88.      */
  89.     public int doAfterBody() throws JspException {
  90.        
  91.         BodyContent body = getBodyContent();
  92.         try {
  93.             body.writeOut(getPreviousOut());
  94.         } catch (IOException e) {
  95.             throw new JspTagException("IterationTag: " + e.getMessage());
  96.         }
  97.        
  98.         // clear up so the next time the body content is empty
  99.         body.clearBody();
  100.        
  101.         partNum++;
  102.         if (partNum < numParts) {
  103.             getPart();
  104.             return BodyTag.EVAL_BODY_TAG;
  105.         } else {
  106.             return BodyTag.SKIP_BODY;
  107.         }
  108.     }
  109.    
  110.     /**
  111.      * Helper method for retrieving message parts.
  112.      */
  113.     private void getPart() throws JspException {
  114.         try {
  115.             attachmentinfo.setPart(partNum, multipart.getBodyPart(partNum));
  116.             pageContext.setAttribute(getId(), attachmentinfo);
  117.         } catch (Exception ex) {
  118.             throw new JspException(ex.getMessage());
  119.         }
  120.     }
  121. }
  122.  
  123.