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
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 }