OSDN Git Service

36904e77053341d654bb320d526a6c610bedbd93
[ea2ddl/ea2ddl.git] / ea2ddl-gen / dbflute / templates / om / java / allcommon / s2dao / internal / various / InternalProcedureMetaData.vm
1 ${database.allClassCopyright}package ${glPackageBaseCommonS2DaoInternalVarious};\r
2 \r
3 import java.util.Collection;\r
4 import java.util.Comparator;\r
5 import java.util.HashMap;\r
6 import java.util.Map;\r
7 import java.util.TreeMap;\r
8 \r
9 /**\r
10  * @author ${database.ClassAuthor}\r
11  */\r
12 public class ${glInternalProcedureMetaData} {\r
13 \r
14     // ===================================================================================\r
15     //                                                                           Attribute\r
16     //                                                                           =========\r
17     private String procedureName;\r
18     private Map<String, ${glInternalProcedureParameterType}> unorderedMap = createUnorderedMap();\r
19     private Map<String, ${glInternalProcedureParameterType}> parameterTypes = createParameterTypes();\r
20     private boolean returnType;\r
21 \r
22     // ===================================================================================\r
23     //                                                                         Constructor\r
24     //                                                                         ===========\r
25     public ${glInternalProcedureMetaData}(final String procedureName) {\r
26         this.procedureName = procedureName;\r
27     }\r
28 \r
29     // ===================================================================================\r
30     //                                                                             Factory\r
31     //                                                                             =======\r
32     protected Map<String, ${glInternalProcedureParameterType}> createUnorderedMap() {\r
33         return new HashMap<String, ${glInternalProcedureParameterType}>();\r
34     }\r
35 \r
36     protected Map<String, ${glInternalProcedureParameterType}> createParameterTypes() {\r
37         return new TreeMap<String, ${glInternalProcedureParameterType}>(new ParameterComparator());\r
38     }\r
39 \r
40     protected class ParameterComparator implements Comparator<String> {\r
41         public int compare(String o1, String o2) {\r
42             final int oneGreaterThanTwo = 1;\r
43             final int twoGreaterThanOne = -1;\r
44             final ${glInternalProcedureParameterType} parameterType1 = unorderedMap.get(o1);\r
45             final ${glInternalProcedureParameterType} parameterType2 = unorderedMap.get(o2);\r
46             if (parameterType1.isReturnType()) {\r
47                 return twoGreaterThanOne; // Return type is prior\r
48             }\r
49             if (parameterType2.isReturnType()) {\r
50                 return oneGreaterThanTwo; // Return type is prior\r
51             }\r
52             final Integer parameterIndex1 = parameterType1.getParameterIndex();\r
53             final Integer parameterIndex2 = parameterType2.getParameterIndex();\r
54             if (parameterIndex1 == null && parameterIndex2 == null) {\r
55                 return oneGreaterThanTwo; // No changes\r
56             }\r
57             if (parameterIndex1 != null && parameterIndex2 == null) {\r
58                 return twoGreaterThanOne; // Not null is prior\r
59             }\r
60             if (parameterIndex1 == null && parameterIndex2 != null) {\r
61                 return oneGreaterThanTwo; // Not null is prior\r
62             }\r
63             return parameterIndex1.compareTo(parameterIndex2);\r
64         }\r
65     }\r
66 \r
67     // ===================================================================================\r
68     //                                                                            Accessor\r
69     //                                                                            ========\r
70     public String getProcedureName() {\r
71         return procedureName;\r
72     }\r
73 \r
74     public Collection<${glInternalProcedureParameterType}> parameterTypes() {\r
75         return parameterTypes.values();\r
76     }\r
77 \r
78     public void addParameterType(final ${glInternalProcedureParameterType} parameterType) {\r
79         final String name = parameterType.getParameterName();\r
80         unorderedMap.put(name, parameterType);\r
81         parameterTypes.put(name, parameterType);\r
82         if (parameterType.isReturnType()) {\r
83             returnType = true;\r
84         }\r
85     }\r
86 \r
87     public boolean hasReturnParameterType() {\r
88         return returnType;\r
89     }\r
90 }\r