OSDN Git Service

CVS最新版の全ファイルを追加
[spring-ext/ozacc-mail.git] / src / java / com / ozacc / mail / xml / impl / JDomXMLBuilder.java
1 package com.ozacc.mail.xml.impl;\r
2 \r
3 import java.io.File;\r
4 import java.io.FileOutputStream;\r
5 import java.io.IOException;\r
6 \r
7 import javax.mail.internet.InternetAddress;\r
8 \r
9 import org.jdom.CDATA;\r
10 import org.jdom.DocType;\r
11 import org.jdom.Document;\r
12 import org.jdom.Element;\r
13 import org.jdom.JDOMException;\r
14 import org.jdom.output.DOMOutputter;\r
15 import org.jdom.output.Format;\r
16 import org.jdom.output.XMLOutputter;\r
17 \r
18 import com.ozacc.mail.Mail;\r
19 import com.ozacc.mail.xml.XMLBuildException;\r
20 import com.ozacc.mail.xml.XMLBuilder;\r
21 \r
22 /**\r
23  * XMLBuilderの実装クラス。\r
24  * \r
25  * @since 1.0\r
26  * @author Tomohiro Otsuka\r
27  * @version $Id: JDomXMLBuilder.java,v 1.6 2004/09/18 00:39:17 otsuka Exp $\r
28  */\r
29 public class JDomXMLBuilder implements XMLBuilder {\r
30 \r
31         public static final String DOCTYPE_PUBLIC = "-//OZACC//DTD MAIL//EN";\r
32 \r
33         public static final String DOCTYPE_SYSTEM = "http://www.ozacc.com/library/dtd/ozacc-mail.dtd";\r
34 \r
35         private String charset = "UTF-8";\r
36 \r
37         /**\r
38          * コンストラクタ。\r
39          */\r
40         public JDomXMLBuilder() {}\r
41 \r
42         /**\r
43          * コンストラクタ。\r
44          * 出力XMLファイルの文字コードを指定します。デフォルトはUTF-8。\r
45          * \r
46          * @param charset 出力XMLファイルの文字コード\r
47          */\r
48         public JDomXMLBuilder(String charset) {\r
49                 this();\r
50                 setCharset(charset);\r
51         }\r
52 \r
53         /**\r
54          * 出力XMLファイルの文字コードを指定します。デフォルトはUTF-8。\r
55          * \r
56          * @param charset 出力XMLファイルの文字コード\r
57          */\r
58         public void setCharset(String charset) {\r
59                 this.charset = charset;\r
60         }\r
61 \r
62         /**\r
63          * 出力XMLファイルの文字コードを返します。\r
64          * \r
65          * @return 出力XMLファイルの文字コード\r
66          */\r
67         public String getCharset() {\r
68                 return charset;\r
69         }\r
70 \r
71         /**\r
72          * @see com.ozacc.mail.xml.XMLBuilder#buildDocument(com.ozacc.mail.Mail)\r
73          */\r
74         public org.w3c.dom.Document buildDocument(Mail mail) throws XMLBuildException {\r
75                 Document doc = buildJDomDocument(mail);\r
76                 DOMOutputter outputter = new DOMOutputter();\r
77                 try {\r
78                         return outputter.output(doc);\r
79                 } catch (JDOMException e) {\r
80                         throw new XMLBuildException("DOM Documentの生成に失敗しました。", e);\r
81                 }\r
82         }\r
83 \r
84         /**\r
85          * 指定されたMailインスタンスからJDOMドキュメントを生成します。\r
86          * \r
87          * @return 生成されたJDOMドキュメント\r
88          */\r
89         public Document buildJDomDocument(Mail mail) {\r
90 \r
91                 Element mailElem = new Element("mail");\r
92 \r
93                 // Return-Path\r
94                 if (mail.getReturnPath() != null) {\r
95                         InternetAddress returnPath = mail.getReturnPath();\r
96                         Element returnPathElem = convertInternetAddressIntoElement(returnPath, "returnPath");\r
97                         mailElem.addContent(returnPathElem);\r
98                 }\r
99 \r
100                 // From\r
101                 if (mail.getFrom() != null) {\r
102                         InternetAddress from = mail.getFrom();\r
103                         Element fromElem = convertInternetAddressIntoElement(from, "from");\r
104                         mailElem.addContent(fromElem);\r
105                 }\r
106 \r
107                 if (mail.getTo().length > 0 || mail.getCc().length > 0 || mail.getBcc().length > 0) {\r
108                         Element recipientsElem = new Element("recipients");\r
109 \r
110                         // To\r
111                         if (mail.getTo().length > 0) {\r
112                                 for (int i = 0; i < mail.getTo().length; i++) {\r
113                                         InternetAddress to = mail.getTo()[i];\r
114                                         Element toElem = convertInternetAddressIntoElement(to, "to");\r
115                                         recipientsElem.addContent(toElem);\r
116                                 }\r
117                         }\r
118                         // Cc\r
119                         if (mail.getCc().length > 0) {\r
120                                 for (int i = 0; i < mail.getCc().length; i++) {\r
121                                         InternetAddress cc = mail.getCc()[i];\r
122                                         Element ccElem = convertInternetAddressIntoElement(cc, "cc");\r
123                                         recipientsElem.addContent(ccElem);\r
124                                 }\r
125                         }\r
126                         // Bcc\r
127                         if (mail.getBcc().length > 0) {\r
128                                 for (int i = 0; i < mail.getBcc().length; i++) {\r
129                                         InternetAddress bcc = mail.getBcc()[i];\r
130                                         Element bccElem = convertInternetAddressIntoElement(bcc, "bcc");\r
131                                         recipientsElem.addContent(bccElem);\r
132                                 }\r
133                         }\r
134                         mailElem.addContent(recipientsElem);\r
135                 }\r
136 \r
137                 // Reply-To\r
138                 if (mail.getReplyTo() != null) {\r
139                         InternetAddress replyTo = mail.getReplyTo();\r
140                         Element replyToElem = convertInternetAddressIntoElement(replyTo, "replyTo");\r
141                         mailElem.addContent(replyToElem);\r
142                 }\r
143 \r
144                 // Subject\r
145                 if (mail.getSubject() != null) {\r
146                         Element subjectElem = new Element("subject");\r
147                         subjectElem.setText(mail.getSubject());\r
148                         mailElem.addContent(subjectElem);\r
149                 }\r
150 \r
151                 // Body\r
152                 if (mail.getText() != null) {\r
153                         Element textElem = new Element("body");\r
154                         textElem.setText(mail.getText());\r
155                         mailElem.addContent(textElem);\r
156                 }\r
157 \r
158                 // Html\r
159                 if (mail.isHtmlMail()) {\r
160                         Element htmlElem = new Element("html");\r
161                         htmlElem.setContent(new CDATA(mail.getHtmlText()));\r
162                         mailElem.addContent(htmlElem);\r
163                 }\r
164 \r
165                 Document doc = new Document(mailElem);\r
166                 DocType docType = new DocType("mail", DOCTYPE_PUBLIC, DOCTYPE_SYSTEM);\r
167                 doc.setDocType(docType);\r
168                 return doc;\r
169         }\r
170 \r
171         /**\r
172          * \r
173          * @param address\r
174          * @param elemName\r
175          * @return\r
176          */\r
177         private Element convertInternetAddressIntoElement(InternetAddress address, String elemName) {\r
178                 Element element = new Element(elemName);\r
179                 element.setAttribute("email", address.getAddress());\r
180                 if (address.getPersonal() != null) {\r
181                         element.setAttribute("name", address.getPersonal());\r
182                 }\r
183                 return element;\r
184         }\r
185 \r
186         /**\r
187          * @see com.ozacc.mail.xml.XMLBuilder#saveDocument(com.ozacc.mail.Mail, java.io.File)\r
188          */\r
189         public void saveDocument(Mail mail, File destFile) throws XMLBuildException {\r
190                 // JDOM Documentを生成\r
191                 Document doc = buildJDomDocument(mail);\r
192 \r
193                 // ファイル出力\r
194                 try {\r
195                         FileOutputStream fos = new FileOutputStream(destFile);\r
196                         XMLOutputter outputter = getXMLOutputter();\r
197                         outputter.output(doc, fos);\r
198                         fos.close();\r
199                 } catch (IOException e) {\r
200                         throw new XMLBuildException("DOM Documentのファイル出力に失敗しました。", e);\r
201                 }\r
202         }\r
203 \r
204         public XMLOutputter getXMLOutputter() {\r
205                 Format format = Format.getPrettyFormat();\r
206                 format.setEncoding(charset);\r
207                 XMLOutputter outputter = new XMLOutputter(format);\r
208                 return outputter;\r
209         }\r
210 }