1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package org.joda.beans.gen;
17
18 import java.util.ArrayList;
19 import java.util.Collections;
20 import java.util.HashMap;
21 import java.util.List;
22 import java.util.Map;
23
24
25
26
27
28
29 abstract class GetterGen {
30
31
32 static final Map<String, GetterGen> GETTERS = new HashMap<String, GetterGen>();
33 static {
34 GETTERS.put("", NoGetterGen.INSTANCE);
35 GETTERS.put("smart", SmartGetterGen.INSTANCE);
36 GETTERS.put("get", GetGetterGen.INSTANCE);
37 GETTERS.put("is", IsGetterGen.INSTANCE);
38 GETTERS.put("manual", ManualGetterGen.INSTANCE);
39 }
40
41
42
43
44
45
46 static GetterGen of(GeneratableProperty prop) {
47 GetterGen gen = GETTERS.get(prop.getGetStyle());
48 if (gen == null) {
49 throw new RuntimeException("Unable to locate getter generator '" + prop.getGetStyle() + "'");
50 }
51 return gen;
52 }
53
54
55
56
57
58
59
60 abstract List<String> generateGetter(GeneratableProperty prop);
61
62
63
64
65
66
67
68 String generateGetInvoke(GeneratableProperty prop) {
69 return "get" + prop.getUpperName() + "()";
70 }
71
72
73 static class SmartGetterGen extends GetterGen {
74 static final GetterGen INSTANCE = new SmartGetterGen();
75 @Override
76 List<String> generateGetter(GeneratableProperty prop) {
77 if (prop.getType().equals("boolean")) {
78 return IsGetterGen.INSTANCE.generateGetter(prop);
79 } else {
80 return GetGetterGen.INSTANCE.generateGetter(prop);
81 }
82 }
83 @Override
84 String generateGetInvoke(GeneratableProperty prop) {
85 if (prop.getType().equals("boolean")) {
86 return IsGetterGen.INSTANCE.generateGetInvoke(prop);
87 } else {
88 return GetGetterGen.INSTANCE.generateGetInvoke(prop);
89 }
90 }
91 }
92
93 static class GetGetterGen extends GetterGen {
94 static final GetterGen INSTANCE = new GetGetterGen();
95 @Override
96 List<String> generateGetter(GeneratableProperty prop) {
97 return doGenerateGetter(prop, "get");
98 }
99 }
100
101 static class IsGetterGen extends GetterGen {
102 static final GetterGen INSTANCE = new IsGetterGen();
103 @Override
104 List<String> generateGetter(GeneratableProperty prop) {
105 return doGenerateGetter(prop, "is");
106 }
107 @Override
108 String generateGetInvoke(GeneratableProperty prop) {
109 return "is" + prop.getUpperName() + "()";
110 }
111 }
112
113 static class ManualGetterGen extends GetterGen {
114 static final GetterGen INSTANCE = new ManualGetterGen();
115 @Override
116 List<String> generateGetter(GeneratableProperty prop) {
117 return Collections.emptyList();
118 }
119 }
120
121 static class NoGetterGen extends GetterGen {
122 static final GetterGen INSTANCE = new NoGetterGen();
123 @Override
124 List<String> generateGetter(GeneratableProperty prop) {
125 return Collections.emptyList();
126 }
127 @Override
128 String generateGetInvoke(GeneratableProperty prop) {
129 return prop.getFieldName();
130 }
131 }
132
133 private static List<String> doGenerateGetter(GeneratableProperty prop, String prefix) {
134 List<String> list = new ArrayList<String>();
135 list.add("\t/**");
136 list.add("\t * Gets " + prop.getFirstComment());
137 for (String comment : prop.getComments()) {
138 list.add("\t * " + comment);
139 }
140 list.add("\t * @return the value of the property" + (prop.isNotNull() ? ", not null" : ""));
141 list.add("\t */");
142 if (prop.isDeprecated()) {
143 list.add("\t@Deprecated");
144 }
145 list.add("\tpublic " + prop.getType() + " " + prefix + prop.getUpperName() + "() {");
146 list.add("\t\treturn " + prop.getFieldName() + ";");
147 list.add("\t}");
148 list.add("");
149 return list;
150 }
151
152 }