OSDN Git Service

ab9d1a373e3564b8b036c88d330afb63d29b867b
[jaxcel/jaxcel.git] / Jaxcel / src / org / hanei / jaxcel / report / ELManager.java
1 /**\r
2  * Copyright 2014 Hanei Management Co.,Ltd. \r
3  * \r
4  * This file is part of Jaxcel\r
5  * \r
6  *  Jaxcel is free software: you can redistribute it and/or modify\r
7  *  it under the terms of the GNU Lesser General Public License as published by\r
8  *  the Free Software Foundation, either version 3 of the License, or\r
9  *  (at your option) any later version.\r
10  *\r
11  *  Jaxcel is distributed in the hope that it will be useful,\r
12  *  but WITHOUT ANY WARRANTY; without even the implied warranty of\r
13  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
14  *  GNU Lesser General Public License for more details.\r
15  *\r
16  *  You should have received a copy of the GNU Lesser General Public License\r
17  *  along with this program.  If not, see <http://www.gnu.org/licenses/>.\r
18  */\r
19 package org.hanei.jaxcel.report;\r
20 \r
21 import java.util.Map;\r
22 import java.util.Map.Entry;\r
23 \r
24 import org.apache.commons.jexl2.Expression;\r
25 import org.apache.commons.jexl2.JexlContext;\r
26 import org.apache.commons.jexl2.JexlEngine;\r
27 import org.apache.commons.jexl2.MapContext;\r
28 import org.slf4j.Logger;\r
29 import org.slf4j.LoggerFactory;\r
30 \r
31 /**\r
32  * EL式の解析、解析で使用するパラメータオブジェクトの保持を行う。<br>\r
33  * 式言語エンジンにはJEXLを使用。\r
34  * \r
35  * @version 1.00.00\r
36  * @author noboru saito\r
37  *\r
38  */\r
39 public class ELManager {\r
40 \r
41         private static final Logger log = LoggerFactory.getLogger(ELManager.class);\r
42 \r
43         private final JexlEngine elEngine = new JexlEngine();\r
44         private final JexlContext elContext = new MapContext();\r
45         \r
46         /**\r
47          * コンストラクタ\r
48          */\r
49         public ELManager() {}\r
50 \r
51         /**\r
52          * コンストラクタ\r
53          * \r
54          * @param parameter テンプレートに挿入するデータ\r
55          */\r
56         public ELManager(Map<String, Object> parameter) {\r
57                 setParameter(parameter);\r
58         }\r
59         \r
60         /**\r
61          * EL式解析で使用するオブジェクトをパラメータとしてセット\r
62          * \r
63          * @param       parameter テンプレートに挿入するデータ\r
64          */\r
65         public void setParameter(Map<String, Object> parameter) {\r
66                 log.trace("setParameter start");\r
67                 \r
68                 if(parameter != null) {\r
69                         if(parameter.entrySet().size() == 0) {\r
70                                 log.debug("parameter is no entry");\r
71                         }\r
72                         else {\r
73                                 for(Entry<String, Object> p : parameter.entrySet()) {\r
74                                         elContext.set(p.getKey(), p.getValue());\r
75                                         log.debug("parameter set: [{}]: {} {}", p.getKey(), p.getValue() == null ? "null" : p.getValue().getClass().getName(), p.getValue() == null ? "" : p.getValue().toString());\r
76                                 }\r
77                         }\r
78             }\r
79                 else {\r
80                         log.debug("parameter is null");\r
81                 }\r
82 \r
83                 log.trace("setParameter end");\r
84         }\r
85         \r
86         /**\r
87          * EL式を解析。結果を返却する\r
88          * \r
89          * @param expression    EL式\r
90          * @return                              EL式の解析結果\r
91          */\r
92         public Object evaluate(String expression) {\r
93                 log.trace("evaluate start");\r
94                 \r
95                 Object object = null;\r
96                 \r
97                 if(expression == null) {\r
98                         log.debug("expression is null");\r
99                 }\r
100                 else {\r
101                         log.debug("expression: {}", expression);\r
102                         Expression expr;\r
103                         try {\r
104                                 expr = elEngine.createExpression(expression);\r
105                                 object = expr.evaluate(elContext);\r
106                         }\r
107                         catch(Exception e) {\r
108                                 log.error("evaluate error: {}", e.getLocalizedMessage(), e);\r
109                         }\r
110                 }\r
111                 \r
112                 if(object == null) {\r
113                         log.debug("evaluate result is null");\r
114                 }\r
115                 else {\r
116                         log.debug("evaluate result: {}", object.toString());\r
117                 }\r
118                 \r
119                 log.trace("evaluate end");\r
120                 return object;\r
121         }\r
122 }\r