+++ /dev/null
-package com.ozacc.mail.xml.impl;\r
-\r
-import java.io.File;\r
-import java.util.Properties;\r
-\r
-import javax.mail.internet.InternetAddress;\r
-import javax.xml.parsers.DocumentBuilder;\r
-import javax.xml.parsers.DocumentBuilderFactory;\r
-import javax.xml.parsers.FactoryConfigurationError;\r
-import javax.xml.parsers.ParserConfigurationException;\r
-import javax.xml.transform.OutputKeys;\r
-import javax.xml.transform.Transformer;\r
-import javax.xml.transform.TransformerException;\r
-import javax.xml.transform.TransformerFactory;\r
-import javax.xml.transform.dom.DOMSource;\r
-import javax.xml.transform.stream.StreamResult;\r
-\r
-import org.w3c.dom.Document;\r
-import org.w3c.dom.Element;\r
-\r
-import com.ozacc.mail.Mail;\r
-import com.ozacc.mail.xml.XMLBuildException;\r
-import com.ozacc.mail.xml.XMLBuilder;\r
-\r
-/**\r
- * JDK 1.4以降の標準XMLライブラリを使用して実装されたXMLBuilder。\r
- * \r
- * @since 1.0\r
- * @author Tomohiro Otsuka\r
- * @version $Id: XMLBuilderImpl.java,v 1.4.2.1 2005/01/21 22:15:07 otsuka Exp $\r
- */\r
-public class XMLBuilderImpl implements XMLBuilder {\r
-\r
- private String charset = "UTF-8";\r
-\r
- /**\r
- * コンストラクタ。\r
- */\r
- public XMLBuilderImpl() {}\r
-\r
- /**\r
- * コンストラクタ。\r
- * 出力XMLファイルの文字コードを指定します。デフォルトはUTF-8。\r
- * \r
- * @param charset 出力XMLファイルの文字コード\r
- */\r
- public XMLBuilderImpl(String charset) {\r
- super();\r
- this.charset = charset;\r
- }\r
-\r
- /**\r
- * 出力XMLファイルの文字コードを返します。\r
- * \r
- * @return 出力XMLファイルの文字コード\r
- */\r
- public String getCharset() {\r
- return charset;\r
- }\r
-\r
- /**\r
- * 出力XMLファイルの文字コードを指定します。デフォルトはUTF-8。\r
- * \r
- * @param charset 出力XMLファイルの文字コード\r
- */\r
- public void setCharset(String charset) {\r
- this.charset = charset;\r
- }\r
-\r
- /**\r
- * @see com.ozacc.mail.xml.XMLBuilder#buildDocument(com.ozacc.mail.Mail)\r
- */\r
- public Document buildDocument(Mail mail) throws XMLBuildException {\r
- Document doc = createNewDocument();\r
-\r
- /*DOMImplementation domImpl = doc.getImplementation();\r
- DocumentType docType = domImpl.createDocumentType("mail", Mail.DOCTYPE_PUBLIC, Mail.DOCTYPE_SYSTEM);\r
- doc.appendChild(docType);*/\r
-\r
- Element mailElem = doc.createElement("mail");\r
-\r
- // Return-Path\r
- if (mail.getReturnPath() != null) {\r
- InternetAddress returnPath = mail.getReturnPath();\r
- Element returnPathElem = convertInternetAddressIntoElement(returnPath, "returnPath",\r
- doc);\r
- mailElem.appendChild(returnPathElem);\r
- }\r
-\r
- // From\r
- if (mail.getFrom() != null) {\r
- InternetAddress from = mail.getFrom();\r
- Element fromElem = convertInternetAddressIntoElement(from, "from", doc);\r
- mailElem.appendChild(fromElem);\r
- }\r
-\r
- if (mail.getTo().length > 0 || mail.getCc().length > 0 || mail.getBcc().length > 0) {\r
- Element recipientsElem = doc.createElement("recipients");\r
-\r
- // To\r
- if (mail.getTo().length > 0) {\r
- for (int i = 0; i < mail.getTo().length; i++) {\r
- InternetAddress to = mail.getTo()[i];\r
- Element toElem = convertInternetAddressIntoElement(to, "to", doc);\r
- recipientsElem.appendChild(toElem);\r
- }\r
- }\r
- // Cc\r
- if (mail.getCc().length > 0) {\r
- for (int i = 0; i < mail.getCc().length; i++) {\r
- InternetAddress cc = mail.getCc()[i];\r
- Element ccElem = convertInternetAddressIntoElement(cc, "cc", doc);\r
- recipientsElem.appendChild(ccElem);\r
- }\r
- }\r
- // Bcc\r
- if (mail.getBcc().length > 0) {\r
- for (int i = 0; i < mail.getBcc().length; i++) {\r
- InternetAddress bcc = mail.getBcc()[i];\r
- Element bccElem = convertInternetAddressIntoElement(bcc, "bcc", doc);\r
- recipientsElem.appendChild(bccElem);\r
- }\r
- }\r
- mailElem.appendChild(recipientsElem);\r
- }\r
-\r
- // Reply-To\r
- if (mail.getReplyTo() != null) {\r
- InternetAddress replyTo = mail.getReplyTo();\r
- Element replyToElem = convertInternetAddressIntoElement(replyTo, "replyTo", doc);\r
- mailElem.appendChild(replyToElem);\r
- }\r
-\r
- // Subject\r
- if (mail.getSubject() != null) {\r
- Element subjectElem = doc.createElement("subject");\r
- subjectElem.appendChild(doc.createTextNode(mail.getSubject()));\r
- mailElem.appendChild(subjectElem);\r
- }\r
-\r
- // Body\r
- if (mail.getText() != null) {\r
- Element bodyElem = doc.createElement("body");\r
- bodyElem.appendChild(doc.createTextNode(mail.getText()));\r
- mailElem.appendChild(bodyElem);\r
- }\r
-\r
- // Html\r
- if (mail.isHtmlMail()) {\r
- Element htmlElem = doc.createElement("html");\r
- htmlElem.appendChild(doc.createCDATASection(mail.getHtmlText()));\r
- mailElem.appendChild(htmlElem);\r
- }\r
-\r
- doc.appendChild(mailElem);\r
-\r
- return doc;\r
- }\r
-\r
- public static Document createNewDocument() throws FactoryConfigurationError {\r
- DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();\r
- try {\r
- DocumentBuilder db = dbf.newDocumentBuilder();\r
- Document doc = db.newDocument();\r
- return doc;\r
- } catch (ParserConfigurationException e) {\r
- // never be thrown\r
- throw new XMLBuildException("", e);\r
- }\r
- }\r
-\r
- private Element convertInternetAddressIntoElement(InternetAddress address, String elemName,\r
- Document doc) {\r
- Element element = doc.createElement(elemName);\r
- element.setAttribute("email", address.getAddress());\r
- if (address.getPersonal() != null) {\r
- element.setAttribute("name", address.getPersonal());\r
- }\r
- return element;\r
- }\r
-\r
- /**\r
- * 指定されたMailインスタンスからXMLドキュメントを生成し、\r
- * 指定されたファイルに保存します。\r
- * \r
- * このメソッド内部で使用されるTransformerFactoryがスレッドセーフではないため、synchronzedメソッドになっています。\r
- * \r
- * @see com.ozacc.mail.xml.XMLBuilder#saveDocument(com.ozacc.mail.Mail, java.io.File)\r
- * @see TransformerFactory\r
- */\r
- public synchronized void saveDocument(Mail mail, File destFile) throws XMLBuildException {\r
- Document doc = buildDocument(mail);\r
-\r
- Transformer t;\r
- try {\r
- t = TransformerFactory.newInstance().newTransformer();\r
- } catch (Exception e) {\r
- // never be thrown\r
- throw new XMLBuildException(e.getMessage());\r
- }\r
- t.setOutputProperties(getOutputProperties());\r
-\r
- DOMSource source = new DOMSource(doc);\r
- StreamResult result = new StreamResult(destFile);\r
- try {\r
- t.transform(source, result);\r
- } catch (TransformerException e) {\r
- throw new XMLBuildException("XMLファイルの保存に失敗しました。", e);\r
- }\r
- }\r
-\r
- /**\r
- * 出力プロパティを生成。\r
- * @return 出力プロパティを設定したPropertiesインスタンス\r
- */\r
- private Properties getOutputProperties() {\r
- Properties p = new Properties();\r
- p.put(OutputKeys.ENCODING, charset);\r
- p.put(OutputKeys.INDENT, "yes");\r
- p.put(OutputKeys.DOCTYPE_PUBLIC, Mail.DOCTYPE_PUBLIC);\r
- p.put(OutputKeys.DOCTYPE_SYSTEM, Mail.DOCTYPE_SYSTEM);\r
- return p;\r
- }\r
-\r
-}
\ No newline at end of file