You are viewing a plain text version of this content. The canonical link for it is here.
Posted to scm@geronimo.apache.org by jb...@apache.org on 2005/01/26 23:27:45 UTC
svn commit: r126550 - geronimo/trunk/specs/javamail/src/java/javax/mail/search
Author: jboynes
Date: Wed Jan 26 14:27:45 2005
New Revision: 126550
URL: http://svn.apache.org/viewcvs?view=rev&rev=126550
Log:
cleanup on search terms
Modified:
geronimo/trunk/specs/javamail/src/java/javax/mail/search/AddressTerm.java
geronimo/trunk/specs/javamail/src/java/javax/mail/search/AndTerm.java
geronimo/trunk/specs/javamail/src/java/javax/mail/search/BodyTerm.java
geronimo/trunk/specs/javamail/src/java/javax/mail/search/ComparisonTerm.java
geronimo/trunk/specs/javamail/src/java/javax/mail/search/DateTerm.java
geronimo/trunk/specs/javamail/src/java/javax/mail/search/FlagTerm.java
geronimo/trunk/specs/javamail/src/java/javax/mail/search/FromStringTerm.java
geronimo/trunk/specs/javamail/src/java/javax/mail/search/FromTerm.java
geronimo/trunk/specs/javamail/src/java/javax/mail/search/HeaderTerm.java
geronimo/trunk/specs/javamail/src/java/javax/mail/search/IntegerComparisonTerm.java
geronimo/trunk/specs/javamail/src/java/javax/mail/search/MessageIDTerm.java
geronimo/trunk/specs/javamail/src/java/javax/mail/search/MessageNumberTerm.java
geronimo/trunk/specs/javamail/src/java/javax/mail/search/NotTerm.java
geronimo/trunk/specs/javamail/src/java/javax/mail/search/OrTerm.java
geronimo/trunk/specs/javamail/src/java/javax/mail/search/RecipientStringTerm.java
geronimo/trunk/specs/javamail/src/java/javax/mail/search/RecipientTerm.java
Modified: geronimo/trunk/specs/javamail/src/java/javax/mail/search/AddressTerm.java
Url: http://svn.apache.org/viewcvs/geronimo/trunk/specs/javamail/src/java/javax/mail/search/AddressTerm.java?view=diff&rev=126550&p1=geronimo/trunk/specs/javamail/src/java/javax/mail/search/AddressTerm.java&r1=126549&p2=geronimo/trunk/specs/javamail/src/java/javax/mail/search/AddressTerm.java&r2=126550
==============================================================================
--- geronimo/trunk/specs/javamail/src/java/javax/mail/search/AddressTerm.java (original)
+++ geronimo/trunk/specs/javamail/src/java/javax/mail/search/AddressTerm.java Wed Jan 26 14:27:45 2005
@@ -20,29 +20,51 @@
import javax.mail.Address;
/**
+ * Term that compares two addresses.
+ *
* @version $Rev$ $Date$
*/
public abstract class AddressTerm extends SearchTerm {
+ /**
+ * The address.
+ */
protected Address address;
+ /**
+ * Constructor taking the address for this term.
+ * @param address the address
+ */
protected AddressTerm(Address address) {
this.address = address;
}
- public boolean equals(Object other) {
- return super.equals(other)
- && ((AddressTerm) other).address.equals(address);
- }
-
+ /**
+ * Return the address of this term.
+ *
+ * @return the addre4ss
+ */
public Address getAddress() {
return address;
}
- public int hashCode() {
- return super.hashCode() + address.hashCode();
- }
-
+ /**
+ * Match to the supplied address.
+ *
+ * @param address the address to match with
+ * @return true if the addresses match
+ */
protected boolean match(Address address) {
return this.address.equals(address);
+ }
+
+ public boolean equals(Object other) {
+ if (this == other) return true;
+ if (other instanceof AddressTerm == false) return false;
+
+ return address.equals(((AddressTerm) other).address);
+ }
+
+ public int hashCode() {
+ return address.hashCode();
}
}
Modified: geronimo/trunk/specs/javamail/src/java/javax/mail/search/AndTerm.java
Url: http://svn.apache.org/viewcvs/geronimo/trunk/specs/javamail/src/java/javax/mail/search/AndTerm.java?view=diff&rev=126550&p1=geronimo/trunk/specs/javamail/src/java/javax/mail/search/AndTerm.java&r1=126549&p2=geronimo/trunk/specs/javamail/src/java/javax/mail/search/AndTerm.java&r2=126550
==============================================================================
--- geronimo/trunk/specs/javamail/src/java/javax/mail/search/AndTerm.java (original)
+++ geronimo/trunk/specs/javamail/src/java/javax/mail/search/AndTerm.java Wed Jan 26 14:27:45 2005
@@ -21,38 +21,70 @@
import javax.mail.Message;
/**
+ * Term that implements a logical AND across terms.
+ *
* @version $Rev$ $Date$
*/
public final class AndTerm extends SearchTerm {
+ /**
+ * Terms to which the AND operator should be applied.
+ */
protected SearchTerm[] terms;
+ /**
+ * Constructor for performing a binary AND.
+ *
+ * @param a the first term
+ * @param b the second ter,
+ */
public AndTerm(SearchTerm a, SearchTerm b) {
terms = new SearchTerm[]{a, b};
}
+ /**
+ * Constructor for performing and AND across an arbitraty number of terms.
+ * @param terms the terms to AND together
+ */
public AndTerm(SearchTerm[] terms) {
this.terms = terms;
}
- public boolean equals(Object other) {
- return super.equals(other)
- && Arrays.equals(terms, ((AndTerm) other).terms);
- }
-
+ /**
+ * Return the terms.
+ * @return the terms
+ */
public SearchTerm[] getTerms() {
return terms;
}
- public int hashCode() {
- return super.hashCode() + terms.length * 37;
- }
-
+ /**
+ * Match by applying the terms, in order, to the Message and performing an AND operation
+ * to the result. Comparision will stop immediately if one of the terms returns false.
+ *
+ * @param message the Message to apply the terms to
+ * @return true if all terms match
+ */
public boolean match(Message message) {
- boolean result = true;
- for (int i = 0; result && i < terms.length; i++) {
+ for (int i = 0; i < terms.length; i++) {
SearchTerm term = terms[i];
- result = term.match(message);
+ if (!term.match(message)) {
+ return false;
+ }
+ }
+ return true;
+ }
+
+ public boolean equals(Object other) {
+ if (other == this) return true;
+ if (other instanceof AndTerm == false) return false;
+ return Arrays.equals(terms, ((AndTerm) other).terms);
+ }
+
+ public int hashCode() {
+ int hash = 0;
+ for (int i = 0; i < terms.length; i++) {
+ hash = hash * 37 + terms[i].hashCode();
}
- return result;
+ return hash;
}
}
Modified: geronimo/trunk/specs/javamail/src/java/javax/mail/search/BodyTerm.java
Url: http://svn.apache.org/viewcvs/geronimo/trunk/specs/javamail/src/java/javax/mail/search/BodyTerm.java?view=diff&rev=126550&p1=geronimo/trunk/specs/javamail/src/java/javax/mail/search/BodyTerm.java&r1=126549&p2=geronimo/trunk/specs/javamail/src/java/javax/mail/search/BodyTerm.java&r2=126550
==============================================================================
--- geronimo/trunk/specs/javamail/src/java/javax/mail/search/BodyTerm.java (original)
+++ geronimo/trunk/specs/javamail/src/java/javax/mail/search/BodyTerm.java Wed Jan 26 14:27:45 2005
@@ -20,21 +20,46 @@
import java.io.IOException;
import javax.mail.Message;
import javax.mail.MessagingException;
+import javax.mail.Part;
+import javax.mail.Multipart;
+import javax.mail.BodyPart;
/**
+ * Term that matches on a message body. All {@link javax.mail.BodyPart parts} that have
+ * a MIME type of "text/*" are searched.
+ *
* @version $Rev$ $Date$
*/
public final class BodyTerm extends StringTerm {
- public BodyTerm(String body) {
- super(body);
+ public BodyTerm(String pattern) {
+ super(pattern);
}
public boolean match(Message message) {
try {
- return match((String) message.getContent());
+ return matchPart(message);
} catch (IOException e) {
return false;
} catch (MessagingException e) {
+ return false;
+ }
+ }
+
+ private boolean matchPart(Part part) throws MessagingException, IOException {
+ if (part.isMimeType("multipart/*")) {
+ Multipart mp = (Multipart) part.getContent();
+ int count = mp.getCount();
+ for (int i=0; i < count; i++) {
+ BodyPart bp = mp.getBodyPart(i);
+ if (matchPart(bp)) {
+ return true;
+ }
+ }
+ return false;
+ } else if (part.isMimeType("text/*")) {
+ String content = (String) part.getContent();
+ return super.match(content);
+ } else {
return false;
}
}
Modified: geronimo/trunk/specs/javamail/src/java/javax/mail/search/ComparisonTerm.java
Url: http://svn.apache.org/viewcvs/geronimo/trunk/specs/javamail/src/java/javax/mail/search/ComparisonTerm.java?view=diff&rev=126550&p1=geronimo/trunk/specs/javamail/src/java/javax/mail/search/ComparisonTerm.java&r1=126549&p2=geronimo/trunk/specs/javamail/src/java/javax/mail/search/ComparisonTerm.java&r2=126550
==============================================================================
--- geronimo/trunk/specs/javamail/src/java/javax/mail/search/ComparisonTerm.java (original)
+++ geronimo/trunk/specs/javamail/src/java/javax/mail/search/ComparisonTerm.java Wed Jan 26 14:27:45 2005
@@ -18,46 +18,28 @@
package javax.mail.search;
/**
+ * Base for comparison terms.
+ *
* @version $Rev$ $Date$
*/
public abstract class ComparisonTerm extends SearchTerm {
- // Constants from J2SE 1.4 API Doc (Constant Values)
- public static final int EQ = 3;
- public static final int GE = 6;
- public static final int GT = 5;
public static final int LE = 1;
public static final int LT = 2;
+ public static final int EQ = 3;
public static final int NE = 4;
+ public static final int GT = 5;
+ public static final int GE = 6;
+
protected int comparison;
- // Dozy idiots didn't provide a constructor with an int comparison argument
public ComparisonTerm() {
}
- ComparisonTerm(int comparison) {
- this.comparison = comparison;
- }
-
- boolean compare(int answer) {
- if (answer == 0) {
- return (comparison == EQ || comparison == LE || comparison == GE);
- } else if (answer > 0) {
- return (comparison == GE || comparison == GT || comparison == NE);
- } else {
- return (comparison == LE || comparison == LT || comparison == NE);
- }
- }
-
public boolean equals(Object other) {
- return super.equals(other)
- && ((ComparisonTerm) other).comparison == comparison;
- }
-
- int getComparison() {
- return comparison;
+ return super.equals(other);
}
public int hashCode() {
- return super.hashCode() + comparison * 31;
+ return super.hashCode();
}
}
Modified: geronimo/trunk/specs/javamail/src/java/javax/mail/search/DateTerm.java
Url: http://svn.apache.org/viewcvs/geronimo/trunk/specs/javamail/src/java/javax/mail/search/DateTerm.java?view=diff&rev=126550&p1=geronimo/trunk/specs/javamail/src/java/javax/mail/search/DateTerm.java&r1=126549&p2=geronimo/trunk/specs/javamail/src/java/javax/mail/search/DateTerm.java&r2=126550
==============================================================================
--- geronimo/trunk/specs/javamail/src/java/javax/mail/search/DateTerm.java (original)
+++ geronimo/trunk/specs/javamail/src/java/javax/mail/search/DateTerm.java Wed Jan 26 14:27:45 2005
@@ -26,30 +26,48 @@
protected Date date;
protected DateTerm(int comparison, Date date) {
- super(comparison);
- if (date == null) {
- throw new IllegalArgumentException("Date cannot be null");
- }
+ super();
+ this.comparison = comparison;
this.date = date;
}
- public boolean equals(Object other) {
- return super.equals(other) && ((DateTerm) other).date.equals(date);
+ public Date getDate() {
+ return date;
}
public int getComparison() {
- return super.getComparison();
+ return comparison;
}
- public Date getDate() {
- return date;
+ protected boolean match(Date match) {
+ long matchTime = match.getTime();
+ long mytime = date.getTime();
+ switch (comparison) {
+ case EQ:
+ return matchTime == mytime;
+ case NE:
+ return matchTime != mytime;
+ case LE:
+ return matchTime <= mytime;
+ case LT:
+ return matchTime < mytime;
+ case GT:
+ return matchTime > mytime;
+ case GE:
+ return matchTime >= mytime;
+ default:
+ return false;
+ }
}
- public int hashCode() {
- return super.hashCode() + date.hashCode();
+ public boolean equals(Object other) {
+ if (other == this) return true;
+ if (other instanceof DateTerm == false) return false;
+ final DateTerm term = (DateTerm) other;
+ return this.comparison == term.comparison && this.date.equals(term.date);
}
- protected boolean match(Date match) {
- return compare(date.compareTo(match));
+ public int hashCode() {
+ return date.hashCode();
}
}
Modified: geronimo/trunk/specs/javamail/src/java/javax/mail/search/FlagTerm.java
Url: http://svn.apache.org/viewcvs/geronimo/trunk/specs/javamail/src/java/javax/mail/search/FlagTerm.java?view=diff&rev=126550&p1=geronimo/trunk/specs/javamail/src/java/javax/mail/search/FlagTerm.java&r1=126549&p2=geronimo/trunk/specs/javamail/src/java/javax/mail/search/FlagTerm.java&r2=126550
==============================================================================
--- geronimo/trunk/specs/javamail/src/java/javax/mail/search/FlagTerm.java (original)
+++ geronimo/trunk/specs/javamail/src/java/javax/mail/search/FlagTerm.java Wed Jan 26 14:27:45 2005
@@ -22,23 +22,29 @@
import javax.mail.MessagingException;
/**
+ * Term for matching message {@link Flags}.
+ *
* @version $Rev$ $Date$
*/
public final class FlagTerm extends SearchTerm {
- protected Flags flags;
+ /**
+ * If true, test that all flags are set; if false, test that all flags are clear.
+ */
protected boolean set;
+ /**
+ * The flags to test.
+ */
+ protected Flags flags;
+ /**
+ * @param flags the flags to test
+ * @param set test for set or clear; {@link #set}
+ */
public FlagTerm(Flags flags, boolean set) {
this.set = set;
this.flags = flags;
}
- public boolean equals(Object other) {
- return super.equals(other)
- && ((FlagTerm) other).flags.equals(flags)
- && ((FlagTerm) other).set == set;
- }
-
public Flags getFlags() {
return flags;
}
@@ -47,15 +53,42 @@
return set;
}
- public int hashCode() {
- return super.hashCode() + flags.hashCode() + (set ? 99 : 234);
- }
-
public boolean match(Message message) {
try {
- return message.getFlags().contains(flags) == set;
+ Flags msgFlags = message.getFlags();
+ if (set) {
+ return msgFlags.contains(flags);
+ } else {
+ // yuk - I wish we could get at the internal state of the Flags
+ Flags.Flag[] system = flags.getSystemFlags();
+ for (int i = 0; i < system.length; i++) {
+ Flags.Flag flag = system[i];
+ if (msgFlags.contains(flag)) {
+ return false;
+ }
+ }
+ String[] user = flags.getUserFlags();
+ for (int i = 0; i < user.length; i++) {
+ String flag = user[i];
+ if (msgFlags.contains(flag)) {
+ return false;
+ }
+ }
+ return true;
+ }
} catch (MessagingException e) {
return false;
}
+ }
+
+ public boolean equals(Object other) {
+ if (other == this) return true;
+ if (other instanceof FlagTerm == false) return false;
+ final FlagTerm otherFlags = (FlagTerm) other;
+ return otherFlags.set == this.set && otherFlags.flags.equals(flags);
+ }
+
+ public int hashCode() {
+ return flags.hashCode();
}
}
Modified: geronimo/trunk/specs/javamail/src/java/javax/mail/search/FromStringTerm.java
Url: http://svn.apache.org/viewcvs/geronimo/trunk/specs/javamail/src/java/javax/mail/search/FromStringTerm.java?view=diff&rev=126550&p1=geronimo/trunk/specs/javamail/src/java/javax/mail/search/FromStringTerm.java&r1=126549&p2=geronimo/trunk/specs/javamail/src/java/javax/mail/search/FromStringTerm.java&r2=126550
==============================================================================
--- geronimo/trunk/specs/javamail/src/java/javax/mail/search/FromStringTerm.java (original)
+++ geronimo/trunk/specs/javamail/src/java/javax/mail/search/FromStringTerm.java Wed Jan 26 14:27:45 2005
@@ -32,11 +32,12 @@
public boolean match(Message message) {
try {
Address from[] = message.getFrom();
- boolean result = false;
- for (int i = 0; !result && i < from.length; i++) {
- result = match(from[i]);
+ for (int i = 0; i < from.length; i++) {
+ if (match(from[i])){
+ return true;
+ }
}
- return result;
+ return false;
} catch (MessagingException e) {
return false;
}
Modified: geronimo/trunk/specs/javamail/src/java/javax/mail/search/FromTerm.java
Url: http://svn.apache.org/viewcvs/geronimo/trunk/specs/javamail/src/java/javax/mail/search/FromTerm.java?view=diff&rev=126550&p1=geronimo/trunk/specs/javamail/src/java/javax/mail/search/FromTerm.java&r1=126549&p2=geronimo/trunk/specs/javamail/src/java/javax/mail/search/FromTerm.java&r2=126550
==============================================================================
--- geronimo/trunk/specs/javamail/src/java/javax/mail/search/FromTerm.java (original)
+++ geronimo/trunk/specs/javamail/src/java/javax/mail/search/FromTerm.java Wed Jan 26 14:27:45 2005
@@ -32,11 +32,12 @@
public boolean match(Message message) {
try {
Address from[] = message.getFrom();
- boolean result = false;
- for (int i = 0; !result && i < from.length; i++) {
- result = match(from[i]);
+ for (int i = 0; i < from.length; i++) {
+ if (match(from[i])) {
+ return true;
+ }
}
- return result;
+ return false;
} catch (MessagingException e) {
return false;
}
Modified: geronimo/trunk/specs/javamail/src/java/javax/mail/search/HeaderTerm.java
Url: http://svn.apache.org/viewcvs/geronimo/trunk/specs/javamail/src/java/javax/mail/search/HeaderTerm.java?view=diff&rev=126550&p1=geronimo/trunk/specs/javamail/src/java/javax/mail/search/HeaderTerm.java&r1=126549&p2=geronimo/trunk/specs/javamail/src/java/javax/mail/search/HeaderTerm.java&r2=126550
==============================================================================
--- geronimo/trunk/specs/javamail/src/java/javax/mail/search/HeaderTerm.java (original)
+++ geronimo/trunk/specs/javamail/src/java/javax/mail/search/HeaderTerm.java Wed Jan 26 14:27:45 2005
@@ -31,34 +31,34 @@
this.headerName = header;
}
- public boolean equals(Object other) {
- return super.equals(other)
- && ((HeaderTerm) other).headerName.equals(headerName);
- }
-
public String getHeaderName() {
return headerName;
}
- public int hashCode() {
- return super.hashCode() + headerName.hashCode();
- }
-
public boolean match(Message message) {
try {
String values[] = message.getHeader(headerName);
- if (values == null || values.length == 0) {
- return false;
- } else {
- boolean result = false;
- for (int i = 0; !result && i < values.length; i++) {
+ if (values != null) {
+ for (int i = 0; i < values.length; i++) {
String value = values[i];
- result = match(value);
+ if (match(value)) {
+ return true;
+ }
}
- return result;
}
+ return false;
} catch (MessagingException e) {
return false;
}
+ }
+
+ public boolean equals(Object other) {
+ if (other == this) return true;
+ if (other instanceof HeaderTerm == false) return false;
+ return headerName.equalsIgnoreCase(((HeaderTerm) other).headerName);
+ }
+
+ public int hashCode() {
+ return headerName.toLowerCase().hashCode();
}
}
Modified: geronimo/trunk/specs/javamail/src/java/javax/mail/search/IntegerComparisonTerm.java
Url: http://svn.apache.org/viewcvs/geronimo/trunk/specs/javamail/src/java/javax/mail/search/IntegerComparisonTerm.java?view=diff&rev=126550&p1=geronimo/trunk/specs/javamail/src/java/javax/mail/search/IntegerComparisonTerm.java&r1=126549&p2=geronimo/trunk/specs/javamail/src/java/javax/mail/search/IntegerComparisonTerm.java&r2=126550
==============================================================================
--- geronimo/trunk/specs/javamail/src/java/javax/mail/search/IntegerComparisonTerm.java (original)
+++ geronimo/trunk/specs/javamail/src/java/javax/mail/search/IntegerComparisonTerm.java Wed Jan 26 14:27:45 2005
@@ -18,34 +18,54 @@
package javax.mail.search;
/**
+ * A Term that provides comparisons for integers.
+ *
* @version $Rev$ $Date$
*/
public abstract class IntegerComparisonTerm extends ComparisonTerm {
protected int number;
protected IntegerComparisonTerm(int comparison, int number) {
- super(comparison);
+ super();
+ this.comparison = comparison;
this.number = number;
}
- public boolean equals(Object other) {
- return super.equals(other)
- && ((IntegerComparisonTerm) other).number == number;
+ public int getNumber() {
+ return number;
}
public int getComparison() {
- return super.getComparison();
+ return comparison;
}
- public int getNumber() {
- return number;
+ protected boolean match(int match) {
+ switch (comparison) {
+ case EQ:
+ return match == number;
+ case NE:
+ return match != number;
+ case GT:
+ return match > number;
+ case GE:
+ return match >= number;
+ case LT:
+ return match < number;
+ case LE:
+ return match <= number;
+ default:
+ return false;
+ }
}
- public int hashCode() {
- return super.hashCode() + number * 47;
+ public boolean equals(Object other) {
+ if (other == this) return true;
+ if (other instanceof IntegerComparisonTerm == false) return false;
+ final IntegerComparisonTerm term = (IntegerComparisonTerm) other;
+ return this.comparison == term.comparison && this.number == term.number;
}
- protected boolean match(int match) {
- return compare(number - match);
+ public int hashCode() {
+ return number;
}
}
Modified: geronimo/trunk/specs/javamail/src/java/javax/mail/search/MessageIDTerm.java
Url: http://svn.apache.org/viewcvs/geronimo/trunk/specs/javamail/src/java/javax/mail/search/MessageIDTerm.java?view=diff&rev=126550&p1=geronimo/trunk/specs/javamail/src/java/javax/mail/search/MessageIDTerm.java&r1=126549&p2=geronimo/trunk/specs/javamail/src/java/javax/mail/search/MessageIDTerm.java&r2=126550
==============================================================================
--- geronimo/trunk/specs/javamail/src/java/javax/mail/search/MessageIDTerm.java (original)
+++ geronimo/trunk/specs/javamail/src/java/javax/mail/search/MessageIDTerm.java Wed Jan 26 14:27:45 2005
@@ -31,16 +31,15 @@
public boolean match(Message message) {
try {
String values[] = message.getHeader("Message-ID");
- if (values == null || values.length == 0) {
- return false;
- } else {
- boolean result = false;
- for (int i = 0; !result && i < values.length; i++) {
+ if (values != null) {
+ for (int i = 0; i < values.length; i++) {
String value = values[i];
- result = match(value);
+ if (match(value)) {
+ return true;
+ }
}
- return result;
}
+ return false;
} catch (MessagingException e) {
return false;
}
Modified: geronimo/trunk/specs/javamail/src/java/javax/mail/search/MessageNumberTerm.java
Url: http://svn.apache.org/viewcvs/geronimo/trunk/specs/javamail/src/java/javax/mail/search/MessageNumberTerm.java?view=diff&rev=126550&p1=geronimo/trunk/specs/javamail/src/java/javax/mail/search/MessageNumberTerm.java&r1=126549&p2=geronimo/trunk/specs/javamail/src/java/javax/mail/search/MessageNumberTerm.java&r2=126550
==============================================================================
--- geronimo/trunk/specs/javamail/src/java/javax/mail/search/MessageNumberTerm.java (original)
+++ geronimo/trunk/specs/javamail/src/java/javax/mail/search/MessageNumberTerm.java Wed Jan 26 14:27:45 2005
@@ -30,4 +30,8 @@
public boolean match(Message message) {
return match(message.getMessageNumber());
}
+
+ public boolean equals(Object other) {
+ return super.equals(other);
+ }
}
Modified: geronimo/trunk/specs/javamail/src/java/javax/mail/search/NotTerm.java
Url: http://svn.apache.org/viewcvs/geronimo/trunk/specs/javamail/src/java/javax/mail/search/NotTerm.java?view=diff&rev=126550&p1=geronimo/trunk/specs/javamail/src/java/javax/mail/search/NotTerm.java&r1=126549&p2=geronimo/trunk/specs/javamail/src/java/javax/mail/search/NotTerm.java&r2=126550
==============================================================================
--- geronimo/trunk/specs/javamail/src/java/javax/mail/search/NotTerm.java (original)
+++ geronimo/trunk/specs/javamail/src/java/javax/mail/search/NotTerm.java Wed Jan 26 14:27:45 2005
@@ -20,6 +20,8 @@
import javax.mail.Message;
/**
+ * Term that implements a logical negation.
+ *
* @version $Rev$ $Date$
*/
public final class NotTerm extends SearchTerm {
@@ -29,19 +31,21 @@
this.term = term;
}
- public boolean equals(Object other) {
- return super.equals(other) && ((NotTerm) other).term.equals(term);
- }
-
public SearchTerm getTerm() {
return term;
}
- public int hashCode() {
- return super.hashCode() + term.hashCode();
- }
-
public boolean match(Message message) {
return !term.match(message);
+ }
+
+ public boolean equals(Object other) {
+ if (other == this) return true;
+ if (other instanceof NotTerm == false) return false;
+ return term.equals(((NotTerm) other).term);
+ }
+
+ public int hashCode() {
+ return term.hashCode();
}
}
Modified: geronimo/trunk/specs/javamail/src/java/javax/mail/search/OrTerm.java
Url: http://svn.apache.org/viewcvs/geronimo/trunk/specs/javamail/src/java/javax/mail/search/OrTerm.java?view=diff&rev=126550&p1=geronimo/trunk/specs/javamail/src/java/javax/mail/search/OrTerm.java&r1=126549&p2=geronimo/trunk/specs/javamail/src/java/javax/mail/search/OrTerm.java&r2=126550
==============================================================================
--- geronimo/trunk/specs/javamail/src/java/javax/mail/search/OrTerm.java (original)
+++ geronimo/trunk/specs/javamail/src/java/javax/mail/search/OrTerm.java Wed Jan 26 14:27:45 2005
@@ -34,25 +34,31 @@
this.terms = terms;
}
- public boolean equals(Object other) {
- return super.equals(other)
- && Arrays.equals(terms, ((OrTerm) other).terms);
- }
-
public SearchTerm[] getTerms() {
return terms;
}
- public int hashCode() {
- return super.hashCode() + terms.length * 37;
- }
-
public boolean match(Message message) {
- boolean result = false;
- for (int i = 0; (!result) && i < terms.length; i++) {
+ for (int i = 0; i < terms.length; i++) {
SearchTerm term = terms[i];
- result = term.match(message);
+ if (term.match(message)) {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ public boolean equals(Object other) {
+ if (other == this) return true;
+ if (other instanceof OrTerm == false) return false;
+ return Arrays.equals(terms, ((OrTerm) other).terms);
+ }
+
+ public int hashCode() {
+ int hash = 0;
+ for (int i = 0; i < terms.length; i++) {
+ hash = hash * 37 + terms[i].hashCode();
}
- return result;
+ return hash;
}
}
Modified: geronimo/trunk/specs/javamail/src/java/javax/mail/search/RecipientStringTerm.java
Url: http://svn.apache.org/viewcvs/geronimo/trunk/specs/javamail/src/java/javax/mail/search/RecipientStringTerm.java?view=diff&rev=126550&p1=geronimo/trunk/specs/javamail/src/java/javax/mail/search/RecipientStringTerm.java&r1=126549&p2=geronimo/trunk/specs/javamail/src/java/javax/mail/search/RecipientStringTerm.java&r2=126550
==============================================================================
--- geronimo/trunk/specs/javamail/src/java/javax/mail/search/RecipientStringTerm.java (original)
+++ geronimo/trunk/specs/javamail/src/java/javax/mail/search/RecipientStringTerm.java Wed Jan 26 14:27:45 2005
@@ -25,36 +25,40 @@
* @version $Rev$ $Date$
*/
public final class RecipientStringTerm extends AddressStringTerm {
- private Message.RecipientType _type;
+ private Message.RecipientType type;
public RecipientStringTerm(Message.RecipientType type, String pattern) {
super(pattern);
- this._type = type;
- }
-
- public boolean equals(Object other) {
- return super.equals(other)
- && ((RecipientStringTerm) other)._type == _type;
+ this.type = type;
}
public Message.RecipientType getRecipientType() {
- return _type;
- }
-
- public int hashCode() {
- return super.hashCode() + _type.hashCode();
+ return type;
}
public boolean match(Message message) {
try {
- Address from[] = message.getFrom();
- boolean result = false;
- for (int i = 0; !result && i < from.length; i++) {
- result = match(from[i]);
+ Address from[] = message.getRecipients(type);
+ for (int i = 0; i < from.length; i++) {
+ Address address = from[i];
+ if (match(address)) {
+ return true;
+ }
}
- return result;
+ return false;
} catch (MessagingException e) {
return false;
}
+ }
+
+ public boolean equals(Object other) {
+ if (other == this) return true;
+ if (other instanceof RecipientStringTerm == false) return false;
+ final RecipientStringTerm otherTerm = (RecipientStringTerm) other;
+ return this.pattern.equals(otherTerm.pattern) && this.type == otherTerm.type;
+ }
+
+ public int hashCode() {
+ return pattern.hashCode();
}
}
Modified: geronimo/trunk/specs/javamail/src/java/javax/mail/search/RecipientTerm.java
Url: http://svn.apache.org/viewcvs/geronimo/trunk/specs/javamail/src/java/javax/mail/search/RecipientTerm.java?view=diff&rev=126550&p1=geronimo/trunk/specs/javamail/src/java/javax/mail/search/RecipientTerm.java&r1=126549&p2=geronimo/trunk/specs/javamail/src/java/javax/mail/search/RecipientTerm.java&r2=126550
==============================================================================
--- geronimo/trunk/specs/javamail/src/java/javax/mail/search/RecipientTerm.java (original)
+++ geronimo/trunk/specs/javamail/src/java/javax/mail/search/RecipientTerm.java Wed Jan 26 14:27:45 2005
@@ -32,28 +32,34 @@
this.type = type;
}
- public boolean equals(Object other) {
- return super.equals(other) && ((RecipientTerm) other).type.equals(type);
- }
-
public Message.RecipientType getRecipientType() {
return type;
}
- public int hashCode() {
- return super.hashCode() + type.hashCode();
- }
-
public boolean match(Message message) {
try {
Address from[] = message.getRecipients(type);
- boolean result = false;
- for (int i = 0; !result && i < from.length; i++) {
- result = match(from[i]);
+ for (int i = 0; i < from.length; i++) {
+ Address address = from[i];
+ if (match(address)) {
+ return true;
+ }
}
- return result;
+ return false;
} catch (MessagingException e) {
return false;
}
+ }
+
+ public boolean equals(Object other) {
+ if (this == other) return true;
+ if (other instanceof RecipientTerm == false) return false;
+
+ final RecipientTerm recipientTerm = (RecipientTerm) other;
+ return address.equals(recipientTerm.address) && type == recipientTerm.type;
+ }
+
+ public int hashCode() {
+ return address.hashCode();
}
}