OSDN Git Service

Migrated to jakarta namespace and bumped version number to 2.0.0
[spring-ext/ozacc-mail.git] / src / main / java / com / ozacc / mail / mock / EqualityCheck.java
1 package com.ozacc.mail.mock;
2
3 import jakarta.mail.internet.InternetAddress;
4
5 import com.ozacc.mail.Mail;
6
7 /**
8  * メールが同値であることを調べるメソッドを提供。
9  * <p>
10  * <strong>注:</strong> 添付ファイルは比較対象になりません。
11  * 
12  * @since 1.1
13  * 
14  * @author Tomohiro Otsuka
15  * @version $Id: EqualityCheck.java,v 1.3.2.1 2004/11/25 08:01:18 otsuka Exp $
16  */
17 public class EqualityCheck {
18
19         private EqualityCheck() {}
20
21         /**
22          * expectedとsentのメール内容が同一であるかどうかを判定します。<br>
23          * MultipartMailのインスタンスも指定できます。但し、添付ファイルはチェックされません。
24          * 
25          * @param expected
26          * @param sent
27          * @return expectedとsentのメール内容が同一である場合 true
28          */
29         public static boolean equals(Mail expected, Mail sent) {
30                 boolean mockMode = (expected instanceof MockMail);
31
32                 // マルチパートメールの場合
33                 if (expected.isMultipartMail()) {
34
35                         // HTML
36                         if (!mockMode) {
37                                 if ((expected.getHtmlText() == null && sent.getHtmlText() != null)
38                                                 || (expected.getHtmlText() != null && sent.getHtmlText() == null)
39                                                 || (!expected.getHtmlText().equals(sent.getHtmlText()))) {
40                                         return false;
41                                 }
42                         } else if (mockMode && expected.getHtmlText() != null) {
43                                 if (!expected.getHtmlText().equals(sent.getHtmlText())) {
44                                         return false;
45                                 }
46                         }
47                 }
48
49                 // Return-Path
50                 if (!mockMode || (mockMode && expected.getReturnPath() != null)) {
51                         if (expected.getReturnPath() != null && sent.getReturnPath() != null) {
52                                 if (!expected.getReturnPath().equals(sent.getReturnPath())) {
53                                         return false;
54                                 }
55                         } else if ((expected.getReturnPath() != null && sent.getReturnPath() == null)
56                                         || (expected.getReturnPath() == null && sent.getReturnPath() != null)) {
57                                 return false;
58                         }
59                 }
60
61                 //      From
62                 if (!mockMode || (mockMode && expected.getFrom() != null)) {
63                         if (expected.getFrom() != null && sent.getFrom() != null) {
64                                 if (!equals(expected.getFrom(), sent.getFrom())) {
65                                         return false;
66                                 }
67                         } else if ((expected.getFrom() != null && sent.getFrom() == null)
68                                         || (expected.getFrom() == null && sent.getFrom() != null)) {
69                                 return false;
70                         }
71                 }
72
73                 // to
74                 InternetAddress[] expectedAddresses = expected.getTo();
75                 InternetAddress[] sentAddresses = sent.getTo();
76                 if (!mockMode || (mockMode && expectedAddresses.length > 0)) {
77                         if (expectedAddresses.length != sentAddresses.length) {
78                                 return false;
79                         }
80                         for (int i = 0; i < expectedAddresses.length; i++) {
81                                 if (!equals(expectedAddresses[i], sentAddresses[i])) {
82                                         return false;
83                                 }
84                         }
85                 }
86
87                 // cc
88                 expectedAddresses = expected.getCc();
89                 sentAddresses = sent.getCc();
90                 if (!mockMode || (mockMode && expectedAddresses.length > 0)) {
91                         if (expectedAddresses.length != sentAddresses.length) {
92                                 return false;
93                         }
94                         for (int i = 0; i < expectedAddresses.length; i++) {
95                                 if (!equals(expectedAddresses[i], sentAddresses[i])) {
96                                         return false;
97                                 }
98                         }
99                 }
100
101                 // bcc
102                 expectedAddresses = expected.getBcc();
103                 sentAddresses = sent.getBcc();
104                 if (!mockMode || (mockMode && expectedAddresses.length > 0)) {
105                         if (expectedAddresses.length != sentAddresses.length) {
106                                 return false;
107                         }
108                         for (int i = 0; i < expectedAddresses.length; i++) {
109                                 if (!equals(expectedAddresses[i], sentAddresses[i])) {
110                                         return false;
111                                 }
112                         }
113                 }
114
115                 // Reply-To
116                 if (!mockMode || (mockMode && expected.getReplyTo() != null)) {
117                         if (expected.getReplyTo() != null && sent.getReplyTo() != null) {
118                                 if (!equals(expected.getReplyTo(), sent.getReplyTo())) {
119                                         return false;
120                                 }
121                         } else if ((expected.getReplyTo() != null && sent.getReplyTo() == null)
122                                         || (expected.getReplyTo() == null && sent.getReplyTo() != null)) {
123                                 return false;
124                         }
125                 }
126
127                 // 件名
128                 if (!mockMode || (mockMode && expected.getSubject().length() > 0)) {
129                         if (!expected.getSubject().equals(sent.getSubject())) {
130                                 return false;
131                         }
132                 }
133
134                 // 本文
135                 if (!mockMode || (mockMode && expected.getText().length() > 0)) {
136                         if (!expected.getText().equals(sent.getText())) {
137                                 return false;
138                         }
139                 }
140
141                 return true;
142         }
143
144         /**
145          * 指定された二つのInternetAddressインスタンスが等しいかどうか判定します。
146          * <p>
147          * InternetAddress#equals()メソッドでは、メールアドレスしか検査しないため、
148          * このメソッドではInternetAddressに名前が含まれている場合、その名前も
149          * 等しいかどうか検査します。
150          * 
151          * @since 1.1.3
152          * @param a 比較するInternetAddressインスタンス
153          * @param b 比較するInternetAddressインスタンス
154          * @return 二つのInternetAddressインスタンスが等しい場合 true
155          */
156         public static boolean equals(InternetAddress a, InternetAddress b) {
157                 if (a.equals(b)) {
158                         if (a.getPersonal() != null || b.getPersonal() != null) {
159                                 return a.getPersonal().equals(b.getPersonal());
160                         } else {
161                                 return true;
162                         }
163                 }
164                 return false;
165         }
166 }