1 /**
2 *
3 * Copyright 2003-2004 The Apache Software Foundation
4 *
5 * Licensed under the Apache License, Version 2.0 (the "License");
6 * you may not use this file except in compliance with the License.
7 * You 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 implied.
14 * See the License for the specific language governing permissions and
15 * limitations under the License.
16 */
17
18 package javax.mail.search;
19
20 import java.io.IOException;
21 import javax.mail.Message;
22 import javax.mail.MessagingException;
23 import javax.mail.Part;
24 import javax.mail.Multipart;
25 import javax.mail.BodyPart;
26
27 /**
28 * Term that matches on a message body. All {@link javax.mail.BodyPart parts} that have
29 * a MIME type of "text/*" are searched.
30 *
31 * @version $Rev: 126550 $ $Date: 2005-01-26 14:27:45 -0800 (Wed, 26 Jan 2005) $
32 */
33 public final class BodyTerm extends StringTerm {
34 public BodyTerm(String pattern) {
35 super(pattern);
36 }
37
38 public boolean match(Message message) {
39 try {
40 return matchPart(message);
41 } catch (IOException e) {
42 return false;
43 } catch (MessagingException e) {
44 return false;
45 }
46 }
47
48 private boolean matchPart(Part part) throws MessagingException, IOException {
49 if (part.isMimeType("multipart/*")) {
50 Multipart mp = (Multipart) part.getContent();
51 int count = mp.getCount();
52 for (int i=0; i < count; i++) {
53 BodyPart bp = mp.getBodyPart(i);
54 if (matchPart(bp)) {
55 return true;
56 }
57 }
58 return false;
59 } else if (part.isMimeType("text/*")) {
60 String content = (String) part.getContent();
61 return super.match(content);
62 } else {
63 return false;
64 }
65 }
66 }