1 package com.ozacc.mail.mock;
2
3 import javax.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
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
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
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
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
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
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
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 }