OSDN Git Service

i
[luz/luz.git] / luz2 / src / com / lavans / luz2 / util / EnumAlias.java
1 /* $Id: EnumAlias.java 414 2011-07-28 23:05:16Z dobashi $ */\r
2 package com.lavans.luz2.util;\r
3 \r
4 import java.lang.reflect.Field;\r
5 import java.lang.reflect.Method;\r
6 import java.util.List;\r
7 \r
8 import javax.xml.xpath.XPathExpressionException;\r
9 \r
10 import org.apache.commons.logging.Log;\r
11 import org.apache.commons.logging.LogFactory;\r
12 import org.w3c.dom.Element;\r
13 \r
14 \r
15 /**\r
16  * Enum別名クラス。\r
17  * luz.xmlに定義した別名(エイリアス)から、enumクラスを取得する。\r
18  * IEnumインターフェースだけではstaticメソッドが呼び出せないのが、\r
19  * このクラスを利用すれば実際の型がわからなくてもstaticメソッドにアクセスできる。\r
20  *\r
21  * デプロイするシステムに応じて利用するEnumが変わる場合等、\r
22  * Enumの型をハードコーディングしたくない時に使用する。\r
23  *\r
24  * @author Yuki\r
25  *\r
26  */\r
27 public class EnumAlias{\r
28         /** logger */\r
29         private static Log logger = LogFactory.getLog(EnumAlias.class);\r
30 \r
31         /** 処理移譲先 */\r
32         private final Class<? extends IEnum> clazz;\r
33 \r
34         private boolean isList;\r
35 \r
36         /**\r
37          * 任意プロフィールのEnumクラスを返す。\r
38          * 設定が内場合はnull;\r
39          *\r
40          * @param type\r
41          * @return\r
42          */\r
43         @SuppressWarnings("unchecked")\r
44         public static EnumAlias getEnum(String aliasName){\r
45                 EnumAlias alias = null;\r
46 \r
47                 Config config = Config.getInstance();\r
48                 String className="";\r
49                 boolean isList=false;;\r
50                 try {\r
51                         className = config.getNodeValue("/luz/enum_alias/"+aliasName);\r
52                         Element ele = (Element)config.getNode("/luz/enum_alias/"+aliasName);\r
53                         isList = Boolean.parseBoolean(ele.getAttribute("list"));\r
54                 } catch (XPathExpressionException e1) {\r
55                 }\r
56                 if(className.equals("")){\r
57                         return alias;\r
58                 }\r
59 \r
60                 try {\r
61                         Class<? extends IEnum> clazz = (Class<? extends IEnum>)Class.forName(className);\r
62                         alias = new EnumAlias(clazz);\r
63                         alias.isList=isList;\r
64                 } catch (ClassNotFoundException e) {\r
65                 }\r
66 \r
67                 return alias;\r
68         }\r
69 \r
70         /**\r
71          * コンストラクタ\r
72          * @param clazz\r
73          */\r
74         public EnumAlias(Class<? extends IEnum> clazz){\r
75                 this.clazz=clazz;\r
76         }\r
77 \r
78         /**\r
79          * Enum名取得\r
80          * @return\r
81          */\r
82         public String getEnumTitle(){\r
83                 String result = "";\r
84                 try {\r
85                         Field field = clazz.getField("_TITLE");\r
86                         result = field.get(null).toString();\r
87                 } catch (Exception e) {\r
88                 }\r
89                 return result;\r
90         }\r
91 \r
92         /**\r
93          * タイトル取得\r
94          * IDがカンマ区切りの場合は一覧で返す。\r
95          * @return\r
96          */\r
97         public String getTitle(String idStr){\r
98                 StringBuffer result = new StringBuffer();\r
99                 String[] ids = idStr.split(",");\r
100                 for (String id : ids) {\r
101                         try {\r
102                                 Method method = clazz.getMethod("getTitle", new Class<?>[]{String.class});\r
103                                 result.append(" "+method.invoke(null, new Object[]{id}));\r
104                         } catch (Exception e) {\r
105                                 logger.debug("",e);\r
106                         }\r
107                 }\r
108                 return result.substring(1);\r
109         }\r
110 \r
111         /**\r
112          * 全インスタンス一覧\r
113          * @return\r
114          */\r
115         @SuppressWarnings("unchecked")\r
116         public List<? extends IEnum> getAllList(){\r
117                 List<? extends IEnum> list = null;\r
118                 try {\r
119                         Method method = clazz.getMethod("getAllList", (Class<?>[])null);\r
120                         list = (List<? extends IEnum>)method.invoke(null, (Object[])null);\r
121                 } catch (Exception e) {\r
122                         logger.debug("",e);\r
123                 }\r
124                 return list;\r
125         }\r
126 \r
127         public boolean isList() {\r
128                 return isList;\r
129         }\r
130 \r
131         public void setList(boolean isList) {\r
132                 this.isList = isList;\r
133         }\r
134 }\r
135 \r