MentaContainer

Rev

Rev 4 | Rev 58 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 4 Rev 22
Line 6... Line 6...
6
import java.util.ArrayList;
6
import java.util.ArrayList;
7
import java.util.HashMap;
7
import java.util.HashMap;
8
import java.util.Iterator;
8
import java.util.Iterator;
9
import java.util.List;
9
import java.util.List;
10
import java.util.Map;
10
import java.util.Map;
11
-
 
12
import org.mentacontainer.Container;
-
 
13
11
14
public class InjectionUtils {
12
public class InjectionUtils {
15
13
16
    /**
-
 
17
     * The character used to separate the prefix from the value name when you
-
 
18
     * are using the getObject method with a prefix. You can change the value of
-
 
19
     * this prefix if you want to by changing this static variable.
-
 
20
     *
-
 
21
     * Ex: getObject(User.class, "user") will get all values that begin with
-
 
22
     * "user.".
-
 
23
     */
-
 
24
    public static char PREFIX_SEPARATOR = '.';
-
 
-
 
14
        /**
-
 
15
         * The character used to separate the prefix from the value name when you are using the getObject method with a prefix. You can change the value of this prefix if you want to
-
 
16
         * by changing this static variable.
-
 
17
         *
-
 
18
         * Ex: getObject(User.class, "user") will get all values that begin with "user.".
-
 
19
         */
-
 
20
        public static char PREFIX_SEPARATOR = '.';
25
21
26
    private static Map<Class<? extends Object>, Map<String, Object>> settersMaps = new HashMap<Class<? extends Object>, Map<String, Object>>();
-
 
-
 
22
        private static Map<Class<? extends Object>, Map<String, Object>> settersMaps = new HashMap<Class<? extends Object>, Map<String, Object>>();
27
23
28
    private static Map<Class<? extends Object>, Map<String, Object>> fieldsMaps = new HashMap<Class<? extends Object>, Map<String, Object>>();
-
 
-
 
24
        private static Map<Class<? extends Object>, Map<String, Object>> fieldsMaps = new HashMap<Class<? extends Object>, Map<String, Object>>();
29
25
30
    public static void prepareForInjection(Class<? extends Object> klass, Map<String, Object> setters, Map<String, Object> fields) {
-
 
-
 
26
        public static void prepareForInjection(Class<? extends Object> klass, Map<String, Object> setters, Map<String, Object> fields) {
31
27
32
        StringBuffer sb = new StringBuffer(32);
-
 
-
 
28
                StringBuffer sb = new StringBuffer(32);
33
29
34
        Method[] methods = klass.getMethods();
-
 
-
 
30
                Method[] methods = klass.getMethods();
35
31
36
        for (int i = 0; i < methods.length; i++) {
-
 
-
 
32
                for (int i = 0; i < methods.length; i++) {
37
33
38
            Method m = methods[i];
-
 
-
 
34
                        Method m = methods[i];
39
35
40
            String name = m.getName();
-
 
-
 
36
                        String name = m.getName();
41
37
42
            Class[] types = m.getParameterTypes();
-
 
-
 
38
                        Class<?>[] types = m.getParameterTypes();
43
39
44
            if (name.startsWith("set") && name.length() > 3 && types.length == 1) {
-
 
-
 
40
                        if (name.startsWith("set") && name.length() > 3 && types.length == 1) {
45
41
46
                String var = name.substring(3);
-
 
-
 
42
                                String var = name.substring(3);
47
43
48
                if (var.length() > 1) {
-
 
-
 
44
                                if (var.length() > 1) {
49
45
50
                    sb.delete(0, sb.length());
-
 
-
 
46
                                        sb.delete(0, sb.length());
51
47
52
                    sb.append(var.substring(0, 1).toLowerCase());
-
 
-
 
48
                                        sb.append(var.substring(0, 1).toLowerCase());
53
49
54
                    sb.append(var.substring(1));
-
 
-
 
50
                                        sb.append(var.substring(1));
55
51
56
                    var = sb.toString();
-
 
-
 
52
                                        var = sb.toString();
57
53
58
                } else {
-
 
-
 
54
                                } else {
59
55
60
                    var = var.toLowerCase();
-
 
61
                }
-
 
-
 
56
                                        var = var.toLowerCase();
-
 
57
                                }
62
58
63
                m.setAccessible(true);
-
 
-
 
59
                                m.setAccessible(true);
64
60
65
                if (setters.containsKey(var)) {
-
 
-
 
61
                                if (setters.containsKey(var)) {
66
62
67
                    Object obj = setters.get(var);
-
 
-
 
63
                                        Object obj = setters.get(var);
68
64
69
                    if (obj instanceof List) {
-
 
-
 
65
                                        if (obj instanceof List) {
70
66
71
                        List<Method> list = (List<Method>) obj;
-
 
-
 
67
                                                List<Method> list = (List<Method>) obj;
72
68
73
                        list.add(m);
-
 
-
 
69
                                                list.add(m);
74
70
75
                    } else if (obj instanceof Method) {
-
 
-
 
71
                                        } else if (obj instanceof Method) {
76
72
77
                        List<Method> list = new ArrayList<Method>();
-
 
-
 
73
                                                List<Method> list = new ArrayList<Method>();
78
74
79
                        list.add((Method) obj);
-
 
-
 
75
                                                list.add((Method) obj);
80
76
81
                        list.add(m);
-
 
-
 
77
                                                list.add(m);
82
78
83
                        setters.put(var, list);
-
 
-
 
79
                                                setters.put(var, list);
84
80
85
                    }
-
 
-
 
81
                                        }
86
82
87
                } else {
-
 
-
 
83
                                } else {
88
84
89
                    setters.put(var, m);
-
 
-
 
85
                                        setters.put(var, m);
90
86
-
 
87
                                }
-
 
88
                        }
91
                }
89
                }
92
            }
-
 
93
        }
-
 
94
90
95
        if (fields == null) return;
-
 
-
 
91
                if (fields == null) return;
96
92
97
        Field[] f = klass.getDeclaredFields();
-
 
-
 
93
                Field[] f = klass.getDeclaredFields();
98
94
99
        for (int i = 0; i < f.length; i++) {
-
 
-
 
95
                for (int i = 0; i < f.length; i++) {
100
96
101
            Field field = f[i];
-
 
-
 
97
                        Field field = f[i];
102
98
103
            field.setAccessible(true);
-
 
-
 
99
                        field.setAccessible(true);
104
100
105
            String name = field.getName();
-
 
-
 
101
                        String name = field.getName();
106
102
107
            if (setters.containsKey(name)) {
-
 
-
 
103
                        if (setters.containsKey(name)) {
108
104
109
                Object obj = setters.get(name);
-
 
-
 
105
                                Object obj = setters.get(name);
110
106
111
                if (obj instanceof Method) {
-
 
-
 
107
                                if (obj instanceof Method) {
112
108
113
                    Method m = (Method) obj;
-
 
-
 
109
                                        Method m = (Method) obj;
114
110
115
                    Class[] types = m.getParameterTypes();
-
 
-
 
111
                                        Class<?>[] types = m.getParameterTypes();
116
112
117
                    Class type = field.getType();
-
 
-
 
113
                                        Class<?> type = field.getType();
118
114
119
                    if (type.isAssignableFrom(types[0])) continue; // don't
-
 
120
                                                                   // choose a
-
 
121
                                                                   // field when
-
 
122
                                                                   // we already
-
 
123
                                                                   // have
-
 
124
                                                                   // a
-
 
125
                                                                   // method...
-
 
-
 
115
                                        if (type.isAssignableFrom(types[0])) continue;
126
116
127
                } else if (obj instanceof List) {
-
 
-
 
117
                                } else if (obj instanceof List) {
128
118
129
                    List<Method> list = (List<Method>) obj;
-
 
-
 
119
                                        List<Method> list = (List<Method>) obj;
130
120
131
                    Iterator<Method> iter = list.iterator();
-
 
-
 
121
                                        Iterator<Method> iter = list.iterator();
132
122
133
                    boolean found = false;
-
 
-
 
123
                                        boolean found = false;
134
124
135
                    while (iter.hasNext()) {
-
 
-
 
125
                                        while (iter.hasNext()) {
136
126
137
                        Method m = iter.next();
-
 
-
 
127
                                                Method m = iter.next();
138
128
139
                        Class[] types = m.getParameterTypes();
-
 
-
 
129
                                                Class<?>[] types = m.getParameterTypes();
140
130
141
                        Class type = field.getType();
-
 
-
 
131
                                                Class<?> type = field.getType();
142
132
143
                        if (type.isAssignableFrom(types[0])) {
-
 
-
 
133
                                                if (type.isAssignableFrom(types[0])) {
144
134
145
                            found = true;
-
 
-
 
135
                                                        found = true;
146
136
147
                            break;
-
 
-
 
137
                                                        break;
-
 
138
                                                }
-
 
139
                                        }
-
 
140
-
 
141
                                        if (found) continue;
-
 
142
                                }
148
                        }
143
                        }
149
                    }
-
 
150
144
151
                    if (found) continue; // don't choose a field when we already
-
 
152
                                         // have
-
 
153
                                         // a method...
-
 
-
 
145
                        fields.put(name, field);
154
146
155
                }
147
                }
156
            }
-
 
-
 
148
        }
157
149
158
            fields.put(name, field);
-
 
-
 
150
        public static boolean checkPrimitives(Class<? extends Object> target, Class<? extends Object> source) {
159
151
160
        }
-
 
161
    }
-
 
-
 
152
                if (target.equals(int.class) && source.equals(Integer.class)) return true;
162
153
163
    public static boolean checkPrimitives(Class target, Class<? extends Object> source) {
-
 
-
 
154
                if (target.equals(boolean.class) && source.equals(Boolean.class)) return true;
164
155
165
        if (target.equals(int.class) && source.equals(Integer.class)) return true;
-
 
-
 
156
                if (target.equals(byte.class) && source.equals(Byte.class)) return true;
166
157
167
        if (target.equals(boolean.class) && source.equals(Boolean.class)) return true;
-
 
-
 
158
                if (target.equals(short.class) && source.equals(Short.class)) return true;
168
159
169
        if (target.equals(byte.class) && source.equals(Byte.class)) return true;
-
 
-
 
160
                if (target.equals(char.class) && source.equals(Character.class)) return true;
170
161
171
        if (target.equals(short.class) && source.equals(Short.class)) return true;
-
 
-
 
162
                if (target.equals(long.class) && source.equals(Long.class)) return true;
172
163
173
        if (target.equals(char.class) && source.equals(Character.class)) return true;
-
 
-
 
164
                if (target.equals(float.class) && source.equals(Float.class)) return true;
174
165
175
        if (target.equals(long.class) && source.equals(Long.class)) return true;
-
 
-
 
166
                if (target.equals(double.class) && source.equals(Double.class)) return true;
176
167
177
        if (target.equals(float.class) && source.equals(Float.class)) return true;
-
 
-
 
168
                return false;
178
169
179
        if (target.equals(double.class) && source.equals(Double.class)) return true;
-
 
-
 
170
        }
180
171
181
        return false;
-
 
-
 
172
        public static Object tryToConvert(Object source, Class<? extends Object> targetType) {
182
173
183
    }
-
 
-
 
174
                return tryToConvert(source, targetType, false);
-
 
175
        }
184
176
185
    public static Object tryToConvert(Object source, Class targetType) {
-
 
-
 
177
        public static Object tryToConvert(Object source, Class<?> targetType, boolean tryNumber) {
186
178
187
        return tryToConvert(source, targetType, false);
-
 
188
    }
-
 
-
 
179
                String value = null;
189
180
190
    public static Object tryToConvert(Object source, Class targetType, boolean tryNumber) {
-
 
-
 
181
                if (source instanceof String) {
191
182
192
        String value = null;
-
 
-
 
183
                        value = (String) source;
193
184
194
        if (source instanceof String) {
-
 
-
 
185
                } else if (tryNumber && source instanceof Number) {
195
186
196
            value = (String) source;
-
 
-
 
187
                        value = source.toString();
197
188
198
        } else if (tryNumber && source instanceof Number) {
-
 
-
 
189
                } else {
199
190
200
            value = source.toString();
-
 
-
 
191
                        return null;
-
 
192
                }
201
193
202
        } else {
-
 
-
 
194
                Object newValue = null;
203
195
204
            return null;
-
 
205
        }
-
 
-
 
196
                String className = targetType.getName();
206
197
207
        Object newValue = null;
-
 
-
 
198
                if (className.equals("int") || className.equals("java.lang.Integer")) {
-
 
199
                        int x = -1;
-
 
200
                        try {
-
 
201
                                x = Integer.parseInt(value);
-
 
202
                        } catch (Exception e) {
-
 
203
                                return null;
-
 
204
                        }
-
 
205
                        newValue = new Integer(x);
-
 
206
                } else if (className.equals("short") || className.equals("java.lang.Short")) {
-
 
207
                        short x = -1;
-
 
208
                        try {
-
 
209
                                x = Short.parseShort(value);
-
 
210
                        } catch (Exception e) {
-
 
211
                                return null;
-
 
212
                        }
-
 
213
                        newValue = new Short(x);
208
214
209
        String className = targetType.getName();
-
 
-
 
215
                } else if (className.equals("char") || className.equals("java.lang.Character")) {
210
216
211
        if (className.equals("int") || className.equals("java.lang.Integer")) {
-
 
212
            int x = -1;
-
 
213
            try {
-
 
214
                x = Integer.parseInt(value);
-
 
215
            } catch (Exception e) {
-
 
216
                return null;
-
 
217
            }
-
 
218
            newValue = new Integer(x);
-
 
219
        } else if (className.equals("short") || className.equals("java.lang.Short")) {
-
 
220
            short x = -1;
-
 
221
            try {
-
 
222
                x = Short.parseShort(value);
-
 
223
            } catch (Exception e) {
-
 
224
                return null;
-
 
225
            }
-
 
226
            newValue = new Short(x);
-
 
-
 
217
                        if (value.length() != 1) {
-
 
218
                                return null;
-
 
219
                        }
227
220
228
        } else if (className.equals("char") || className.equals("java.lang.Character")) {
-
 
-
 
221
                        newValue = new Character(value.charAt(0));
229
222
230
            if (value.length() != 1) {
-
 
231
                return null;
-
 
232
            }
-
 
-
 
223
                } else if (className.equals("long") || className.equals("java.lang.Long")) {
-
 
224
                        long x = -1;
-
 
225
                        try {
-
 
226
                                x = Long.parseLong(value);
-
 
227
                        } catch (Exception e) {
-
 
228
                                return null;
-
 
229
                        }
-
 
230
                        newValue = new Long(x);
-
 
231
                } else if (className.equals("float") || className.equals("java.lang.Float")) {
-
 
232
                        float x = -1;
-
 
233
                        try {
-
 
234
                                x = Float.parseFloat(value);
-
 
235
                        } catch (Exception e) {
-
 
236
                                return null;
-
 
237
                        }
-
 
238
                        newValue = new Float(x);
-
 
239
                } else if (className.equals("double") || className.equals("java.lang.Double")) {
-
 
240
                        double x = -1;
-
 
241
                        try {
-
 
242
                                x = Double.parseDouble(value);
-
 
243
                        } catch (Exception e) {
-
 
244
                                return null;
-
 
245
                        }
-
 
246
                        newValue = new Double(x);
-
 
247
                } else if (className.equals("boolean") || className.equals("java.lang.Boolean")) {
-
 
248
                        try {
-
 
249
                                int x = Integer.parseInt(value);
-
 
250
                                if (x == 1) {
-
 
251
                                        newValue = Boolean.TRUE;
-
 
252
                                } else if (x == 0) {
-
 
253
                                        newValue = Boolean.FALSE;
-
 
254
                                } else {
-
 
255
                                        return null;
-
 
256
                                }
-
 
257
                        } catch (Exception e) {
-
 
258
                                if (value.equalsIgnoreCase("true") || value.equals("on")) {
-
 
259
                                        newValue = Boolean.TRUE;
-
 
260
                                } else if (value.equalsIgnoreCase("false")) {
-
 
261
                                        newValue = Boolean.FALSE;
-
 
262
                                } else {
-
 
263
                                        return null;
-
 
264
                                }
-
 
265
                        }
-
 
266
                } else if (targetType.isEnum()) {
233
267
234
            newValue = new Character(value.charAt(0));
-
 
-
 
268
                        try {
-
 
269
                               
-
 
270
                                Class k = (Class) targetType; // not sure how to avoid this raw type!
235
271
236
        } else if (className.equals("long") || className.equals("java.lang.Long")) {
-
 
237
            long x = -1;
-
 
238
            try {
-
 
239
                x = Long.parseLong(value);
-
 
240
            } catch (Exception e) {
-
 
241
                return null;
-
 
242
            }
-
 
243
            newValue = new Long(x);
-
 
244
        } else if (className.equals("float") || className.equals("java.lang.Float")) {
-
 
245
            float x = -1;
-
 
246
            try {
-
 
247
                x = Float.parseFloat(value);
-
 
248
            } catch (Exception e) {
-
 
249
                return null;
-
 
250
            }
-
 
251
            newValue = new Float(x);
-
 
252
        } else if (className.equals("double") || className.equals("java.lang.Double")) {
-
 
253
            double x = -1;
-
 
254
            try {
-
 
255
                x = Double.parseDouble(value);
-
 
256
            } catch (Exception e) {
-
 
257
                return null;
-
 
258
            }
-
 
259
            newValue = new Double(x);
-
 
260
        } else if (className.equals("boolean") || className.equals("java.lang.Boolean")) {
-
 
261
            try {
-
 
262
                int x = Integer.parseInt(value);
-
 
263
                if (x == 1) {
-
 
264
                    newValue = Boolean.TRUE;
-
 
265
                } else if (x == 0) {
-
 
266
                    newValue = Boolean.FALSE;
-
 
267
                } else {
-
 
268
                    return null;
-
 
269
                }
-
 
270
            } catch (Exception e) {
-
 
271
                if (value.equalsIgnoreCase("true") || value.equals("on")) {
-
 
272
                    newValue = Boolean.TRUE;
-
 
273
                } else if (value.equalsIgnoreCase("false")) {
-
 
274
                    newValue = Boolean.FALSE;
-
 
275
                } else {
-
 
276
                    return null;
-
 
277
                }
-
 
278
            }
-
 
279
        } else if (targetType.isEnum()) {
-
 
-
 
272
                                newValue = Enum.valueOf(k, value);
280
273
281
            try {
-
 
-
 
274
                        } catch (Exception e) {
282
275
283
                newValue = Enum.valueOf(targetType, value);
-
 
-
 
276
                                return null;
-
 
277
                        }
284
278
285
            } catch (Exception e) {
-
 
-
 
279
                }
286
280
287
                return null;
-
 
288
            }
-
 
-
 
281
                return newValue;
289
282
290
        }
283
        }
291
284
292
        return newValue;
-
 
-
 
285
        public static Object shouldConvertToNull(Object value, Class<? extends Object> targetType) {
293
286
294
    }
-
 
-
 
287
                if (targetType.equals(String.class)) {
295
288
296
    public static Object shouldConvertToNull(Object value, Class<? extends Object> targetType) {
-
 
-
 
289
                        return value;
297
290
298
        if (targetType.equals(String.class)) {
-
 
-
 
291
                } else if (targetType.isPrimitive()) {
299
292
300
            return value;
-
 
-
 
293
                        return value;
-
 
294
                }
301
295
302
        } else if (targetType.isPrimitive()) {
-
 
303
-
 
304
            return value;
-
 
-
 
296
                return null;
305
        }
297
        }
306
298
307
        return null;
-
 
308
    }
-
 
309
-
 
310
    public static Class getPrimitiveFrom(Object w) {
-
 
311
        if (w instanceof Boolean) {
-
 
312
            return Boolean.TYPE;
-
 
313
        } else if (w instanceof Byte) {
-
 
314
            return Byte.TYPE;
-
 
315
        } else if (w instanceof Short) {
-
 
316
            return Short.TYPE;
-
 
317
        } else if (w instanceof Character) {
-
 
318
            return Character.TYPE;
-
 
319
        } else if (w instanceof Integer) {
-
 
320
            return Integer.TYPE;
-
 
321
        } else if (w instanceof Long) {
-
 
322
            return Long.TYPE;
-
 
323
        } else if (w instanceof Float) {
-
 
324
            return Float.TYPE;
-
 
325
        } else if (w instanceof Double) {
-
 
326
            return Double.TYPE;
-
 
-
 
299
        public static Class<? extends Object> getPrimitiveFrom(Object w) {
-
 
300
                if (w instanceof Boolean) {
-
 
301
                        return Boolean.TYPE;
-
 
302
                } else if (w instanceof Byte) {
-
 
303
                        return Byte.TYPE;
-
 
304
                } else if (w instanceof Short) {
-
 
305
                        return Short.TYPE;
-
 
306
                } else if (w instanceof Character) {
-
 
307
                        return Character.TYPE;
-
 
308
                } else if (w instanceof Integer) {
-
 
309
                        return Integer.TYPE;
-
 
310
                } else if (w instanceof Long) {
-
 
311
                        return Long.TYPE;
-
 
312
                } else if (w instanceof Float) {
-
 
313
                        return Float.TYPE;
-
 
314
                } else if (w instanceof Double) {
-
 
315
                        return Double.TYPE;
-
 
316
                }
-
 
317
                return null;
327
        }
318
        }
328
        return null;
-
 
329
    }
-
 
330
319
331
    public static Class getPrimitiveFrom(Class klass) {
-
 
-
 
320
        public static Class<? extends Object> getPrimitiveFrom(Class<? extends Object> klass) {
332
321
333
        String s = klass.getName();
-
 
-
 
322
                String s = klass.getName();
334
323
335
        if (s.equals("java.lang.Boolean")) {
-
 
336
            return Boolean.TYPE;
-
 
337
        } else if (s.equals("java.lang.Byte")) {
-
 
338
            return Byte.TYPE;
-
 
339
        } else if (s.equals("java.lang.Short")) {
-
 
340
            return Short.TYPE;
-
 
341
        } else if (s.equals("java.lang.Character")) {
-
 
342
            return Character.TYPE;
-
 
343
        } else if (s.equals("java.lang.Integer")) {
-
 
344
            return Integer.TYPE;
-
 
345
        } else if (s.equals("java.lang.Long")) {
-
 
346
            return Long.TYPE;
-
 
347
        } else if (s.equals("java.lang.Float")) {
-
 
348
            return Float.TYPE;
-
 
349
        } else if (s.equals("java.lang.Double")) {
-
 
350
            return Double.TYPE;
-
 
-
 
324
                if (s.equals("java.lang.Boolean")) {
-
 
325
                        return Boolean.TYPE;
-
 
326
                } else if (s.equals("java.lang.Byte")) {
-
 
327
                        return Byte.TYPE;
-
 
328
                } else if (s.equals("java.lang.Short")) {
-
 
329
                        return Short.TYPE;
-
 
330
                } else if (s.equals("java.lang.Character")) {
-
 
331
                        return Character.TYPE;
-
 
332
                } else if (s.equals("java.lang.Integer")) {
-
 
333
                        return Integer.TYPE;
-
 
334
                } else if (s.equals("java.lang.Long")) {
-
 
335
                        return Long.TYPE;
-
 
336
                } else if (s.equals("java.lang.Float")) {
-
 
337
                        return Float.TYPE;
-
 
338
                } else if (s.equals("java.lang.Double")) {
-
 
339
                        return Double.TYPE;
-
 
340
                }
-
 
341
                return null;
351
        }
342
        }
352
        return null;
-
 
353
    }
-
 
354
343
355
    public static Field getField(Object target, String name) {
-
 
356
        return getField(target.getClass(), name);
-
 
357
    }
-
 
-
 
344
        public static Field getField(Object target, String name) {
-
 
345
                return getField(target.getClass(), name);
-
 
346
        }
358
347
359
    public static Field getField(Class<? extends Object> target, String name) {
-
 
360
        Field fields[] = target.getDeclaredFields();
-
 
361
        for (int i = 0; i < fields.length; i++) {
-
 
362
            if (name.equals(fields[i].getName())) {
-
 
363
                return fields[i];
-
 
364
            }
-
 
-
 
348
        public static Field getField(Class<? extends Object> target, String name) {
-
 
349
                Field fields[] = target.getDeclaredFields();
-
 
350
                for (int i = 0; i < fields.length; i++) {
-
 
351
                        if (name.equals(fields[i].getName())) {
-
 
352
                                return fields[i];
-
 
353
                        }
-
 
354
                }
-
 
355
                return null;
365
        }
356
        }
366
        return null;
-
 
367
    }
-
 
368
357
369
    public static Method findMethodToGet(Class<? extends Object> target, String name) {
-
 
-
 
358
        public static Method findMethodToGet(Class<? extends Object> target, String name) {
370
359
371
        StringBuffer sb = new StringBuffer(128);
-
 
-
 
360
                StringBuffer sb = new StringBuffer(128);
372
361
373
        sb.append("get").append(name.substring(0, 1).toUpperCase());
-
 
-
 
362
                sb.append("get").append(name.substring(0, 1).toUpperCase());
374
363
375
        if (name.length() > 1) sb.append(name.substring(1));
-
 
-
 
364
                if (name.length() > 1) sb.append(name.substring(1));
376
365
377
        try {
-
 
-
 
366
                try {
378
367
379
            return target.getMethod(sb.toString(), (Class[]) null);
-
 
-
 
368
                        return target.getMethod(sb.toString(), (Class[]) null);
380
369
381
        } catch (Exception e) {
-
 
-
 
370
                } catch (Exception e) {
382
371
383
        }
-
 
-
 
372
                }
384
373
385
        sb.setLength(0);
-
 
-
 
374
                sb.setLength(0);
386
375
387
        sb.append("is").append(name.substring(0, 1).toUpperCase());
-
 
-
 
376
                sb.append("is").append(name.substring(0, 1).toUpperCase());
388
377
389
        if (name.length() > 1) {
-
 
-
 
378
                if (name.length() > 1) {
390
379
391
            sb.append(name.substring(1));
-
 
392
        }
-
 
-
 
380
                        sb.append(name.substring(1));
-
 
381
                }
393
382
394
        try {
-
 
-
 
383
                try {
395
384
396
            return target.getMethod(sb.toString(), (Class[]) null);
-
 
-
 
385
                        return target.getMethod(sb.toString(), (Class[]) null);
397
386
398
        } catch (Exception e) {
-
 
-
 
387
                } catch (Exception e) {
399
388
-
 
389
                }
-
 
390
-
 
391
                return null;
400
        }
392
        }
401
393
402
        return null;
-
 
403
    }
-
 
-
 
394
        public static Method findMethodToInject(Class<? extends Object> target, String name, Class<? extends Object> source) {
404
395
405
    public static Method findMethodToInject(Class<? extends Object> target, String name, Class source) {
-
 
-
 
396
                StringBuffer sb = new StringBuffer(128);
406
397
407
        StringBuffer sb = new StringBuffer(128);
-
 
-
 
398
                sb.append("set").append(name.substring(0, 1).toUpperCase());
408
399
409
        sb.append("set").append(name.substring(0, 1).toUpperCase());
-
 
-
 
400
                if (name.length() > 1) sb.append(name.substring(1));
410
401
411
        if (name.length() > 1) sb.append(name.substring(1));
-
 
-
 
402
                String methodName = sb.toString();
412
403
413
        String methodName = sb.toString();
-
 
414
-
 
415
        Method m = null;
-
 
416
-
 
417
        try {
-
 
418
-
 
419
            m = FindMethod.getMethod(target, methodName, new Class[] { source });
-
 
420
-
 
421
        } catch (Exception e) {
-
 
422
        }
-
 
423
-
 
424
        if (m == null) {
-
 
425
-
 
426
            Class primitive = getPrimitiveFrom(source);
-
 
427
-
 
428
            if (primitive != null) {
-
 
-
 
404
                Method m = null;
429
405
430
                try {
406
                try {
431
407
432
                    m = target.getMethod(methodName, new Class[] { primitive });
-
 
-
 
408
                        m = FindMethod.getMethod(target, methodName, new Class[] { source });
433
409
434
                } catch (Exception e) {
410
                } catch (Exception e) {
435
                }
411
                }
436
412
437
            }
-
 
438
        }
-
 
-
 
413
                if (m == null) {
439
414
440
        if (m != null) {
-
 
441
            m.setAccessible(true);
-
 
442
        }
-
 
-
 
415
                        Class<? extends Object> primitive = getPrimitiveFrom(source);
443
416
444
        return m;
-
 
-
 
417
                        if (primitive != null) {
445
418
446
    }
-
 
-
 
419
                                try {
447
420
448
    public static Field findFieldToInject(Class<? extends Object> target, String name, Class<? extends Object> source) {
-
 
-
 
421
                                        m = target.getMethod(methodName, new Class[] { primitive });
449
422
450
        Field f = getField(target, name);
-
 
-
 
423
                                } catch (Exception e) {
-
 
424
                                }
451
425
452
        if (f != null) {
-
 
-
 
426
                        }
-
 
427
                }
453
428
454
            Class<?> type = f.getType();
-
 
455
-
 
456
            if (type.isAssignableFrom(source) || checkPrimitives(type, source)) {
-
 
457
-
 
458
                f.setAccessible(true);
-
 
-
 
429
                if (m != null) {
-
 
430
                        m.setAccessible(true);
-
 
431
                }
459
432
460
                return f;
-
 
461
            }
-
 
-
 
433
                return m;
462
434
463
        }
435
        }
464
436
465
        return null;
-
 
466
    }
-
 
-
 
437
        public static Field findFieldToInject(Class<? extends Object> target, String name, Class<? extends Object> source) {
467
438
468
    private static final boolean isBlank(Object value) {
-
 
-
 
439
                Field f = getField(target, name);
469
440
470
        if (value != null && value instanceof String) {
-
 
-
 
441
                if (f != null) {
471
442
472
            String s = ((String) value).trim();
-
 
-
 
443
                        Class<?> type = f.getType();
473
444
474
            if (s.length() == 0) return true;
-
 
475
        }
-
 
-
 
445
                        if (type.isAssignableFrom(source) || checkPrimitives(type, source)) {
476
446
477
        return false;
-
 
478
    }
-
 
-
 
447
                                f.setAccessible(true);
479
448
480
    public static boolean inject(Method m, Object target, Object value, boolean tryToConvert, boolean tryingToConvertBoolean) throws Exception {
-
 
-
 
449
                                return f;
-
 
450
                        }
481
451
482
        Class<?> type = m.getParameterTypes()[0];
-
 
-
 
452
                }
483
453
484
        if (tryingToConvertBoolean) {
-
 
-
 
454
                return null;
-
 
455
        }
485
456
486
            if (value == null && (type.equals(Boolean.class) || type.equals(boolean.class))) {
-
 
-
 
457
        private static final boolean isBlank(Object value) {
487
458
488
                value = Boolean.FALSE;
-
 
-
 
459
                if (value != null && value instanceof String) {
489
460
490
            } else {
-
 
-
 
461
                        String s = ((String) value).trim();
491
462
492
                // if trying to convert boolean, convert or don't do anything...
-
 
-
 
463
                        if (s.length() == 0) return true;
-
 
464
                }
493
465
494
                return false;
466
                return false;
495
-
 
496
            }
-
 
497
        }
467
        }
498
468
499
        if (value == null
-
 
500
                || (type.isAssignableFrom(value.getClass()) || checkPrimitives(type, value.getClass()) || (tryToConvert && ((isBlank(value) && (value = shouldConvertToNull(value,
-
 
501
                        type)) == null) || (value = tryToConvert(value, type)) != null)))) {
-
 
-
 
469
        public static boolean inject(Method m, Object target, Object value, boolean tryToConvert, boolean tryingToConvertBoolean) throws Exception {
502
470
503
            try {
-
 
-
 
471
                Class<?> type = m.getParameterTypes()[0];
504
472
505
                m.invoke(target, new Object[] { value });
-
 
-
 
473
                if (tryingToConvertBoolean) {
506
474
507
                return true;
-
 
-
 
475
                        if (value == null && (type.equals(Boolean.class) || type.equals(boolean.class))) {
508
476
509
            } catch (Exception e) {
-
 
-
 
477
                                value = Boolean.FALSE;
510
478
511
                System.err.println("Error injecting by method: " + value + " in " + target + " thru " + m);
-
 
-
 
479
                        } else {
512
480
513
                e.printStackTrace();
-
 
-
 
481
                                // if trying to convert boolean, convert or don't do anything...
514
482
515
                throw e;
-
 
-
 
483
                                return false;
516
484
517
            }
-
 
518
        }
-
 
-
 
485
                        }
-
 
486
                }
519
487
520
        return false;
-
 
-
 
488
                if (value == null
-
 
489
                        || (type.isAssignableFrom(value.getClass()) || checkPrimitives(type, value.getClass()) || (tryToConvert && ((isBlank(value) && (value = shouldConvertToNull(value,
-
 
490
                                type)) == null) || (value = tryToConvert(value, type)) != null)))) {
521
491
522
    }
-
 
-
 
492
                        try {
523
493
524
    public static boolean hasDefaultConstructor(Class<? extends Object> klass) {
-
 
-
 
494
                                m.invoke(target, new Object[] { value });
525
495
526
        try {
-
 
-
 
496
                                return true;
527
497
528
            return klass.getConstructor((Class[]) null) != null;
-
 
-
 
498
                        } catch (Exception e) {
529
499
530
        } catch (Exception e) {
-
 
-
 
500
                                System.err.println("Error injecting by method: " + value + " in " + target + " thru " + m);
531
501
532
            return false;
-
 
533
        }
-
 
534
    }
-
 
-
 
502
                                e.printStackTrace();
535
503
536
    /*
-
 
537
     * This method takes setUsername and returns username.
-
 
538
     *
-
 
539
     * If we have a prefix, then it returns prefix.username.
-
 
540
     */
-
 
541
    private static String adjustName(String name, String prefix) {
-
 
-
 
504
                                throw e;
542
505
543
        StringBuilder sb;
-
 
-
 
506
                        }
-
 
507
                }
544
508
545
        if (name.length() >= 4 && (name.startsWith("get") || name.startsWith("set"))) {
-
 
546
-
 
547
            sb = new StringBuilder(name.length() - 3);
-
 
548
            sb.append(name.substring(3, 4).toLowerCase());
-
 
549
            if (name.length() > 4) sb.append(name.substring(4, name.length()));
-
 
550
-
 
551
        } else if (name.length() >= 3 && name.startsWith("is")) {
-
 
552
-
 
553
            sb = new StringBuilder(name.length() - 2);
-
 
554
            sb.append(name.substring(2, 3).toLowerCase());
-
 
555
            if (name.length() > 3) sb.append(name.substring(3, name.length()));
-
 
-
 
509
                return false;
556
510
557
        } else {
-
 
558
-
 
559
            throw new IllegalArgumentException("Cannot adjust method: " + name);
-
 
560
        }
511
        }
561
512
562
        if (prefix != null) {
-
 
-
 
513
        public static boolean hasDefaultConstructor(Class<? extends Object> klass) {
563
514
564
            StringBuffer sb2 = new StringBuffer(128);
-
 
-
 
515
                try {
565
516
566
            return sb2.append(prefix).append(PREFIX_SEPARATOR).append(sb.toString()).toString();
-
 
-
 
517
                        return klass.getConstructor((Class[]) null) != null;
567
518
-
 
519
                } catch (Exception e) {
-
 
520
-
 
521
                        return false;
-
 
522
                }
568
        }
523
        }
569
524
570
        return sb.toString();
-
 
571
    }
-
 
-
 
525
        /**
-
 
526
         * Extract the value of a property of a bean!
-
 
527
         *
-
 
528
         * @param bean
-
 
529
         *            the target bean
-
 
530
         * @param nameProperty
-
 
531
         *            the property name
-
 
532
         * @return they value as String. The method toString is always called to every property!
-
 
533
         * @throws Exception
-
 
534
         */
-
 
535
        public static String getProperty(Object bean, String nameProperty) throws Exception {
572
536
573
    /**
-
 
574
     * Extract the value of a property of a bean!
-
 
575
     *
-
 
576
     * @param bean
-
 
577
     *            the target bean
-
 
578
     * @param nameProperty
-
 
579
     *            the property name
-
 
580
     * @return they value as String. The method toString is always called to
-
 
581
     *         every property!
-
 
582
     * @throws Exception
-
 
583
     */
-
 
584
    public static String getProperty(Object bean, String nameProperty) throws Exception {
-
 
-
 
537
                if (nameProperty == null || nameProperty.equals("")) return null;
585
538
586
        if (nameProperty == null || nameProperty.equals("")) return null;
-
 
-
 
539
                String methodName = getter(nameProperty);
587
540
588
        String methodName = getter(nameProperty);
-
 
-
 
541
                Class<? extends Object> clazz = bean.getClass();
-
 
542
                Method[] methods = clazz.getMethods();
-
 
543
                for (Method method : methods) {
-
 
544
                        if (method.getName().equals(methodName) && method.getParameterTypes().length == 0) {
-
 
545
                                Object value = method.invoke(bean, (Object[]) null);
-
 
546
                                if (value == null) return null;
-
 
547
                                return value.toString();
-
 
548
                        }
-
 
549
                }
589
550
590
        Class<? extends Object> clazz = bean.getClass();
-
 
591
        Method[] methods = clazz.getMethods();
-
 
592
        for (Method method : methods) {
-
 
593
            if (method.getName().equals(methodName) && method.getParameterTypes().length == 0) {
-
 
594
                Object value = method.invoke(bean, (Object[]) null);
-
 
595
                if (value == null) return null;
-
 
596
                return value.toString();
-
 
597
            }
-
 
598
        }
-
 
-
 
551
                Field[] fields = clazz.getDeclaredFields();
-
 
552
                for (Field field : fields) {
-
 
553
                        field.setAccessible(true);
-
 
554
                        if (field.getName().equals(nameProperty)) {
-
 
555
                                Object value = field.get(bean);
-
 
556
                                if (value == null) return null;
-
 
557
                                return value.toString();
-
 
558
                        }
-
 
559
                }
599
560
600
        Field[] fields = clazz.getDeclaredFields();
-
 
601
        for (Field field : fields) {
-
 
602
            field.setAccessible(true);
-
 
603
            if (field.getName().equals(nameProperty)) {
-
 
604
                Object value = field.get(bean);
-
 
605
                if (value == null) return null;
-
 
606
                return value.toString();
-
 
607
            }
-
 
-
 
561
                return null;
608
        }
562
        }
609
563
610
        return null;
-
 
611
    }
-
 
-
 
564
        private static String getter(String name) {
-
 
565
                StringBuilder sb = new StringBuilder(name.length() + 3);
612
566
613
    private static String getter(String name) {
-
 
614
        StringBuilder sb = new StringBuilder(name.length() + 3);
-
 
-
 
567
                sb.append("get").append(name.substring(0, 1).toUpperCase());
615
568
616
        sb.append("get").append(name.substring(0, 1).toUpperCase());
-
 
-
 
569
                if (name.length() > 1) sb.append(name.substring(1));
-
 
570
                return sb.toString();
-
 
571
        }
617
572
618
        if (name.length() > 1) sb.append(name.substring(1));
-
 
619
        return sb.toString();
-
 
620
    }
-
 
-
 
573
        public static void beanToMap(Object bean, Map<String, String> map) throws IllegalArgumentException, IllegalAccessException, InvocationTargetException {
-
 
574
                if (bean != null) {
621
575
622
    public static void beanToMap(Object bean, Map<String, String> map) throws IllegalArgumentException, IllegalAccessException, InvocationTargetException {
-
 
623
        if (bean != null) {
-
 
-
 
576
                        for (Method method : bean.getClass().getMethods()) {
-
 
577
                                String name = method.getName();
624
578
625
            for (Method method : bean.getClass().getMethods()) {
-
 
626
                String name = method.getName();
-
 
-
 
579
                                if (name.length() > 3 && name.startsWith("get") && !name.equals("getClass") && method.getParameterTypes().length == 0) {
627
580
628
                if (name.length() > 3 && name.startsWith("get") && !name.equals("getClass") && method.getParameterTypes().length == 0) {
-
 
629
-
 
630
                    method.setAccessible(true);
-
 
631
                    Object value = method.invoke(bean, new Object[0]);
-
 
632
                    map.put(name, value.toString());
-
 
-
 
581
                                        method.setAccessible(true);
-
 
582
                                        Object value = method.invoke(bean, new Object[0]);
-
 
583
                                        map.put(name, value.toString());
-
 
584
                                }
-
 
585
                        }
633
                }
586
                }
634
            }
-
 
635
        }
587
        }
636
    }
-
 
-
 
588
       
-
 
589
        public static interface Provider {
-
 
590
               
-
 
591
                public Object get(String key);
-
 
592
               
-
 
593
                public boolean contains(String key);
-
 
594
        }
637
595
638
    public static void getObject(Object target, Container container, boolean tryField, String prefix, boolean tryToConvert, boolean convertBoolean,
-
 
639
            boolean allowRecursion) throws Exception {
-
 
-
 
596
        public static void getObject(Object target, Provider provider, boolean tryField, String prefix, boolean tryToConvert, boolean convertBoolean, boolean allowRecursion)
-
 
597
                throws Exception {
640
598
641
        Class<? extends Object> targetClass = target.getClass();
-
 
-
 
599
                Class<? extends Object> targetClass = target.getClass();
642
600
643
        Map<String, Object> setters, fields;
-
 
-
 
601
                Map<String, Object> setters, fields;
644
602
645
        // see if we have these in cache...
-
 
-
 
603
                // see if we have these in cache...
646
604
647
        synchronized (settersMaps) {
-
 
-
 
605
                synchronized (settersMaps) {
648
606
649
            setters = settersMaps.get(targetClass);
-
 
-
 
607
                        setters = settersMaps.get(targetClass);
650
608
651
            fields = fieldsMaps.get(targetClass);
-
 
-
 
609
                        fields = fieldsMaps.get(targetClass);
652
610
653
        }
-
 
-
 
611
                }
654
612
655
        // if not in cache, prepare maps for injection...
-
 
-
 
613
                // if not in cache, prepare maps for injection...
656
614
657
        if (setters == null) {
-
 
-
 
615
                if (setters == null) {
658
616
659
            setters = new HashMap<String, Object>();
-
 
-
 
617
                        setters = new HashMap<String, Object>();
660
618
661
            fields = null;
-
 
-
 
619
                        fields = null;
662
620
663
            if (tryField) {
-
 
-
 
621
                        if (tryField) {
664
622
665
                fields = new HashMap<String, Object>();
-
 
-
 
623
                                fields = new HashMap<String, Object>();
666
624
667
            }
-
 
-
 
625
                        }
668
626
669
            prepareForInjection(targetClass, setters, fields);
-
 
-
 
627
                        prepareForInjection(targetClass, setters, fields);
670
628
671
            synchronized (settersMaps) {
-
 
-
 
629
                        synchronized (settersMaps) {
672
630
673
                settersMaps.put(targetClass, setters);
-
 
-
 
631
                                settersMaps.put(targetClass, setters);
674
632
675
                fieldsMaps.put(targetClass, fields);
-
 
-
 
633
                                fieldsMaps.put(targetClass, fields);
676
634
677
            }
-
 
678
        }
-
 
-
 
635
                        }
-
 
636
                }
679
637
680
        Iterator<String> iter = setters.keySet().iterator();
-
 
-
 
638
                Iterator<String> iter = setters.keySet().iterator();
681
639
682
        while (iter.hasNext()) {
-
 
-
 
640
                while (iter.hasNext()) {
683
641
684
            String var = iter.next();
-
 
-
 
642
                        String var = iter.next();
685
643
686
            boolean hasValue = container.contains(var);
-
 
-
 
644
                        boolean hasValue = provider.contains(var);
687
645
688
            Object value = container.contains(var);
-
 
-
 
646
                        Object value = provider.get(var);
689
647
690
            boolean tryingToConvertBoolean = false;
-
 
-
 
648
                        boolean tryingToConvertBoolean = false;
691
649
692
            if (value == null && !hasValue) {
-
 
-
 
650
                        if (value == null && !hasValue) {
693
651
694
                if (!convertBoolean) {
-
 
-
 
652
                                if (!convertBoolean) {
695
653
696
                    continue;
-
 
-
 
654
                                        continue;
697
655
698
                } else {
-
 
-
 
656
                                } else {
699
657
700
                    tryingToConvertBoolean = true;
-
 
701
                }
-
 
-
 
658
                                        tryingToConvertBoolean = true;
-
 
659
                                }
702
660
703
            }
-
 
-
 
661
                        }
704
662
705
            // if (value == null) continue;
-
 
-
 
663
                        // if (value == null) continue;
706
664
707
            Object obj = setters.get(var);
-
 
-
 
665
                        Object obj = setters.get(var);
708
666
709
            // we may have a list of overloaded methods...
-
 
-
 
667
                        // we may have a list of overloaded methods...
710
668
711
            List list = null;
-
 
-
 
669
                        List<Method> list = null;
712
670
713
            Method m = null;
-
 
-
 
671
                        Method m = null;
714
672
715
            if (obj instanceof List) {
-
 
-
 
673
                        if (obj instanceof List) {
716
674
717
                list = (List) obj;
-
 
-
 
675
                                list = (List<Method>) obj;
718
676
719
            } else {
-
 
-
 
677
                        } else {
720
678
721
                m = (Method) setters.get(var);
-
 
-
 
679
                                m = (Method) setters.get(var);
722
680
723
            }
-
 
-
 
681
                        }
724
682
725
            if (m != null) {
-
 
-
 
683
                        if (m != null) {
726
684
727
                if (!inject(m, target, value, tryToConvert, tryingToConvertBoolean) && allowRecursion) {
-
 
-
 
685
                                if (!inject(m, target, value, tryToConvert, tryingToConvertBoolean) && allowRecursion) {
728
686
729
                    // i did not inject... how about a VO object for this
-
 
730
                    // setter?
-
 
-
 
687
                                        // i did not inject... how about a VO object for this
-
 
688
                                        // setter?
731
689
732
                    Class<?> type = m.getParameterTypes()[0];
-
 
-
 
690
                                        Class<?> type = m.getParameterTypes()[0];
733
691
734
                    if (!type.getName().startsWith("java.") && !type.isPrimitive() && hasDefaultConstructor(type)) {
-
 
-
 
692
                                        if (!type.getName().startsWith("java.") && !type.isPrimitive() && hasDefaultConstructor(type)) {
735
693
736
                        Object param = type.newInstance();
-
 
-
 
694
                                                Object param = type.newInstance();
737
695
738
                        InjectionUtils.getObject(param, container, true, prefix, true, true, false); // no
-
 
739
                                                                                                      // recursion...
-
 
-
 
696
                                                InjectionUtils.getObject(param, provider, true, prefix, true, true, false); // no
-
 
697
                                                // recursion...
740
698
741
                        inject(m, target, param, false, false);
-
 
742
                    }
-
 
743
                }
-
 
-
 
699
                                                inject(m, target, param, false, false);
-
 
700
                                        }
-
 
701
                                }
744
702
745
            } else {
-
 
-
 
703
                        } else {
746
704
747
                Iterator it = list.iterator();
-
 
-
 
705
                                Iterator<Method> it = list.iterator();
748
706
749
                boolean injected = false;
-
 
-
 
707
                                boolean injected = false;
750
708
751
                while (it.hasNext()) {
-
 
-
 
709
                                while (it.hasNext()) {
752
710
753
                    m = (Method) it.next();
-
 
-
 
711
                                        m = it.next();
754
712
755
                    if (inject(m, target, value, tryToConvert, tryingToConvertBoolean)) {
-
 
-
 
713
                                        if (inject(m, target, value, tryToConvert, tryingToConvertBoolean)) {
756
714
757
                        injected = true;
-
 
-
 
715
                                                injected = true;
758
716
759
                        break;
-
 
760
                    }
-
 
761
                }
-
 
-
 
717
                                                break;
-
 
718
                                        }
-
 
719
                                }
762
720
763
                if (!injected && allowRecursion) {
-
 
-
 
721
                                if (!injected && allowRecursion) {
764
722
765
                    // i could not inject anything... how about a VO object for
-
 
766
                    // this setter...
-
 
-
 
723
                                        // i could not inject anything... how about a VO object for
-
 
724
                                        // this setter...
767
725
768
                    it = list.iterator();
-
 
-
 
726
                                        it = list.iterator();
769
727
770
                    while (it.hasNext()) {
-
 
-
 
728
                                        while (it.hasNext()) {
771
729
772
                        m = (Method) it.next();
-
 
-
 
730
                                                m = (Method) it.next();
773
731
774
                        Class<?> type = m.getParameterTypes()[0];
-
 
-
 
732
                                                Class<?> type = m.getParameterTypes()[0];
775
733
776
                        if (!type.getName().startsWith("java.") && !type.isPrimitive() && hasDefaultConstructor(type)) {
-
 
-
 
734
                                                if (!type.getName().startsWith("java.") && !type.isPrimitive() && hasDefaultConstructor(type)) {
777
735
778
                            Object param = type.newInstance();
-
 
-
 
736
                                                        Object param = type.newInstance();
779
737
780
                            InjectionUtils.getObject(param, container, true, prefix, true, true, false); // no
-
 
781
                                                                                                          // recursion...
-
 
-
 
738
                                                        InjectionUtils.getObject(param, provider, true, prefix, true, true, false); // no
-
 
739
                                                        // recursion...
782
740
783
                            if (inject(m, target, param, false, false)) {
-
 
-
 
741
                                                        if (inject(m, target, param, false, false)) {
784
742
785
                                break; // done...
-
 
786
                            }
-
 
-
 
743
                                                                break; // done...
-
 
744
                                                        }
-
 
745
                                                }
-
 
746
                                        }
-
 
747
                                }
787
                        }
748
                        }
788
                    }
-
 
789
                }
749
                }
790
            }
-
 
791
        }
-
 
792
750
793
        if (fields != null) {
-
 
-
 
751
                if (fields != null) {
794
752
795
            iter = fields.keySet().iterator();
-
 
-
 
753
                        iter = fields.keySet().iterator();
796
754
797
            while (iter.hasNext()) {
-
 
-
 
755
                        while (iter.hasNext()) {
798
756
799
                String var = iter.next();
-
 
-
 
757
                                String var = iter.next();
800
758
801
                boolean hasValue = container.contains(var);
-
 
-
 
759
                                boolean hasValue = provider.contains(var);
802
760
803
                Object value = container.get(var);
-
 
-
 
761
                                Object value = provider.get(var);
804
762
805
                Field f = (Field) fields.get(var);
-
 
-
 
763
                                Field f = (Field) fields.get(var);
806
764
807
                Class<?> type = f.getType();
-
 
-
 
765
                                Class<?> type = f.getType();
808
766
809
                // If there is no value in the action input, assume false for
-
 
810
                // booleans...
-
 
811
                // (checkboxes and radio buttons are not send when not
-
 
812
                // marked...)
-
 
-
 
767
                                // If there is no value in the action input, assume false for
-
 
768
                                // booleans...
-
 
769
                                // (checkboxes and radio buttons are not send when not
-
 
770
                                // marked...)
813
771
814
                if (convertBoolean && value == null && !hasValue) {
-
 
-
 
772
                                if (convertBoolean && value == null && !hasValue) {
815
773
816
                    if (type.equals(Boolean.class) || type.equals(boolean.class)) {
-
 
-
 
774
                                        if (type.equals(Boolean.class) || type.equals(boolean.class)) {
817
775
818
                        value = Boolean.FALSE;
-
 
819
                    }
-
 
-
 
776
                                                value = Boolean.FALSE;
-
 
777
                                        }
820
778
821
                }
-
 
-
 
779
                                }
822
780
823
                if (value == null && !hasValue) continue;
-
 
-
 
781
                                if (value == null && !hasValue) continue;
824
782
825
                // if (value == null) continue;
-
 
-
 
783
                                // if (value == null) continue;
826
784
827
                if (value == null
-
 
828
                        || (type.isAssignableFrom(value.getClass()) || checkPrimitives(type, value.getClass()) || (tryToConvert && ((isBlank(value) && (value = shouldConvertToNull(
-
 
829
                                value, type)) == null) || (value = tryToConvert(value, type)) != null)))) {
-
 
-
 
785
                                if (value == null
-
 
786
                                        || (type.isAssignableFrom(value.getClass()) || checkPrimitives(type, value.getClass()) || (tryToConvert && ((isBlank(value) && (value = shouldConvertToNull(
-
 
787
                                                value, type)) == null) || (value = tryToConvert(value, type)) != null)))) {
830
788
831
                    try {
-
 
-
 
789
                                        try {
832
790
833
                        f.set(target, value);
-
 
-
 
791
                                                f.set(target, value);
834
792
835
                    } catch (Exception e) {
-
 
-
 
793
                                        } catch (Exception e) {
836
794
837
                        System.err.println("Error injecting by field: " + value + " in " + target);
-
 
-
 
795
                                                System.err.println("Error injecting by field: " + value + " in " + target);
838
796
839
                        e.printStackTrace();
-
 
-
 
797
                                                e.printStackTrace();
840
798
841
                        throw e;
-
 
-
 
799
                                                throw e;
842
800
843
                    }
-
 
-
 
801
                                        }
-
 
802
                                }
-
 
803
                        }
844
                }
804
                }
845
            }
-
 
846
        }
805
        }
847
    }
-
 
848
}
806
}