View Javadoc

1   /**
2    *
3    * Copyright 2003-2006 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: 421852 $ $Date: 2006-07-14 03:02:19 -0700 (Fri, 14 Jul 2006) $
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  }