+++ /dev/null
-package com.ozacc.mail.impl;\r
-\r
-import java.io.File;\r
-import java.io.IOException;\r
-import java.io.InputStream;\r
-import java.util.HashMap;\r
-import java.util.Map;\r
-\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
-\r
-import org.w3c.dom.Document;\r
-import org.w3c.dom.Element;\r
-import org.w3c.dom.Node;\r
-import org.w3c.dom.NodeList;\r
-import org.xml.sax.SAXException;\r
-\r
-import com.ozacc.mail.Mail;\r
-\r
-/**\r
- * XMLMailBuilder実装が継承する基底クラス。\r
- * \r
- * @since 1.1\r
- * \r
- * @author Tomohiro Otsuka\r
- * @version $Id: AbstractXMLMailBuilder.java,v 1.4.2.2 2004/11/25 08:00:49 otsuka Exp $\r
- */\r
-public abstract class AbstractXMLMailBuilder {\r
-\r
- protected Map documentBuilderCache;\r
-\r
- /**\r
- * コンストラクタ。\r
- */\r
- public AbstractXMLMailBuilder() {\r
- documentBuilderCache = new HashMap();\r
- }\r
-\r
- /**\r
- * 指定されたXMLファイルを読み込み、DOM Documentを生成します。\r
- * ignoreCommentが指定されている場合は、XMLのコメントを削除しません。\r
- * \r
- * @param file XMLファイル\r
- * @return DOM Document\r
- * @throws IOException\r
- * @throws SAXException\r
- */\r
- protected synchronized Document getDocumentFromFile(File file, boolean ignoreComment)\r
- throws SAXException,\r
- IOException {\r
- DocumentBuilder db = createDocumentBuilder(ignoreComment);\r
- return db.parse(file);\r
- }\r
-\r
- /**\r
- * 指定されたXMLファイルを読み込み、DOM Documentを生成します。\r
- * XMLのコメントや改行は削除されます。\r
- * \r
- * @param file XMLファイル\r
- * @return DOM Document\r
- * @throws IOException\r
- * @throws SAXException\r
- */\r
- protected Document getDocumentFromFile(File file) throws SAXException, IOException {\r
- return getDocumentFromFile(file, true);\r
- }\r
-\r
- /**\r
- * DocumentBuilderインスタンスを生成します。\r
- * ignoreCommentが指定されている場合は、コメントを削除しないように設定されたDocumentBuilderを生成します。\r
- * \r
- * @param ignoreComment\r
- * @return DocumentBuilder\r
- * @throws FactoryConfigurationError \r
- */\r
- protected DocumentBuilder createDocumentBuilder(boolean ignoreComment)\r
- throws FactoryConfigurationError {\r
- Boolean dbKey = Boolean.valueOf(ignoreComment);\r
- DocumentBuilder db = (DocumentBuilder)documentBuilderCache.get(dbKey);\r
- if (db == null) {\r
- DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();\r
- dbf.setIgnoringComments(ignoreComment);\r
- dbf.setCoalescing(ignoreComment);\r
- dbf.setIgnoringElementContentWhitespace(true);\r
- dbf.setValidating(true);\r
- try {\r
- db = dbf.newDocumentBuilder();\r
- db.setEntityResolver(new DTDEntityResolver());\r
- documentBuilderCache.put(dbKey, db);\r
- } catch (ParserConfigurationException e) {\r
- // never be thrown\r
- throw new RuntimeException(e);\r
- }\r
- }\r
- return db;\r
- }\r
-\r
- /**\r
- * DocumentBuilderインスタンスを生成します。\r
- * このDocumentBuilderを使用して生成されるDOM Documentでは、元のXMLデータにあるコメントは削除されます。\r
- * \r
- * @return DocumentBuilder\r
- * @throws FactoryConfigurationError \r
- */\r
- protected DocumentBuilder createDocumentBuilder() throws FactoryConfigurationError {\r
- return createDocumentBuilder(true);\r
- }\r
-\r
- /**\r
- * 指定されたクラスパスのXMLファイルを読み込み、DOM Documentを生成します。\r
- * ignoreCommentが指定されている場合は、XMLのコメントを削除しません。\r
- * \r
- * @param ignoreComment\r
- * @param classPath\r
- * @return DOM Document\r
- * @throws IOException\r
- * @throws SAXException\r
- */\r
- protected synchronized Document getDocumentFromClassPath(String classPath, boolean ignoreComment)\r
- throws SAXException,\r
- IOException {\r
- InputStream is = getClass().getResourceAsStream(classPath);\r
- DocumentBuilder db = createDocumentBuilder(ignoreComment);\r
- try {\r
- return db.parse(is);\r
- } finally {\r
- if (is != null) {\r
- is.close();\r
- }\r
- }\r
- }\r
-\r
- /**\r
- * 指定されたクラスパスのXMLファイルを読み込み、DOM Documentを生成します。\r
- * XMLのコメントや改行は削除されます。\r
- * \r
- * @param classPath\r
- * @return DOM Document\r
- * @throws IOException\r
- * @throws SAXException\r
- */\r
- protected Document getDocumentFromClassPath(String classPath) throws SAXException, IOException {\r
- return getDocumentFromClassPath(classPath, true);\r
- }\r
-\r
- /**\r
- * @param root\r
- * @param mail \r
- */\r
- protected void setReplyTo(Element root, Mail mail) {\r
- NodeList nodes = root.getElementsByTagName("replyTo");\r
- Element replyTo = (Element)nodes.item(0);\r
- if (replyTo != null && replyTo.getAttribute("email").length() > 0) {\r
- mail.setReplyTo(replyTo.getAttribute("email"));\r
- }\r
- }\r
-\r
- /**\r
- * @param root\r
- * @param mail \r
- */\r
- protected void setText(Element root, Mail mail) {\r
- NodeList nodes = root.getElementsByTagName("body");\r
- Element bodyElem = (Element)nodes.item(0);\r
- if (bodyElem == null) {\r
- return;\r
- }\r
- String body = bodyElem.getFirstChild().getNodeValue();\r
- mail.setText(body.trim());\r
- }\r
-\r
- /**\r
- * HTML本文をセット。\r
- * \r
- * @param root\r
- * @param mail\r
- */\r
- protected void setHtml(Element root, Mail mail) {\r
- NodeList nodes = root.getElementsByTagName("html");\r
- Element htmlElem = (Element)nodes.item(0);\r
- if (htmlElem == null) {\r
- return;\r
- }\r
- String html = htmlElem.getFirstChild().getNodeValue();\r
- mail.setHtmlText(html.trim());\r
- }\r
-\r
- /**\r
- * @param root\r
- * @param mail \r
- */\r
- protected void setSubject(Element root, Mail mail) {\r
- NodeList nodes = root.getElementsByTagName("subject");\r
- Element subjectElem = (Element)nodes.item(0);\r
- if (subjectElem == null) {\r
- return;\r
- }\r
- String subject = subjectElem.getFirstChild().getNodeValue();\r
- mail.setSubject(subject.trim());\r
- }\r
-\r
- /**\r
- * @param root\r
- * @param mail \r
- */\r
- protected void setRecipients(Element root, Mail mail) {\r
- NodeList nodes = root.getElementsByTagName("recipients");\r
- Element recipientsElem = (Element)nodes.item(0);\r
- if (recipientsElem == null) {\r
- return;\r
- }\r
-\r
- NodeList recipientElemList = recipientsElem.getChildNodes();\r
- for (int i = 0, max = recipientElemList.getLength(); i < max; i++) {\r
- Node node = recipientElemList.item(i);\r
- if (node.getNodeType() != Node.ELEMENT_NODE) {\r
- continue;\r
- }\r
- Element e = (Element)node;\r
- if ("to".equals(e.getNodeName())) { // to\r
- if (e.getAttribute("email").length() > 0) {\r
- if (e.getAttribute("name").length() > 0) {\r
- mail.addTo(e.getAttribute("email"), e.getAttribute("name"));\r
- } else {\r
- mail.addTo(e.getAttribute("email"));\r
- }\r
- }\r
- } else if ("cc".equals(e.getNodeName())) { // cc\r
- if (e.getAttribute("email").length() > 0) {\r
- if (e.getAttribute("name").length() > 0) {\r
- mail.addCc(e.getAttribute("email"), e.getAttribute("name"));\r
- } else {\r
- mail.addCc(e.getAttribute("email"));\r
- }\r
- }\r
- } else {\r
- if (e.getAttribute("email").length() > 0) { // bcc\r
- mail.addBcc(e.getAttribute("email"));\r
- }\r
- }\r
- }\r
- }\r
-\r
- /**\r
- * @param root\r
- * @param mail \r
- */\r
- protected void setReturnPath(Element root, Mail mail) {\r
- NodeList nodes = root.getElementsByTagName("returnPath");\r
- Element returnPath = (Element)nodes.item(0);\r
- if (returnPath != null && returnPath.getAttribute("email").length() > 0) {\r
- mail.setReturnPath(returnPath.getAttribute("email"));\r
- }\r
- }\r
-\r
- /**\r
- * @param root\r
- * @param mail \r
- */\r
- protected void setFrom(Element root, Mail mail) {\r
- NodeList nodes = root.getElementsByTagName("from");\r
- Element from = (Element)nodes.item(0);\r
- if (from != null && from.getAttribute("email").length() > 0) {\r
- if (from.getAttribute("name").length() > 0) {\r
- mail.setFrom(from.getAttribute("email"), from.getAttribute("name"));\r
- } else {\r
- mail.setFrom(from.getAttribute("email"));\r
- }\r
- }\r
- }\r
-\r
-}
\ No newline at end of file