1 package com.ozacc.mail.mock;
2
3 import java.util.ArrayList;
4 import java.util.List;
5
6 import javax.mail.internet.MimeMessage;
7
8 import org.apache.commons.logging.Log;
9 import org.apache.commons.logging.LogFactory;
10
11 import com.ozacc.mail.MailException;
12 import com.ozacc.mail.NotConnectedException;
13 import com.ozacc.mail.fetch.FetchMailPro;
14 import com.ozacc.mail.fetch.ReceivedMail;
15
16 /***
17 * FetchMailProImplクラスのMock。
18 *
19 * @since 1.2
20 * @author Tomohiro Otsuka
21 * @version $Id: MockFetchMailPro.java,v 1.1.2.1 2005/02/05 10:40:24 otsuka Exp $
22 */
23 public class MockFetchMailPro implements FetchMailPro {
24
25 private static Log log = LogFactory.getLog(MockFetchMailPro.class);
26
27 /*** デフォルトのSMTPサーバ。「localhost」 */
28 public static final String DEFAULT_HOST = "localhost";
29
30 /*** デフォルトのプロトコル。「pop3」 */
31 public static final String DEFAULT_PROTOCOL = "pop3";
32
33 /***
34 * デフォルトのポート。「-1」<br>
35 * -1はプロトコルに応じた適切なポートを設定する特別な値。
36 */
37 public static final int DEFAULT_PORT = -1;
38
39 private static final String INBOX_NAME = "INBOX";
40
41 private String host = DEFAULT_HOST;
42
43 private String protocol = DEFAULT_PROTOCOL;
44
45 private int port = DEFAULT_PORT;
46
47 private String username;
48
49 private String password;
50
51 private boolean javaMailLogEnabled;
52
53 private boolean connected = false;
54
55 private List receivedMails;
56
57 /***
58 * コンストラクタ。
59 */
60 public MockFetchMailPro() {
61 super();
62 receivedMails = new ArrayList();
63 }
64
65 /***
66 * @see com.ozacc.mail.fetch.FetchMailPro#connect()
67 */
68 public synchronized void connect() throws MailException {
69 if (isConnected()) {
70 log.warn("既にサーバ[" + host + "]に接続されています。再接続するには先に接続を切断する必要があります。");
71 return;
72 }
73
74 log.debug(protocol.toUpperCase() + "サーバ[" + host + "]に接続するフリ。");
75 connected = true;
76 log.info(protocol.toUpperCase() + "サーバ[" + host + "]に接続したフリ。");
77 }
78
79 /***
80 * @see com.ozacc.mail.fetch.FetchMailPro#disconnect()
81 */
82 public synchronized void disconnect() throws MailException {
83 if (isConnected()) {
84 log.debug(protocol.toUpperCase() + "サーバ[" + host + "]との接続を切断するフリ。");
85 connected = false;
86 log.debug(protocol.toUpperCase() + "サーバ[" + host + "]との接続を切断したフリ。");
87 }
88 }
89
90 /***
91 * <code>MockFetchMailPro</code>の<code>getMails()</code>メソッドが返す
92 * <code>ReceivedMail</code>インスタンスをセットします。
93 *
94 * @param mail <code>getMails()</code>メソッドが返す<code>ReceivedMail</code>インスタンス
95 */
96 public void setupGetMails(ReceivedMail mail) {
97 receivedMails.add(mail);
98 }
99
100 /***
101 * <code>MockFetchMailPro</code>の<code>getMails()</code>メソッドが返す
102 * <code>ReceivedMail</code>インスタンスをセットします。
103 *
104 * @param mails <code>getMails()</code>メソッドが返す<code>ReceivedMail</code>インスタンス配列
105 */
106 public void setupGetMails(ReceivedMail[] mails) {
107 for (int i = 0; i < mails.length; i++) {
108 ReceivedMail mail = mails[i];
109 setupGetMails(mail);
110 }
111 }
112
113 /***
114 * @see com.ozacc.mail.fetch.FetchMailPro#getMailCount()
115 */
116 public int getMailCount() throws MailException {
117 return receivedMails.size();
118 }
119
120 /***
121 * @see com.ozacc.mail.fetch.FetchMailPro#getMail(int)
122 */
123 public synchronized ReceivedMail getMail(int num) throws MailException {
124 if (isConnected()) {
125 return (ReceivedMail)receivedMails.get(num - 1);
126 } else {
127 throw new NotConnectedException(protocol.toUpperCase() + "サーバ[" + host + "]に接続されていません。");
128 }
129 }
130
131 /***
132 * @see com.ozacc.mail.fetch.FetchMailPro#getMails(boolean)
133 */
134 public synchronized ReceivedMail[] getMails(boolean delete) throws MailException {
135 if (isConnected()) {
136 ReceivedMail[] results = (ReceivedMail[])receivedMails
137 .toArray(new ReceivedMail[receivedMails.size()]);
138 if (delete) {
139 receivedMails.clear();
140 }
141 return results;
142 } else {
143 throw new NotConnectedException(protocol.toUpperCase() + "サーバ[" + host + "]に接続されていません。");
144 }
145 }
146
147 /***
148 * @see com.ozacc.mail.fetch.FetchMailPro#getMessage(int)
149 */
150 public MimeMessage getMessage(int num) throws MailException {
151 throw new UnsupportedOperationException("申し訳ございません。MockFetchMailProでは、このメソッドをサポートしていません。");
152 }
153
154 /***
155 * @see com.ozacc.mail.fetch.FetchMailPro#getMessages(boolean)
156 */
157 public MimeMessage[] getMessages(boolean delete) throws MailException {
158 throw new UnsupportedOperationException("申し訳ございません。MockFetchMailProでは、このメソッドをサポートしていません。");
159 }
160
161 /***
162 * @see com.ozacc.mail.fetch.FetchMailPro#changeFolder(java.lang.String)
163 */
164 public synchronized void changeFolder(String folderName) throws MailException {
165 if (!isConnected()) {
166 log.warn("メールサーバに接続されていません。");
167 return;
168 }
169
170 log.debug("メッセージフォルダ[" + folderName + "]をオープンするフリ。");
171 log.debug("メッセージフォルダ[" + folderName + "]をオープンしたフリ。");
172 }
173
174 /***
175 * @see com.ozacc.mail.fetch.FetchMailPro#isConnected()
176 */
177 public boolean isConnected() {
178 return connected;
179 }
180
181 /***
182 * @return Returns the host.
183 */
184 public String getHost() {
185 return host;
186 }
187
188 /***
189 * @param host The host to set.
190 */
191 public void setHost(String host) {
192 this.host = host;
193 }
194
195 /***
196 * @return Returns the javaMailLogEnabled.
197 */
198 public boolean isJavaMailLogEnabled() {
199 return javaMailLogEnabled;
200 }
201
202 /***
203 * @param javaMailLogEnabled The javaMailLogEnabled to set.
204 */
205 public void setJavaMailLogEnabled(boolean javaMailLogEnabled) {
206 this.javaMailLogEnabled = javaMailLogEnabled;
207 }
208
209 /***
210 * @return Returns the password.
211 */
212 public String getPassword() {
213 return password;
214 }
215
216 /***
217 * @param password The password to set.
218 */
219 public void setPassword(String password) {
220 this.password = password;
221 }
222
223 /***
224 * @return Returns the port.
225 */
226 public int getPort() {
227 return port;
228 }
229
230 /***
231 * @param port The port to set.
232 */
233 public void setPort(int port) {
234 this.port = port;
235 }
236
237 /***
238 * @return Returns the protocol.
239 */
240 public String getProtocol() {
241 return protocol;
242 }
243
244 /***
245 * @param protocol The protocol to set.
246 */
247 public void setProtocol(String protocol) {
248 this.protocol = protocol;
249 }
250
251 /***
252 * @return Returns the username.
253 */
254 public String getUsername() {
255 return username;
256 }
257
258 /***
259 * @param username The username to set.
260 */
261 public void setUsername(String username) {
262 this.username = username;
263 }
264 }