MentaContainer

Rev

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

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