1 package com.ozacc.mail.xml.impl;
4 import java.io.FileOutputStream;
5 import java.io.IOException;
7 import javax.mail.internet.InternetAddress;
9 import org.jdom2.CDATA;
10 import org.jdom2.DocType;
11 import org.jdom2.Document;
12 import org.jdom2.Element;
13 import org.jdom2.JDOMException;
14 import org.jdom2.output.DOMOutputter;
15 import org.jdom2.output.Format;
16 import org.jdom2.output.XMLOutputter;
18 import com.ozacc.mail.Mail;
19 import com.ozacc.mail.xml.XMLBuildException;
20 import com.ozacc.mail.xml.XMLBuilder;
26 * @author Tomohiro Otsuka
27 * @version $Id: JDomXMLBuilder.java,v 1.6 2004/09/18 00:39:17 otsuka Exp $
29 public class JDomXMLBuilder implements XMLBuilder {
31 public static final String DOCTYPE_PUBLIC = "-//OZACC//DTD MAIL//EN";
33 public static final String DOCTYPE_SYSTEM = "http://www.ozacc.com/library/dtd/ozacc-mail.dtd";
35 private String charset = "UTF-8";
40 public JDomXMLBuilder() {}
44 * 出力XMLファイルの文字コードを指定します。デフォルトはUTF-8。
46 * @param charset 出力XMLファイルの文字コード
48 public JDomXMLBuilder(String charset) {
54 * 出力XMLファイルの文字コードを指定します。デフォルトはUTF-8。
56 * @param charset 出力XMLファイルの文字コード
58 public void setCharset(String charset) {
59 this.charset = charset;
63 * 出力XMLファイルの文字コードを返します。
65 * @return 出力XMLファイルの文字コード
67 public String getCharset() {
72 * @see com.ozacc.mail.xml.XMLBuilder#buildDocument(com.ozacc.mail.Mail)
74 public org.w3c.dom.Document buildDocument(Mail mail) throws XMLBuildException {
75 Document doc = buildJDomDocument(mail);
76 DOMOutputter outputter = new DOMOutputter();
78 return outputter.output(doc);
79 } catch (JDOMException e) {
80 throw new XMLBuildException("DOM Documentの生成に失敗しました。", e);
85 * 指定されたMailインスタンスからJDOMドキュメントを生成します。
87 * @return 生成されたJDOMドキュメント
89 public Document buildJDomDocument(Mail mail) {
91 Element mailElem = new Element("mail");
94 if (mail.getReturnPath() != null) {
95 InternetAddress returnPath = mail.getReturnPath();
96 Element returnPathElem = convertInternetAddressIntoElement(returnPath, "returnPath");
97 mailElem.addContent(returnPathElem);
101 if (mail.getFrom() != null) {
102 InternetAddress from = mail.getFrom();
103 Element fromElem = convertInternetAddressIntoElement(from, "from");
104 mailElem.addContent(fromElem);
107 if (mail.getTo().length > 0 || mail.getCc().length > 0 || mail.getBcc().length > 0) {
108 Element recipientsElem = new Element("recipients");
111 if (mail.getTo().length > 0) {
112 for (int i = 0; i < mail.getTo().length; i++) {
113 InternetAddress to = mail.getTo()[i];
114 Element toElem = convertInternetAddressIntoElement(to, "to");
115 recipientsElem.addContent(toElem);
119 if (mail.getCc().length > 0) {
120 for (int i = 0; i < mail.getCc().length; i++) {
121 InternetAddress cc = mail.getCc()[i];
122 Element ccElem = convertInternetAddressIntoElement(cc, "cc");
123 recipientsElem.addContent(ccElem);
127 if (mail.getBcc().length > 0) {
128 for (int i = 0; i < mail.getBcc().length; i++) {
129 InternetAddress bcc = mail.getBcc()[i];
130 Element bccElem = convertInternetAddressIntoElement(bcc, "bcc");
131 recipientsElem.addContent(bccElem);
134 mailElem.addContent(recipientsElem);
138 if (mail.getReplyTo() != null) {
139 InternetAddress replyTo = mail.getReplyTo();
140 Element replyToElem = convertInternetAddressIntoElement(replyTo, "replyTo");
141 mailElem.addContent(replyToElem);
145 if (mail.getSubject() != null) {
146 Element subjectElem = new Element("subject");
147 subjectElem.setText(mail.getSubject());
148 mailElem.addContent(subjectElem);
152 if (mail.getText() != null) {
153 Element textElem = new Element("body");
154 textElem.setText(mail.getText());
155 mailElem.addContent(textElem);
159 if (mail.isHtmlMail()) {
160 Element htmlElem = new Element("html");
161 htmlElem.setContent(new CDATA(mail.getHtmlText()));
162 mailElem.addContent(htmlElem);
165 Document doc = new Document(mailElem);
166 DocType docType = new DocType("mail", DOCTYPE_PUBLIC, DOCTYPE_SYSTEM);
167 doc.setDocType(docType);
177 private Element convertInternetAddressIntoElement(InternetAddress address, String elemName) {
178 Element element = new Element(elemName);
179 element.setAttribute("email", address.getAddress());
180 if (address.getPersonal() != null) {
181 element.setAttribute("name", address.getPersonal());
187 * @see com.ozacc.mail.xml.XMLBuilder#saveDocument(com.ozacc.mail.Mail, java.io.File)
189 public void saveDocument(Mail mail, File destFile) throws XMLBuildException {
191 Document doc = buildJDomDocument(mail);
195 FileOutputStream fos = new FileOutputStream(destFile);
196 XMLOutputter outputter = getXMLOutputter();
197 outputter.output(doc, fos);
199 } catch (IOException e) {
200 throw new XMLBuildException("DOM Documentのファイル出力に失敗しました。", e);
204 public XMLOutputter getXMLOutputter() {
205 Format format = Format.getPrettyFormat();
206 format.setEncoding(charset);
207 return new XMLOutputter(format);