KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > apache > james > transport > matchers > HasAttachment


1 /***********************************************************************
2  * Copyright (c) 2000-2004 The Apache Software Foundation. *
3  * All rights reserved. *
4  * ------------------------------------------------------------------- *
5  * Licensed under the Apache License, Version 2.0 (the "License"); you *
6  * may not use this file except in compliance with the License. You *
7  * may obtain a copy of the License at: *
8  * *
9  * http://www.apache.org/licenses/LICENSE-2.0 *
10  * *
11  * Unless required by applicable law or agreed to in writing, software *
12  * distributed under the License is distributed on an "AS IS" BASIS, *
13  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or *
14  * implied. See the License for the specific language governing *
15  * permissions and limitations under the License. *
16  ***********************************************************************/

17
18 package org.apache.james.transport.matchers;
19
20 import org.apache.mailet.GenericMatcher;
21 import org.apache.mailet.Mail;
22
23 import javax.mail.MessagingException JavaDoc;
24 import javax.mail.Multipart JavaDoc;
25 import javax.mail.Part JavaDoc;
26 import javax.mail.internet.MimeMessage JavaDoc;
27 import java.util.Collection JavaDoc;
28
29 /**
30  * Checks whether this message has an attachment
31  *
32  * @version CVS $Revision: 1.2.4.4 $ $Date: 2004/03/15 03:54:21 $
33  */

34 public class HasAttachment extends GenericMatcher {
35
36     /**
37      * Either every recipient is matching or neither of them.
38      * @throws MessagingException if no attachment is found and at least one exception was thrown
39      */

40     public Collection JavaDoc match(Mail mail) throws MessagingException JavaDoc {
41         
42         Exception JavaDoc anException = null;
43         
44         try {
45             MimeMessage JavaDoc message = mail.getMessage();
46             Object JavaDoc content;
47             
48             /**
49              * if there is an attachment and no inline text,
50              * the content type can be anything
51              */

52             if (message.getContentType() == null) {
53                 return null;
54             }
55             
56             content = message.getContent();
57             if (content instanceof Multipart JavaDoc) {
58                 Multipart JavaDoc multipart = (Multipart JavaDoc) content;
59                 for (int i = 0; i < multipart.getCount(); i++) {
60                     try {
61                         Part JavaDoc part = multipart.getBodyPart(i);
62                         String JavaDoc fileName = part.getFileName();
63                         if (fileName != null) {
64                             return mail.getRecipients(); // file found
65
}
66                     } catch (MessagingException JavaDoc e) {
67                         anException = e;
68                     } // ignore any messaging exception and process next bodypart
69
}
70             } else {
71                 String JavaDoc fileName = message.getFileName();
72                 if (fileName != null) {
73                     return mail.getRecipients(); // file found
74
}
75             }
76         } catch (Exception JavaDoc e) {
77             anException = e;
78         }
79         
80         // if no attachment was found and at least one exception was catched rethrow it up
81
if (anException != null) {
82             throw new MessagingException JavaDoc("Malformed message", anException);
83         }
84         
85         return null; // no attachment found
86
}
87 }
88
Popular Tags