1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package fulmine.model.field;
17
18 import static fulmine.util.Utils.DOT;
19 import static fulmine.util.Utils.safeToString;
20
21
22
23
24
25
26 public abstract class FieldUtils
27 {
28
29
30
31
32
33
34 public static final String CREATE_FROM_NATIVE = "createFromNative";
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50 @SuppressWarnings("unchecked")
51 public static <T extends IField> T createFromString(
52 Class<? extends IField> field, String fieldName, String fieldValue)
53 {
54 try
55 {
56 return (T) field.getConstructor(String.class, String.class).newInstance(
57 fieldName, fieldValue);
58 }
59 catch (Exception e)
60 {
61 throw new IllegalArgumentException(
62 "Could not construct an instance of " + field + " with name="
63 + fieldName + ", value=" + fieldValue, e);
64 }
65 }
66
67
68
69
70
71
72
73
74
75
76
77
78 @SuppressWarnings("unchecked")
79 public static <T extends IField> T createFromString(String simpleClassName,
80 String fieldName)
81 {
82 try
83 {
84 String packageName =
85 AbstractField.class.getPackage().getName() + DOT;
86 final Class<?> fieldClass =
87 Class.forName(packageName + simpleClassName);
88 return (T) fieldClass.getConstructor(String.class).newInstance(
89 fieldName);
90 }
91 catch (Exception e)
92 {
93 throw new IllegalArgumentException(
94 "Could not construct an instance of " + simpleClassName
95 + " with name=" + fieldName, e);
96 }
97 }
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114 @SuppressWarnings({ "unchecked", "boxing" })
115 public static <T extends IField> T createFromString(String simpleClassName,
116 String fieldName, byte application, short permission)
117 {
118 try
119 {
120 String packageName =
121 AbstractField.class.getPackage().getName() + DOT;
122 final Class<?> fieldClass =
123 Class.forName(packageName + simpleClassName);
124 return (T) fieldClass.getConstructor(String.class, Byte.TYPE,
125 Short.TYPE).newInstance(fieldName, application, permission);
126 }
127 catch (Exception e)
128 {
129 throw new IllegalArgumentException(
130 "Could not construct an instance of " + simpleClassName
131 + " with name=" + fieldName, e);
132 }
133 }
134
135
136
137
138
139
140
141
142
143
144 @SuppressWarnings("boxing")
145 public static IField createFromNative(Object nativeObject)
146 {
147 if (nativeObject == null)
148 {
149 return null;
150 }
151 if (nativeObject instanceof String)
152 {
153 return new StringField(CREATE_FROM_NATIVE, (String) nativeObject);
154 }
155 if (nativeObject instanceof Boolean)
156 {
157 return new BooleanField(CREATE_FROM_NATIVE, (Boolean) nativeObject);
158 }
159 if (nativeObject instanceof Integer)
160 {
161 return new IntegerField(CREATE_FROM_NATIVE, (Integer) nativeObject);
162 }
163 if (nativeObject instanceof Double)
164 {
165 return new DoubleField(CREATE_FROM_NATIVE, (Double) nativeObject);
166 }
167 if (nativeObject instanceof Long)
168 {
169 return new LongField(CREATE_FROM_NATIVE, (Long) nativeObject);
170 }
171 if (nativeObject instanceof Float)
172 {
173 return new FloatField(CREATE_FROM_NATIVE, (Float) nativeObject);
174 }
175 throw new IllegalArgumentException("Unhandled type "
176 + safeToString(nativeObject.getClass()) + " value="
177 + safeToString(nativeObject));
178 }
179
180
181
182
183
184
185
186
187
188
189 public static Class<? extends IField> getFrameworkClass(Class<?> nativeType)
190 {
191 if (nativeType == null)
192 {
193 return null;
194 }
195 if (String.class.equals(nativeType))
196 {
197 return StringField.class;
198 }
199 if (Boolean.class.equals(nativeType) || Boolean.TYPE.equals(nativeType))
200 {
201 return BooleanField.class;
202 }
203 if (Integer.class.equals(nativeType) || Integer.TYPE.equals(nativeType))
204 {
205 return IntegerField.class;
206 }
207 if (Double.class.equals(nativeType) || Double.TYPE.equals(nativeType))
208 {
209 return DoubleField.class;
210 }
211 if (Long.class.equals(nativeType) || Long.TYPE.equals(nativeType))
212 {
213 return LongField.class;
214 }
215 if (Float.class.equals(nativeType) || Float.TYPE.equals(nativeType))
216 {
217 return FloatField.class;
218 }
219 throw new IllegalArgumentException("Unhandled type "
220 + safeToString(nativeType));
221 }
222 }