OSDN Git Service

CVS最新版の全ファイルを追加
[spring-ext/ozacc-mail.git] / src / test / com / dumbster / smtp / SmtpMessage.java
1 /*\r
2  * Dumbster: a dummy SMTP server.\r
3  * Copyright (C) 2003, Jason Paul Kitchen\r
4  * lilnottsman@yahoo.com\r
5  *\r
6  * This library is free software; you can redistribute it and/or\r
7  * modify it under the terms of the GNU Lesser General Public\r
8  * License as published by the Free Software Foundation; either\r
9  * version 2.1 of the License, or (at your option) any later version.\r
10  *\r
11  * This library is distributed in the hope that it will be useful,\r
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of\r
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU\r
14  * Lesser General Public License for more details.\r
15  *\r
16  * You should have received a copy of the GNU Lesser General Public\r
17  * License along with this library; if not, write to the Free Software\r
18  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA\r
19  */\r
20 package com.dumbster.smtp;\r
21 \r
22 import java.util.ArrayList;\r
23 import java.util.HashMap;\r
24 import java.util.Iterator;\r
25 import java.util.List;\r
26 import java.util.Map;\r
27 \r
28 /**\r
29  * Container for a complete SMTP message - headers and message body.\r
30  */\r
31 public class SmtpMessage {\r
32 \r
33         /** Headers: Map of List of String hashed on header name. */\r
34         private Map headers;\r
35 \r
36         /** Message body. */\r
37         private StringBuffer body;\r
38 \r
39         /**\r
40          * Constructor. Initializes headers Map and body buffer.\r
41          */\r
42         public SmtpMessage() {\r
43                 headers = new HashMap();\r
44                 body = new StringBuffer();\r
45         }\r
46 \r
47         /**\r
48          * Update the headers or body depending on the SmtpResponse object and line of input.\r
49          * @param response SmtpResponse object\r
50          * @param params remainder of input line after SMTP command has been removed\r
51          */\r
52         public void store(SmtpResponse response, String params) {\r
53                 if (params != null) {\r
54                         if (SmtpState.DATA_HDR == response.getNextState()) {\r
55                                 int headerNameEnd = params.indexOf(':');\r
56                                 if (headerNameEnd >= 0) {\r
57                                         String name = params.substring(0, headerNameEnd).trim();\r
58                                         String value = params.substring(headerNameEnd + 1).trim();\r
59                                         addHeader(name, value);\r
60                                 }\r
61                         } else if (SmtpState.DATA_BODY == response.getNextState()) {\r
62                                 body.append(params);\r
63                         }\r
64                 }\r
65         }\r
66 \r
67         /**\r
68          * Get an Iterator over the header names.\r
69          * @return an Iterator over the set of header names (String)\r
70          */\r
71         public Iterator getHeaderNames() {\r
72                 return headers.keySet().iterator();\r
73         }\r
74 \r
75         /**\r
76          * Get the value(s) associated with the given header name.\r
77          * @param name header name\r
78          * @return value(s) associated with the header name\r
79          */\r
80         public String[] getHeaderValues(String name) {\r
81                 List values = (List)headers.get(name);\r
82                 if (values == null) {\r
83                         return new String[0];\r
84                 } else {\r
85                         return (String[])values.toArray(new String[0]);\r
86                 }\r
87         }\r
88 \r
89         /**\r
90          * Get the first values associated with a given header name.\r
91          * @param name header name\r
92          * @return first value associated with the header name\r
93          */\r
94         public String getHeaderValue(String name) {\r
95                 List values = (List)headers.get(name);\r
96                 if (values == null) {\r
97                         return null;\r
98                 } else {\r
99                         return (String)values.iterator().next();\r
100                 }\r
101         }\r
102 \r
103         /**\r
104          * Get the message body.\r
105          * @return message body\r
106          */\r
107         public String getBody() {\r
108                 return body.toString();\r
109         }\r
110 \r
111         /**\r
112          * Adds a header to the Map.\r
113          * @param name header name\r
114          * @param value header value\r
115          */\r
116         private void addHeader(String name, String value) {\r
117                 List valueList = (List)headers.get(name);\r
118                 if (valueList == null) {\r
119                         valueList = new ArrayList();\r
120                         headers.put(name, valueList);\r
121                 }\r
122                 valueList.add(value);\r
123         }\r
124 \r
125         /**\r
126          * String representation of the SmtpMessage.\r
127          * @return a String\r
128          */\r
129         public String toString() {\r
130                 StringBuffer msg = new StringBuffer();\r
131                 for (Iterator i = headers.keySet().iterator(); i.hasNext();) {\r
132                         String name = (String)i.next();\r
133                         List values = (List)headers.get(name);\r
134                         for (Iterator j = values.iterator(); j.hasNext();) {\r
135                                 String value = (String)j.next();\r
136                                 msg.append(name);\r
137                                 msg.append(": ");\r
138                                 msg.append(value);\r
139                                 msg.append('\n');\r
140                         }\r
141                 }\r
142                 msg.append('\n');\r
143                 msg.append(body);\r
144                 msg.append('\n');\r
145                 return msg.toString();\r
146         }\r
147 }