OSDN Git Service

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