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 javax.mail.Flags;
21  import javax.mail.Message;
22  import javax.mail.MessagingException;
23  
24  /**
25   * Term for matching message {@link Flags}.
26   *
27   * @version $Rev: 421852 $ $Date: 2006-07-14 03:02:19 -0700 (Fri, 14 Jul 2006) $
28   */
29  public final class FlagTerm extends SearchTerm {
30      /**
31       * If true, test that all flags are set; if false, test that all flags are clear.
32       */
33      protected boolean set;
34      /**
35       * The flags to test.
36       */
37      protected Flags flags;
38  
39      /**
40       * @param flags the flags to test
41       * @param set test for set or clear; {@link #set}
42       */
43      public FlagTerm(Flags flags, boolean set) {
44          this.set = set;
45          this.flags = flags;
46      }
47  
48      public Flags getFlags() {
49          return flags;
50      }
51  
52      public boolean getTestSet() {
53          return set;
54      }
55  
56      public boolean match(Message message) {
57          try {
58              Flags msgFlags = message.getFlags();
59              if (set) {
60                  return msgFlags.contains(flags);
61              } else {
62                  // yuk - I wish we could get at the internal state of the Flags
63                  Flags.Flag[] system = flags.getSystemFlags();
64                  for (int i = 0; i < system.length; i++) {
65                      Flags.Flag flag = system[i];
66                      if (msgFlags.contains(flag)) {
67                          return false;
68                      }
69                  }
70                  String[] user = flags.getUserFlags();
71                  for (int i = 0; i < user.length; i++) {
72                      String flag = user[i];
73                      if (msgFlags.contains(flag)) {
74                          return false;
75                      }
76                  }
77                  return true;
78              }
79          } catch (MessagingException e) {
80              return false;
81          }
82      }
83  
84      public boolean equals(Object other) {
85          if (other == this) return true;
86          if (other instanceof FlagTerm == false) return false;
87          final FlagTerm otherFlags = (FlagTerm) other;
88          return otherFlags.set == this.set && otherFlags.flags.equals(flags);
89      }
90  
91      public int hashCode() {
92          return flags.hashCode();
93      }
94  }