You are viewing a plain text version of this content. The canonical link for it is here.
Posted to mime4j-dev@james.apache.org by ol...@apache.org on 2011/01/12 17:51:58 UTC
svn commit: r1058228 - in /james/mime4j/branches/dom-api-refactoring:
core/src/main/java/org/apache/james/mime4j/util/
dom/src/main/java/org/apache/james/mime4j/dom/address/
dom/src/test/java/org/apache/james/mime4j/field/address/
Author: olegk
Date: Wed Jan 12 16:51:57 2011
New Revision: 1058228
URL: http://svn.apache.org/viewvc?rev=1058228&view=rev
Log:
Slightly more efficient #equals and #hashCode implementations for Mailbox
Added:
james/mime4j/branches/dom-api-refactoring/core/src/main/java/org/apache/james/mime4j/util/LangUtils.java (with props)
Modified:
james/mime4j/branches/dom-api-refactoring/dom/src/main/java/org/apache/james/mime4j/dom/address/Mailbox.java
james/mime4j/branches/dom-api-refactoring/dom/src/test/java/org/apache/james/mime4j/field/address/AddressTest.java
Added: james/mime4j/branches/dom-api-refactoring/core/src/main/java/org/apache/james/mime4j/util/LangUtils.java
URL: http://svn.apache.org/viewvc/james/mime4j/branches/dom-api-refactoring/core/src/main/java/org/apache/james/mime4j/util/LangUtils.java?rev=1058228&view=auto
==============================================================================
--- james/mime4j/branches/dom-api-refactoring/core/src/main/java/org/apache/james/mime4j/util/LangUtils.java (added)
+++ james/mime4j/branches/dom-api-refactoring/core/src/main/java/org/apache/james/mime4j/util/LangUtils.java Wed Jan 12 16:51:57 2011
@@ -0,0 +1,69 @@
+/****************************************************************
+ * Licensed to the Apache Software Foundation (ASF) under one *
+ * or more contributor license agreements. See the NOTICE file *
+ * distributed with this work for additional information *
+ * regarding copyright ownership. The ASF licenses this file *
+ * to you under the Apache License, Version 2.0 (the *
+ * "License"); you may not use this file except in compliance *
+ * with the License. You may obtain a copy of the License at *
+ * *
+ * http://www.apache.org/licenses/LICENSE-2.0 *
+ * *
+ * Unless required by applicable law or agreed to in writing, *
+ * software distributed under the License is distributed on an *
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY *
+ * KIND, either express or implied. See the License for the *
+ * specific language governing permissions and limitations *
+ * under the License. *
+ ****************************************************************/
+
+package org.apache.james.mime4j.util;
+
+/**
+ * A set of utility methods to help produce consistent
+ * {@link Object#equals equals} and {@link Object#hashCode hashCode} methods.
+ */
+public final class LangUtils {
+
+ public static final int HASH_SEED = 17;
+ public static final int HASH_OFFSET = 37;
+
+ /** Disabled default constructor. */
+ private LangUtils() {
+ }
+
+ public static int hashCode(final int seed, final int hashcode) {
+ return seed * HASH_OFFSET + hashcode;
+ }
+
+ public static int hashCode(final int seed, final boolean b) {
+ return hashCode(seed, b ? 1 : 0);
+ }
+
+ public static int hashCode(final int seed, final Object obj) {
+ return hashCode(seed, obj != null ? obj.hashCode() : 0);
+ }
+
+ /**
+ * Check if two objects are equal.
+ *
+ * @param obj1 first object to compare, may be {@code null}
+ * @param obj2 second object to compare, may be {@code null}
+ * @return {@code true} if the objects are equal or both null
+ */
+ public static boolean equals(final Object obj1, final Object obj2) {
+ return obj1 == null ? obj2 == null : obj1.equals(obj2);
+ }
+
+ /**
+ * Check if two strings are equal, ignoring case considerations.
+ *
+ * @param s1 first string to compare, may be {@code null}
+ * @param s2 second string to compare, may be {@code null}
+ * @return {@code true} if the objects are equal or both null
+ */
+ public static boolean equalsIgnoreCase(final String s1, final String s2) {
+ return s1 == null ? s2 == null : s1.equalsIgnoreCase(s2);
+ }
+
+}
Propchange: james/mime4j/branches/dom-api-refactoring/core/src/main/java/org/apache/james/mime4j/util/LangUtils.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: james/mime4j/branches/dom-api-refactoring/core/src/main/java/org/apache/james/mime4j/util/LangUtils.java
------------------------------------------------------------------------------
svn:keywords = Date Revision
Propchange: james/mime4j/branches/dom-api-refactoring/core/src/main/java/org/apache/james/mime4j/util/LangUtils.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Modified: james/mime4j/branches/dom-api-refactoring/dom/src/main/java/org/apache/james/mime4j/dom/address/Mailbox.java
URL: http://svn.apache.org/viewvc/james/mime4j/branches/dom-api-refactoring/dom/src/main/java/org/apache/james/mime4j/dom/address/Mailbox.java?rev=1058228&r1=1058227&r2=1058228&view=diff
==============================================================================
--- james/mime4j/branches/dom-api-refactoring/dom/src/main/java/org/apache/james/mime4j/dom/address/Mailbox.java (original)
+++ james/mime4j/branches/dom-api-refactoring/dom/src/main/java/org/apache/james/mime4j/dom/address/Mailbox.java Wed Jan 12 16:51:57 2011
@@ -23,6 +23,8 @@ import java.util.Collections;
import java.util.List;
import java.util.Locale;
+import org.apache.james.mime4j.util.LangUtils;
+
/**
* Represents a single e-mail address.
*/
@@ -156,8 +158,17 @@ public class Mailbox extends Address {
}
@Override
+ protected final void doAddMailboxesTo(List<Mailbox> results) {
+ results.add(this);
+ }
+
+ @Override
public int hashCode() {
- return getCanonicalizedAddress().hashCode();
+ int hash = LangUtils.HASH_SEED;
+ hash = LangUtils.hashCode(hash, this.localPart);
+ hash = LangUtils.hashCode(hash, this.domain != null ?
+ this.domain.toLowerCase(Locale.US) : null);
+ return hash;
}
/**
@@ -180,28 +191,14 @@ public class Mailbox extends Address {
return true;
if (!(obj instanceof Mailbox))
return false;
-
- Mailbox other = (Mailbox) obj;
- return getCanonicalizedAddress()
- .equals(other.getCanonicalizedAddress());
- }
-
- @Override
- protected final void doAddMailboxesTo(List<Mailbox> results) {
- results.add(this);
- }
-
- private String getCanonicalizedAddress() {
- if (domain == null) {
- return localPart;
- } else {
- return localPart + '@' + domain.toLowerCase(Locale.US);
- }
+ Mailbox that = (Mailbox) obj;
+ return LangUtils.equals(this.localPart, that.localPart) &&
+ LangUtils.equalsIgnoreCase(this.domain, that.domain);
}
@Override
public String toString() {
- return getCanonicalizedAddress();
+ return getAddress();
}
}
Modified: james/mime4j/branches/dom-api-refactoring/dom/src/test/java/org/apache/james/mime4j/field/address/AddressTest.java
URL: http://svn.apache.org/viewvc/james/mime4j/branches/dom-api-refactoring/dom/src/test/java/org/apache/james/mime4j/field/address/AddressTest.java?rev=1058228&r1=1058227&r2=1058228&view=diff
==============================================================================
--- james/mime4j/branches/dom-api-refactoring/dom/src/test/java/org/apache/james/mime4j/field/address/AddressTest.java (original)
+++ james/mime4j/branches/dom-api-refactoring/dom/src/test/java/org/apache/james/mime4j/field/address/AddressTest.java Wed Jan 12 16:51:57 2011
@@ -415,5 +415,28 @@ public class AddressTest extends TestCas
} catch (ParseException expected) {
}
}
+
+ public void testMailboxEquals() throws Exception {
+ Mailbox m1 = new Mailbox("john.doe", "acme.org");
+ Mailbox m2 = new Mailbox("john doe", "acme.org");
+ Mailbox m3 = new Mailbox("john.doe", "Acme.Org");
+ Mailbox m4 = new Mailbox("john.doe", null);
+ assertTrue(m1.equals(m1));
+ assertFalse(m1.equals(m2));
+ assertTrue(m1.equals(m3));
+ assertFalse(m1.equals(m4));
+ assertFalse(m1.equals(null));
+ }
+ public void testMailboxHashCode() throws Exception {
+ Mailbox m1 = new Mailbox("john.doe", "acme.org");
+ Mailbox m2 = new Mailbox("john doe", "acme.org");
+ Mailbox m3 = new Mailbox("john.doe", "Acme.Org");
+ Mailbox m4 = new Mailbox("john.doe", null);
+ assertTrue(m1.hashCode() == m1.hashCode());
+ assertFalse(m1.hashCode() == m2.hashCode());
+ assertTrue(m1.hashCode() == m3.hashCode());
+ assertFalse(m1.hashCode() == m4.hashCode());
+ }
+
}