View Javadoc

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  			// 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 }