You are viewing a plain text version of this content. The canonical link for it is here.
Posted to server-dev@james.apache.org by ad...@apache.org on 2018/08/23 12:12:48 UTC

[3/4] james-project git commit: JAMES-2167 Correct MailAdress equals

JAMES-2167 Correct MailAdress equals


Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/09b5cb56
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/09b5cb56
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/09b5cb56

Branch: refs/heads/master
Commit: 09b5cb567e3292b1739993559bc93d37bd99a478
Parents: ec911c1
Author: Benoit Tellier <bt...@linagora.com>
Authored: Tue Aug 21 10:31:02 2018 +0700
Committer: Antoine Duprat <ad...@linagora.com>
Committed: Thu Aug 23 13:59:17 2018 +0200

----------------------------------------------------------------------
 .../java/org/apache/james/core/MailAddress.java | 30 +++++++++++++++-----
 .../org/apache/james/core/MailAddressTest.java  | 16 +++++++++++
 2 files changed, 39 insertions(+), 7 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/james-project/blob/09b5cb56/core/src/main/java/org/apache/james/core/MailAddress.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/james/core/MailAddress.java b/core/src/main/java/org/apache/james/core/MailAddress.java
index e53f5bc..cd206ef 100644
--- a/core/src/main/java/org/apache/james/core/MailAddress.java
+++ b/core/src/main/java/org/apache/james/core/MailAddress.java
@@ -20,6 +20,8 @@
 package org.apache.james.core;
 
 import java.util.Locale;
+import java.util.Objects;
+import java.util.Optional;
 
 import javax.mail.internet.AddressException;
 import javax.mail.internet.InternetAddress;
@@ -108,11 +110,12 @@ public class MailAddress implements java.io.Serializable {
         return NULL_SENDER;
     }
 
-    private String localPart = null;
-    private Domain domain = null;
+    private final String localPart;
+    private final Domain domain;
 
     private MailAddress() {
-
+        localPart = null;
+        domain = null;
     }
 
     /**
@@ -317,7 +320,9 @@ public class MailAddress implements java.io.Serializable {
 
     @Override
     public String toString() {
-        return localPart + "@" + domain.asString();
+        return localPart + "@" + Optional.ofNullable(domain)
+            .map(Domain::asString)
+            .orElse("");
     }
     
     public String asPrettyString() {
@@ -350,7 +355,7 @@ public class MailAddress implements java.io.Serializable {
      * @returns true if the given object is equal to this one, false otherwise
      */
     @Override
-    public boolean equals(Object obj) {
+    public final boolean equals(Object obj) {
         if (obj == null) {
             return false;
         } else if (obj instanceof String) {
@@ -361,11 +366,22 @@ public class MailAddress implements java.io.Serializable {
             if (isNullSender() && addr.isNullSender()) {
                 return true;
             }
-            return getLocalPart().equalsIgnoreCase(addr.getLocalPart()) && getDomain().equals(addr.getDomain());
+            return equalsIgnoreCase(getLocalPart(), addr.getLocalPart())
+                && Objects.equals(getDomain(), addr.getDomain());
         }
         return false;
     }
 
+    private boolean equalsIgnoreCase(String a, String b) {
+        if (a == null ^ b == null) {
+            return false;
+        }
+        if (a == null) {
+            return true;
+        }
+        return a.equalsIgnoreCase(b);
+    }
+
     /**
      * Returns a hash code value for this object.
      * <p/>
@@ -376,7 +392,7 @@ public class MailAddress implements java.io.Serializable {
      * @return the hashcode.
      */
     @Override
-    public int hashCode() {
+    public final int hashCode() {
         return toString().toLowerCase(Locale.US).hashCode();
     }
 

http://git-wip-us.apache.org/repos/asf/james-project/blob/09b5cb56/core/src/test/java/org/apache/james/core/MailAddressTest.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/org/apache/james/core/MailAddressTest.java b/core/src/test/java/org/apache/james/core/MailAddressTest.java
index edb1cfa..f7cfc02 100644
--- a/core/src/test/java/org/apache/james/core/MailAddressTest.java
+++ b/core/src/test/java/org/apache/james/core/MailAddressTest.java
@@ -19,6 +19,8 @@
 
 package org.apache.james.core;
 
+import static org.assertj.core.api.Assertions.assertThat;
+
 import javax.mail.internet.AddressException;
 import javax.mail.internet.InternetAddress;
 
@@ -26,6 +28,8 @@ import org.assertj.core.api.Assertions;
 import org.junit.Assert;
 import org.junit.Test;
 
+import nl.jqno.equalsverifier.EqualsVerifier;
+
 public class MailAddressTest {
 
     private static final String GOOD_LOCAL_PART = "\"quoted@local part\"";
@@ -222,4 +226,16 @@ public class MailAddressTest {
         Assert.assertTrue(a.toString() + " != " + b.toString(), a.equals(b));
         Assert.assertFalse(a.toString() + " != " + null, a.equals(null));
     }
+
+    @Test
+    public void equalsShouldReturnTrueWhenBothNullSender() {
+        assertThat(MailAddress.nullSender())
+            .isEqualTo(MailAddress.nullSender());
+    }
+
+    @Test
+    public void shouldMatchBeanContract() {
+        EqualsVerifier.forClass(MailAddress.class)
+            .verify();
+    }
 }


---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org