OSDN Git Service

ディレクトリ構成を Maven 2 標準にすることで pom.xml を簡略化
[spring-ext/ozacc-mail.git] / src / main / java / com / ozacc / mail / spring / XMLMailFactoryBean.java
1 package com.ozacc.mail.spring;\r
2 \r
3 import java.io.File;\r
4 \r
5 import org.springframework.beans.factory.config.AbstractFactoryBean;\r
6 import org.springframework.core.io.Resource;\r
7 \r
8 import com.ozacc.mail.Mail;\r
9 import com.ozacc.mail.MailBuildException;\r
10 import com.ozacc.mail.MailBuilder;\r
11 import com.ozacc.mail.impl.XMLMailBuilderImpl;\r
12 \r
13 /**\r
14  * Springの設定ファイルで指定されたロケーションのXMLファイルからMailインスタンスを生成するFactoryBean。\r
15  * デフォルトでは、singletonプロパティはfalseに設定されます。\r
16  * <p>\r
17  * location、classPath、filePathの順で、一番先にセットされているプロパティ値がXMLファイルのパスとして使われます。\r
18  * \r
19  * @see com.ozacc.mail.impl.XMLMailBuilderImpl\r
20  * \r
21  * @since 1.0\r
22  * @author Tomohiro Otsuka\r
23  * @version $Id: XMLMailFactoryBean.java,v 1.4 2004/09/13 19:48:16 otsuka Exp $\r
24  */\r
25 public class XMLMailFactoryBean extends AbstractFactoryBean {\r
26 \r
27         private String classPath;\r
28 \r
29         private String filePath;\r
30 \r
31         private Resource location;\r
32 \r
33         private MailBuilder mailBuilder;\r
34 \r
35         /**\r
36          * コンストラクタ。\r
37          */\r
38         public XMLMailFactoryBean() {\r
39                 setSingleton(false);\r
40         }\r
41 \r
42         /**\r
43          * @see org.springframework.beans.factory.config.AbstractFactoryBean#createInstance()\r
44          */\r
45         protected Object createInstance() throws Exception {\r
46                 if (mailBuilder == null) {\r
47                         init();\r
48                 }\r
49 \r
50                 if (getLocation() != null && getLocation().getFile() != null) {\r
51                         return mailBuilder.buildMail(getLocation().getFile());\r
52                 }\r
53                 if (getClassPath() != null) {\r
54                         return mailBuilder.buildMail(getClassPath());\r
55                 }\r
56                 if (getFilePath() != null) {\r
57                         return mailBuilder.buildMail(new File(getFilePath()));\r
58                 }\r
59                 throw new MailBuildException("Mailインスタンスの生成に失敗しました。XMLデータのロケーションが指定されていません。");\r
60         }\r
61 \r
62         /**\r
63          * mailBuilderインスタンスを生成します。\r
64          */\r
65         private void init() {\r
66                 mailBuilder = new XMLMailBuilderImpl();\r
67         }\r
68 \r
69         /**\r
70          * @see org.springframework.beans.factory.FactoryBean#getObjectType()\r
71          */\r
72         public Class getObjectType() {\r
73                 return Mail.class;\r
74         }\r
75 \r
76         /**\r
77          * <code>MailBuilder</code>インターフェースの実装クラスのインスタンスをセットします。\r
78          * デフォルトでは、<code>XMLMailBuilderImpl</code>が使用されます。\r
79          * <p>\r
80          * ただし、ここでセットしない場合は、<code>XMLMailFactoryBean</code>ひとつに付き、\r
81          * <code>XMLMailBuilderImpl</code>インスタンス一つが保持されます。\r
82          * シングルトンの<code>MailBuilder</code>インスタンスをセットすることを推奨します。\r
83          * \r
84          * @param mailBuilder MailBuilderインスタンス\r
85          */\r
86         public void setMailBuilder(MailBuilder mailBuilder) {\r
87                 this.mailBuilder = mailBuilder;\r
88         }\r
89 \r
90         /**\r
91          * @return Returns the classPath.\r
92          */\r
93         public String getClassPath() {\r
94                 return classPath;\r
95         }\r
96 \r
97         /**\r
98          * @param classPath The classPath to set.\r
99          */\r
100         public void setClassPath(String classPath) {\r
101                 this.classPath = classPath;\r
102         }\r
103 \r
104         /**\r
105          * @return Returns the filePath.\r
106          */\r
107         public String getFilePath() {\r
108                 return filePath;\r
109         }\r
110 \r
111         /**\r
112          * @param filePath The filePath to set.\r
113          */\r
114         public void setFilePath(String filePath) {\r
115                 this.filePath = filePath;\r
116         }\r
117 \r
118         /**\r
119          * @return Returns the location.\r
120          */\r
121         public Resource getLocation() {\r
122                 return location;\r
123         }\r
124 \r
125         /**\r
126          * @param location The location to set.\r
127          */\r
128         public void setLocation(Resource location) {\r
129                 this.location = location;\r
130         }\r
131 }