1 package com.ozacc.mail.xml.impl;
\r
4 import java.io.FileOutputStream;
\r
5 import java.io.IOException;
\r
7 import javax.mail.internet.InternetAddress;
\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
18 import com.ozacc.mail.Mail;
\r
19 import com.ozacc.mail.xml.XMLBuildException;
\r
20 import com.ozacc.mail.xml.XMLBuilder;
\r
26 * @author Tomohiro Otsuka
\r
27 * @version $Id: JDomXMLBuilder.java,v 1.6 2004/09/18 00:39:17 otsuka Exp $
\r
29 public class JDomXMLBuilder implements XMLBuilder {
\r
31 public static final String DOCTYPE_PUBLIC = "-//OZACC//DTD MAIL//EN";
\r
33 public static final String DOCTYPE_SYSTEM = "http://www.ozacc.com/library/dtd/ozacc-mail.dtd";
\r
35 private String charset = "UTF-8";
\r
40 public JDomXMLBuilder() {}
\r
44 * 出力XMLファイルの文字コードを指定します。デフォルトはUTF-8。
\r
46 * @param charset 出力XMLファイルの文字コード
\r
48 public JDomXMLBuilder(String charset) {
\r
50 setCharset(charset);
\r
54 * 出力XMLファイルの文字コードを指定します。デフォルトはUTF-8。
\r
56 * @param charset 出力XMLファイルの文字コード
\r
58 public void setCharset(String charset) {
\r
59 this.charset = charset;
\r
63 * 出力XMLファイルの文字コードを返します。
\r
65 * @return 出力XMLファイルの文字コード
\r
67 public String getCharset() {
\r
72 * @see com.ozacc.mail.xml.XMLBuilder#buildDocument(com.ozacc.mail.Mail)
\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
78 return outputter.output(doc);
\r
79 } catch (JDOMException e) {
\r
80 throw new XMLBuildException("DOM Documentの生成に失敗しました。", e);
\r
85 * 指定されたMailインスタンスからJDOMドキュメントを生成します。
\r
87 * @return 生成されたJDOMドキュメント
\r
89 public Document buildJDomDocument(Mail mail) {
\r
91 Element mailElem = new Element("mail");
\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
101 if (mail.getFrom() != null) {
\r
102 InternetAddress from = mail.getFrom();
\r
103 Element fromElem = convertInternetAddressIntoElement(from, "from");
\r
104 mailElem.addContent(fromElem);
\r
107 if (mail.getTo().length > 0 || mail.getCc().length > 0 || mail.getBcc().length > 0) {
\r
108 Element recipientsElem = new Element("recipients");
\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
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
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
134 mailElem.addContent(recipientsElem);
\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
145 if (mail.getSubject() != null) {
\r
146 Element subjectElem = new Element("subject");
\r
147 subjectElem.setText(mail.getSubject());
\r
148 mailElem.addContent(subjectElem);
\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
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
165 Document doc = new Document(mailElem);
\r
166 DocType docType = new DocType("mail", DOCTYPE_PUBLIC, DOCTYPE_SYSTEM);
\r
167 doc.setDocType(docType);
\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
187 * @see com.ozacc.mail.xml.XMLBuilder#saveDocument(com.ozacc.mail.Mail, java.io.File)
\r
189 public void saveDocument(Mail mail, File destFile) throws XMLBuildException {
\r
190 // JDOM Documentを生成
\r
191 Document doc = buildJDomDocument(mail);
\r
195 FileOutputStream fos = new FileOutputStream(destFile);
\r
196 XMLOutputter outputter = getXMLOutputter();
\r
197 outputter.output(doc, fos);
\r
199 } catch (IOException e) {
\r
200 throw new XMLBuildException("DOM Documentのファイル出力に失敗しました。", e);
\r
204 public XMLOutputter getXMLOutputter() {
\r
205 Format format = Format.getPrettyFormat();
\r
206 format.setEncoding(charset);
\r
207 XMLOutputter outputter = new XMLOutputter(format);
\r