OSDN Git Service

DBFlute-0.9.3に更新
[ea2ddl/ea2ddl.git] / ea2ddl-gen / dbflute / templates / om / java / allcommon / s2dao / internal / sqlcommand / InternalProcedureCommand.vm
1 ${database.allClassCopyright}package ${glPackageBaseCommonS2DaoInternalSqlCommand};\r
2 \r
3 import javax.sql.DataSource;\r
4 \r
5 import org.seasar.dao.SqlCommand;\r
6 import org.seasar.extension.jdbc.ResultSetHandler;\r
7 import org.seasar.extension.jdbc.StatementFactory;\r
8 \r
9 import ${glPackageBaseCommonCBeanOutsidesql}.${glOutsideSqlContextName};\r
10 import ${glPackageBaseCommonS2DaoInternalSqlHandler}.${glInternalProcedureHandler};\r
11 import ${glPackageBaseCommonS2DaoInternalVarious}.${glInternalProcedureMetaData};\r
12 \r
13 /**\r
14  * @author ${database.ClassAuthor}\r
15  */\r
16 public class ${glInternalProcedureCommand} implements SqlCommand {\r
17 \r
18         // ===================================================================================\r
19     //                                                                           Attribute\r
20     //                                                                           =========\r
21     protected DataSource dataSource;\r
22     protected ResultSetHandler resultSetHandler;\r
23     protected StatementFactory statementFactory;\r
24     protected ${glInternalProcedureMetaData} procedureMetaData;\r
25 \r
26         // ===================================================================================\r
27     //                                                                         Constructor\r
28     //                                                                         ===========\r
29     public ${glInternalProcedureCommand}(DataSource dataSource, ResultSetHandler resultSetHandler,\r
30             StatementFactory statementFactory, ${glInternalProcedureMetaData} procedureMetaData) {\r
31         this.dataSource = dataSource;\r
32         this.resultSetHandler = resultSetHandler;\r
33         this.statementFactory = statementFactory;\r
34         this.procedureMetaData = procedureMetaData;\r
35     }\r
36 \r
37         // ===================================================================================\r
38     //                                                                             Execute\r
39     //                                                                             =======\r
40     public Object execute(final Object[] args) {\r
41         final ${glInternalProcedureHandler} handler = newArgumentDtoProcedureHandler();\r
42         final ${glOutsideSqlContextName} outsideSqlContext = ${glOutsideSqlContextName}.getOutsideSqlContextOnThread();\r
43         final Object pmb = outsideSqlContext.getParameterBean();\r
44         // The logging message SQL of procedure is unnecessary.\r
45         // handler.setLoggingMessageSqlArgs(...);\r
46         return handler.execute(new Object[]{pmb});\r
47     }\r
48     protected ${glInternalProcedureHandler} newArgumentDtoProcedureHandler() {\r
49         return new ${glInternalProcedureHandler}(dataSource, createSql(procedureMetaData), resultSetHandler,\r
50                 statementFactory, procedureMetaData);\r
51     }\r
52     protected String createSql(final ${glInternalProcedureMetaData} procedureMetaData) {\r
53         final StringBuilder sb = new StringBuilder();\r
54         sb.append("{");\r
55         int size = procedureMetaData.parameterTypes().size();\r
56         if (procedureMetaData.hasReturnParameterType()) {\r
57             sb.append("? = ");\r
58             size--;\r
59         }\r
60         sb.append("call ").append(procedureMetaData.getProcedureName()).append("(");\r
61         for (int i = 0; i < size; i++) {\r
62             sb.append("?, ");\r
63         }\r
64         if (size > 0) {\r
65             sb.setLength(sb.length() - 2);\r
66         }\r
67         sb.append(")}");\r
68         return sb.toString();\r
69     }\r
70 }\r