1 package org.apache.fulcrum.parser;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 import java.beans.IndexedPropertyDescriptor;
23 import java.beans.Introspector;
24 import java.beans.PropertyDescriptor;
25 import java.io.UnsupportedEncodingException;
26 import java.lang.reflect.Method;
27 import java.math.BigDecimal;
28 import java.text.DateFormat;
29 import java.text.NumberFormat;
30 import java.text.ParseException;
31 import java.text.ParsePosition;
32 import java.util.Date;
33 import java.util.Hashtable;
34 import java.util.Iterator;
35 import java.util.Locale;
36 import java.util.Set;
37
38 import org.apache.avalon.framework.logger.LogEnabled;
39 import org.apache.avalon.framework.logger.Logger;
40 import org.apache.commons.lang3.ArrayUtils;
41 import org.apache.commons.lang3.StringUtils;
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73 public class BaseValueParser
74 implements ValueParser,
75 ParserServiceSupport, LogEnabled
76 {
77
78 protected ParserService parserService;
79
80
81 private Logger logger;
82
83
84 private static final String[] trueValues = {"TRUE","T","YES","Y","1","ON"};
85
86
87 private static final String[] falseValues = {"FALSE","F","NO","N","0","OFF"};
88
89
90
91
92 private String characterEncoding = DEFAULT_CHARACTER_ENCODING;
93
94
95
96
97 protected Hashtable<String, Object> parameters = new Hashtable<String, Object>();
98
99
100 private Locale locale = Locale.getDefault();
101
102
103 private DateFormat dateFormat = DateFormat.getDateInstance(DateFormat.SHORT, locale);
104
105
106 private NumberFormat numberFormat = NumberFormat.getNumberInstance(locale);
107
108 public BaseValueParser()
109 {
110 this(DEFAULT_CHARACTER_ENCODING);
111 }
112
113
114
115
116
117
118 public BaseValueParser(String characterEncoding)
119 {
120 this(characterEncoding, Locale.getDefault());
121 }
122
123
124
125
126
127
128
129 public BaseValueParser(String characterEncoding, Locale locale)
130 {
131 super();
132 recycle(characterEncoding);
133 setLocale(locale);
134 }
135
136
137
138
139
140
141 @Override
142 public void setParserService(ParserService parserService)
143 {
144 this.parserService = parserService;
145 }
146
147
148
149
150
151 @Override
152 public void enableLogging(Logger logger)
153 {
154 this.logger = logger;
155 }
156
157
158
159
160
161
162 protected Logger getLogger()
163 {
164 return logger;
165 }
166
167
168
169
170 public void recycle()
171 {
172 recycle(DEFAULT_CHARACTER_ENCODING);
173 }
174
175
176
177
178
179
180 public void recycle(String characterEncoding)
181 {
182 setCharacterEncoding(characterEncoding);
183 }
184
185
186
187
188 public void dispose()
189 {
190 clear();
191 disposed = true;
192 }
193
194
195
196
197 @Override
198 public void clear()
199 {
200 parameters.clear();
201 }
202
203
204
205
206 @Override
207 public void setCharacterEncoding(String s)
208 {
209 characterEncoding = s;
210 }
211
212
213
214
215 @Override
216 public String getCharacterEncoding()
217 {
218 return characterEncoding;
219 }
220
221
222
223
224 @Override
225 public void setLocale(Locale l)
226 {
227 locale = l;
228 setDateFormat(DateFormat.getDateInstance(DateFormat.SHORT, locale));
229 setNumberFormat(NumberFormat.getNumberInstance(locale));
230 }
231
232
233
234
235 @Override
236 public Locale getLocale()
237 {
238 return locale;
239 }
240
241
242
243
244 @Override
245 public void setDateFormat(DateFormat df)
246 {
247 dateFormat = df;
248 }
249
250
251
252
253 @Override
254 public DateFormat getDateFormat()
255 {
256 return dateFormat;
257 }
258
259
260
261
262 @Override
263 public void setNumberFormat(NumberFormat nf)
264 {
265 numberFormat = nf;
266 }
267
268
269
270
271 @Override
272 public NumberFormat getNumberFormat()
273 {
274 return numberFormat;
275 }
276
277
278
279
280
281
282
283 @Override
284 public void add(String name, double value)
285 {
286 add(name, numberFormat.format(value));
287 }
288
289
290
291
292
293
294
295 @Override
296 public void add(String name, int value)
297 {
298 add(name, (long)value);
299 }
300
301
302
303
304
305
306
307 @Override
308 public void add(String name, Integer value)
309 {
310 if (value != null)
311 {
312 add(name, value.intValue());
313 }
314 }
315
316
317
318
319
320
321
322 @Override
323 public void add(String name, long value)
324 {
325 add(name, Long.toString(value));
326 }
327
328
329
330
331
332
333
334 @Override
335 public void add(String name, String value)
336 {
337 if (value != null)
338 {
339 String [] items = getParam(name);
340 items = ArrayUtils.add(items, value);
341 putParam(name, items);
342 }
343 }
344
345
346
347
348
349
350
351
352
353 @Override
354 public void add(String name, String [] value)
355 {
356
357
358 if (value != null)
359 {
360 for (int i = 0 ; i < value.length; i++)
361 {
362 if (value[i] != null)
363 {
364 add(name, value[i]);
365 }
366 }
367 }
368 }
369
370
371
372
373
374
375
376
377 @Override
378 public Object remove(String name)
379 {
380 return parameters.remove(convert(name));
381 }
382
383
384
385
386
387
388
389
390
391 @Override
392 public String convert(String value)
393 {
394 return convertAndTrim(value);
395 }
396
397
398
399
400
401
402
403
404
405 @Override
406 public boolean containsKey(Object key)
407 {
408 return parameters.containsKey(convert(String.valueOf(key)));
409 }
410
411
412
413
414
415
416 @Override
417 public Set<String> keySet()
418 {
419 return parameters.keySet();
420 }
421
422
423
424
425
426
427 @Override
428 public String[] getKeys()
429 {
430 return keySet().toArray(new String[0]);
431 }
432
433
434
435
436
437
438 @Override
439 public Iterator<String> iterator()
440 {
441 return parameters.keySet().iterator();
442 }
443
444
445
446
447
448
449
450
451
452
453
454
455
456 private Boolean parseBoolean(String string)
457 {
458 Boolean result = null;
459 String value = StringUtils.trim(string);
460
461 if (StringUtils.isNotEmpty(value))
462 {
463 for (int cnt = 0;
464 cnt < Math.max(trueValues.length, falseValues.length); cnt++)
465 {
466
467 if (cnt < trueValues.length &&
468 value.equalsIgnoreCase(trueValues[cnt]))
469 {
470 result = Boolean.TRUE;
471 break;
472 }
473
474 if (cnt < falseValues.length &&
475 value.equalsIgnoreCase(falseValues[cnt]))
476 {
477 result = Boolean.FALSE;
478 break;
479 }
480 }
481
482 if (result == null && getLogger().isWarnEnabled() == true)
483 {
484 getLogger().warn("Parameter with value of ("
485 + value + ") could not be converted to a Boolean");
486 }
487 }
488
489 return result;
490 }
491
492
493
494
495
496
497
498
499
500 @Override
501 public boolean getBoolean(String name, boolean defaultValue)
502 {
503 Boolean result = getBooleanObject(name);
504 return (result == null ? defaultValue : result.booleanValue());
505 }
506
507
508
509
510
511
512
513
514 @Override
515 public boolean getBoolean(String name)
516 {
517 return getBoolean(name, false);
518 }
519
520
521
522
523
524
525
526
527 @Override
528 public boolean[] getBooleans(String name)
529 {
530 boolean[] result = null;
531 String value[] = getParam(name);
532 if (value != null)
533 {
534 result = new boolean[value.length];
535 for (int i = 0; i < value.length; i++)
536 {
537 Boolean bool = parseBoolean(value[i]);
538 result[i] = (bool == null ? false : bool.booleanValue());
539 }
540 }
541 return result;
542 }
543
544
545
546
547
548
549
550
551
552
553
554
555
556 @Override
557 public Boolean getBooleanObject(String name)
558 {
559 return parseBoolean(getString(name));
560 }
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575 @Override
576 public Boolean getBooleanObject(String name, Boolean defaultValue)
577 {
578 Boolean result = getBooleanObject(name);
579 return (result == null ? defaultValue : result);
580 }
581
582
583
584
585
586
587
588
589 @Override
590 public Boolean[] getBooleanObjects(String name)
591 {
592 Boolean[] result = null;
593 String value[] = getParam(name);
594 if (value != null)
595 {
596 result = new Boolean[value.length];
597 for (int i = 0; i < value.length; i++)
598 {
599 result[i] = parseBoolean(value[i]);
600 }
601 }
602 return result;
603 }
604
605
606
607
608
609
610
611
612 private Number parseNumber(String string)
613 {
614 Number result = null;
615 String value = StringUtils.trim(string);
616
617 if (StringUtils.isNotEmpty(value))
618 {
619 ParsePosition pos = new ParsePosition(0);
620 Number number = numberFormat.parse(value, pos);
621
622 if (pos.getIndex() == value.length())
623 {
624
625 result = number;
626 }
627 else
628 {
629 if (getLogger().isWarnEnabled())
630 {
631 getLogger().warn("Parameter with value of ("
632 + value + ") could not be converted to a Number at position " + pos.getIndex());
633 }
634 }
635 }
636
637 return result;
638 }
639
640
641
642
643
644
645
646
647
648 private Number getNumber(String name)
649 {
650 return parseNumber(getString(name));
651 }
652
653
654
655
656
657
658
659
660
661 @Override
662 public double getDouble(String name, double defaultValue)
663 {
664 Number number = getNumber(name);
665 return (number == null ? defaultValue : number.doubleValue());
666 }
667
668
669
670
671
672
673
674
675 @Override
676 public double getDouble(String name)
677 {
678 return getDouble(name, 0.0);
679 }
680
681
682
683
684
685
686
687
688 @Override
689 public double[] getDoubles(String name)
690 {
691 double[] result = null;
692 String value[] = getParam(name);
693 if (value != null)
694 {
695 result = new double[value.length];
696 for (int i = 0; i < value.length; i++)
697 {
698 Number number = parseNumber(value[i]);
699 result[i] = (number == null ? 0.0 : number.doubleValue());
700 }
701 }
702 return result;
703 }
704
705
706
707
708
709
710
711
712
713 @Override
714 public Double getDoubleObject(String name, Double defaultValue)
715 {
716 Number result = getNumber(name);
717 return (result == null ? defaultValue : new Double(result.doubleValue()));
718 }
719
720
721
722
723
724
725
726
727 @Override
728 public Double getDoubleObject(String name)
729 {
730 return getDoubleObject(name, null);
731 }
732
733
734
735
736
737
738
739
740 @Override
741 public Double[] getDoubleObjects(String name)
742 {
743 Double[] result = null;
744 String value[] = getParam(name);
745 if (value != null)
746 {
747 result = new Double[value.length];
748 for (int i = 0; i < value.length; i++)
749 {
750 Number number = parseNumber(value[i]);
751 result[i] = (number == null ? null : new Double(number.doubleValue()));
752 }
753 }
754 return result;
755 }
756
757
758
759
760
761
762
763
764
765 @Override
766 public float getFloat(String name, float defaultValue)
767 {
768 Number number = getNumber(name);
769 return (number == null ? defaultValue : number.floatValue());
770 }
771
772
773
774
775
776
777
778
779 @Override
780 public float getFloat(String name)
781 {
782 return getFloat(name, 0.0f);
783 }
784
785
786
787
788
789
790
791
792 @Override
793 public float[] getFloats(String name)
794 {
795 float[] result = null;
796 String value[] = getParam(name);
797 if (value != null)
798 {
799 result = new float[value.length];
800 for (int i = 0; i < value.length; i++)
801 {
802 Number number = parseNumber(value[i]);
803 result[i] = (number == null ? 0.0f : number.floatValue());
804 }
805 }
806 return result;
807 }
808
809
810
811
812
813
814
815
816
817 @Override
818 public Float getFloatObject(String name, Float defaultValue)
819 {
820 Number result = getNumber(name);
821 return (result == null ? defaultValue : new Float(result.floatValue()));
822 }
823
824
825
826
827
828
829
830
831 @Override
832 public Float getFloatObject(String name)
833 {
834 return getFloatObject(name, null);
835 }
836
837
838
839
840
841
842
843
844 @Override
845 public Float[] getFloatObjects(String name)
846 {
847 Float[] result = null;
848 String value[] = getParam(name);
849 if (value != null)
850 {
851 result = new Float[value.length];
852 for (int i = 0; i < value.length; i++)
853 {
854 Number number = parseNumber(value[i]);
855 result[i] = (number == null ? null : new Float(number.floatValue()));
856 }
857 }
858 return result;
859 }
860
861
862
863
864
865
866
867
868
869 @Override
870 public BigDecimal getBigDecimal(String name, BigDecimal defaultValue)
871 {
872 Number result = getNumber(name);
873 return (result == null ? defaultValue : new BigDecimal(result.doubleValue()));
874 }
875
876
877
878
879
880
881
882
883 @Override
884 public BigDecimal getBigDecimal(String name)
885 {
886 return getBigDecimal(name, null);
887 }
888
889
890
891
892
893
894
895
896 @Override
897 public BigDecimal[] getBigDecimals(String name)
898 {
899 BigDecimal[] result = null;
900 String value[] = getParam(name);
901 if (value != null)
902 {
903 result = new BigDecimal[value.length];
904 for (int i = 0; i < value.length; i++)
905 {
906 Number number = parseNumber(value[i]);
907 result[i] = (number == null ? null : new BigDecimal(number.doubleValue()));
908 }
909 }
910 return result;
911 }
912
913
914
915
916
917
918
919
920
921 @Override
922 public int getInt(String name, int defaultValue)
923 {
924 Number result = getNumber(name);
925 return (result == null || result instanceof Double ? defaultValue : result.intValue());
926 }
927
928
929
930
931
932
933
934
935 @Override
936 public int getInt(String name)
937 {
938 return getInt(name, 0);
939 }
940
941
942
943
944
945
946
947
948 @Override
949 public int[] getInts(String name)
950 {
951 int[] result = null;
952 String value[] = getParam(name);
953 if (value != null)
954 {
955 result = new int[value.length];
956 for (int i = 0; i < value.length; i++)
957 {
958 Number number = parseNumber(value[i]);
959 result[i] = (number == null || number instanceof Double ? 0 : number.intValue());
960 }
961 }
962 return result;
963 }
964
965
966
967
968
969
970
971
972
973 @Override
974 public Integer getIntObject(String name, Integer defaultValue)
975 {
976 Number result = getNumber(name);
977 return (result == null || result instanceof Double ? defaultValue : Integer.valueOf(result.intValue()));
978 }
979
980
981
982
983
984
985
986
987 @Override
988 public Integer getIntObject(String name)
989 {
990 return getIntObject(name, null);
991 }
992
993
994
995
996
997
998
999
1000 @Override
1001 public Integer[] getIntObjects(String name)
1002 {
1003 Integer[] result = null;
1004 String value[] = getParam(name);
1005 if (value != null)
1006 {
1007 result = new Integer[value.length];
1008 for (int i = 0; i < value.length; i++)
1009 {
1010 Number number = parseNumber(value[i]);
1011 result[i] = (number == null || number instanceof Double ? null : Integer.valueOf(number.intValue()));
1012 }
1013 }
1014 return result;
1015 }
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025 @Override
1026 public long getLong(String name, long defaultValue)
1027 {
1028 Number result = getNumber(name);
1029 return (result == null || result instanceof Double ? defaultValue : result.longValue());
1030 }
1031
1032
1033
1034
1035
1036
1037
1038
1039 @Override
1040 public long getLong(String name)
1041 {
1042 return getLong(name, 0);
1043 }
1044
1045
1046
1047
1048
1049
1050
1051
1052 @Override
1053 public long[] getLongs(String name)
1054 {
1055 long[] result = null;
1056 String value[] = getParam(name);
1057 if (value != null)
1058 {
1059 result = new long[value.length];
1060 for (int i = 0; i < value.length; i++)
1061 {
1062 Number number = parseNumber(value[i]);
1063 result[i] = (number == null || number instanceof Double ? 0L : number.longValue());
1064 }
1065 }
1066 return result;
1067 }
1068
1069
1070
1071
1072
1073
1074
1075
1076 @Override
1077 public Long[] getLongObjects(String name)
1078 {
1079 Long[] result = null;
1080 String value[] = getParam(name);
1081 if (value != null)
1082 {
1083 result = new Long[value.length];
1084 for (int i = 0; i < value.length; i++)
1085 {
1086 Number number = parseNumber(value[i]);
1087 result[i] = (number == null || number instanceof Double ? null : Long.valueOf(number.longValue()));
1088 }
1089 }
1090 return result;
1091 }
1092
1093
1094
1095
1096
1097
1098
1099
1100 @Override
1101 public Long getLongObject(String name)
1102 {
1103 return getLongObject(name, null);
1104 }
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114 @Override
1115 public Long getLongObject(String name, Long defaultValue)
1116 {
1117 Number result = getNumber(name);
1118 return (result == null || result instanceof Double ? defaultValue : Long.valueOf(result.longValue()));
1119 }
1120
1121
1122
1123
1124
1125
1126
1127
1128
1129 @Override
1130 public byte getByte(String name, byte defaultValue)
1131 {
1132 Number result = getNumber(name);
1133 return (result == null || result instanceof Double ? defaultValue : result.byteValue());
1134 }
1135
1136
1137
1138
1139
1140
1141
1142
1143 @Override
1144 public byte getByte(String name)
1145 {
1146 return getByte(name, (byte) 0);
1147 }
1148
1149
1150
1151
1152
1153
1154
1155
1156
1157
1158 @Override
1159 public byte[] getBytes(String name)
1160 throws UnsupportedEncodingException
1161 {
1162 byte result[] = null;
1163 String value = getString(name);
1164 if (value != null)
1165 {
1166 result = value.getBytes(getCharacterEncoding());
1167 }
1168 return result;
1169 }
1170
1171
1172
1173
1174
1175
1176
1177
1178
1179 @Override
1180 public Byte getByteObject(String name, Byte defaultValue)
1181 {
1182 Number result = getNumber(name);
1183 return (result == null || result instanceof Double ? defaultValue : Byte.valueOf(result.byteValue()));
1184 }
1185
1186
1187
1188
1189
1190
1191
1192
1193 @Override
1194 public Byte getByteObject(String name)
1195 {
1196 return getByteObject(name, null);
1197 }
1198
1199
1200
1201
1202
1203
1204
1205
1206 @Override
1207 public String getString(String name)
1208 {
1209 String [] value = getParam(name);
1210 return value == null || value.length == 0 ? null : value[0];
1211 }
1212
1213
1214
1215
1216
1217
1218
1219
1220
1221
1222
1223
1224
1225 @Override
1226 public String get(String name)
1227 {
1228 return getString(name);
1229 }
1230
1231
1232
1233
1234
1235
1236
1237
1238
1239 @Override
1240 public String getString(String name, String defaultValue)
1241 {
1242 String value = getString(name);
1243 return StringUtils.isEmpty(value) ? defaultValue : value;
1244 }
1245
1246
1247
1248
1249
1250
1251
1252
1253
1254 @Override
1255 public void setString(String name, String value)
1256 {
1257 if (value != null)
1258 {
1259 putParam(name, new String[]{value});
1260 }
1261 }
1262
1263
1264
1265
1266
1267
1268
1269
1270 @Override
1271 public String[] getStrings(String name)
1272 {
1273 return getParam(name);
1274 }
1275
1276
1277
1278
1279
1280
1281
1282
1283
1284 @Override
1285 public String[] getStrings(String name, String[] defaultValue)
1286 {
1287 String[] value = getParam(name);
1288 return value == null || value.length == 0 ? defaultValue : value;
1289 }
1290
1291
1292
1293
1294
1295
1296
1297
1298
1299 @Override
1300 public void setStrings(String name, String[] values)
1301 {
1302 if (values != null)
1303 {
1304 putParam(name, values);
1305 }
1306 }
1307
1308
1309
1310
1311
1312
1313
1314
1315 @Override
1316 public Object getObject(String name)
1317 {
1318 return getString(name);
1319 }
1320
1321
1322
1323
1324
1325
1326
1327
1328 @Override
1329 public Object[] getObjects(String name)
1330 {
1331 return getParam(name);
1332 }
1333
1334
1335
1336
1337
1338
1339
1340
1341
1342
1343
1344 @Override
1345 public Date getDate(String name, DateFormat df, Date defaultValue)
1346 {
1347 Date result = defaultValue;
1348 String value = StringUtils.trim(getString(name));
1349 if (StringUtils.isNotEmpty(value))
1350 {
1351 try
1352 {
1353
1354 df.setLenient(false);
1355 result = df.parse(value);
1356 }
1357 catch (ParseException e)
1358 {
1359 logConversionFailure(name, value, "Date");
1360 }
1361 }
1362
1363 return result;
1364 }
1365
1366
1367
1368
1369
1370
1371
1372
1373
1374
1375 @Override
1376 public Date getDate(String name)
1377 {
1378 return getDate(name, dateFormat, null);
1379 }
1380
1381
1382
1383
1384
1385
1386
1387
1388
1389 @Override
1390 public Date getDate(String name, DateFormat df)
1391 {
1392 return getDate(name, df, null);
1393 }
1394
1395
1396
1397
1398
1399
1400
1401
1402
1403 @Override
1404 public void setProperties(Object bean) throws Exception
1405 {
1406 Class<?> beanClass = bean.getClass();
1407 PropertyDescriptor[] props
1408 = Introspector.getBeanInfo(beanClass).getPropertyDescriptors();
1409
1410 for ( PropertyDescriptor pd : props )
1411 {
1412 String propname = pd.getName();
1413 Method setter = pd.getWriteMethod();
1414 if (setter != null && containsKey(propname))
1415 {
1416 setProperty(bean, pd);
1417 }
1418 }
1419 }
1420
1421
1422
1423
1424
1425
1426
1427
1428 @Override
1429 public String toString()
1430 {
1431 StringBuilder sb = new StringBuilder();
1432 for (String name : keySet())
1433 {
1434 sb.append('{');
1435 sb.append(name);
1436 sb.append('=');
1437 Object [] params = getToStringParam(name);
1438
1439 if (params == null)
1440 {
1441 sb.append("unknown?");
1442 }
1443 else if (params.length == 0)
1444 {
1445 sb.append("empty");
1446 }
1447 else
1448 {
1449 sb.append('[');
1450 sb.append(StringUtils.join(params, ", "));
1451 sb.append(']');
1452 }
1453 sb.append("}\n");
1454 }
1455
1456 return sb.toString();
1457 }
1458
1459
1460
1461
1462
1463
1464
1465
1466
1467 protected Object [] getToStringParam(final String name)
1468 {
1469 return getParam(name);
1470 }
1471
1472
1473
1474
1475
1476
1477
1478
1479
1480
1481
1482
1483 protected void setProperty(Object bean,
1484 PropertyDescriptor prop)
1485 throws Exception
1486 {
1487 if (prop instanceof IndexedPropertyDescriptor)
1488 {
1489 throw new Exception(prop.getName() +
1490 " is an indexed property (not supported)");
1491 }
1492
1493 Method setter = prop.getWriteMethod();
1494 if (setter == null)
1495 {
1496 throw new Exception(prop.getName() +
1497 " is a read only property");
1498 }
1499
1500 Class<?> propclass = prop.getPropertyType();
1501 Object arg = null;
1502
1503 if (propclass == String.class)
1504 {
1505 arg = getString(prop.getName());
1506 }
1507 else if (propclass == Byte.class || propclass == Byte.TYPE)
1508 {
1509 arg = getByteObject(prop.getName());
1510 }
1511 else if (propclass == Integer.class || propclass == Integer.TYPE)
1512 {
1513 arg = getIntObject(prop.getName());
1514 }
1515 else if (propclass == Long.class || propclass == Long.TYPE)
1516 {
1517 arg = getLongObject(prop.getName());
1518 }
1519 else if (propclass == Boolean.class || propclass == Boolean.TYPE)
1520 {
1521 arg = getBooleanObject(prop.getName());
1522 }
1523 else if (propclass == Double.class || propclass == Double.TYPE)
1524 {
1525 arg = getDoubleObject(prop.getName());
1526 }
1527 else if (propclass == Float.class || propclass == Float.TYPE)
1528 {
1529 arg = getFloatObject(prop.getName());
1530 }
1531 else if (propclass == BigDecimal.class)
1532 {
1533 arg = getBigDecimal(prop.getName());
1534 }
1535 else if (propclass == String[].class)
1536 {
1537 arg = getStrings(prop.getName());
1538 }
1539 else if (propclass == Object.class)
1540 {
1541 arg = getObject(prop.getName());
1542 }
1543 else if (propclass == int[].class)
1544 {
1545 arg = getInts(prop.getName());
1546 }
1547 else if (propclass == Integer[].class)
1548 {
1549 arg = getIntObjects(prop.getName());
1550 }
1551 else if (propclass == Date.class)
1552 {
1553 arg = getDate(prop.getName());
1554 }
1555 else
1556 {
1557 throw new Exception("property "
1558 + prop.getName()
1559 + " is of unsupported type "
1560 + propclass.toString());
1561 }
1562
1563 setter.invoke(bean, arg);
1564 }
1565
1566
1567
1568
1569
1570
1571
1572
1573
1574
1575 protected void putParam(final String name, final String [] value)
1576 {
1577 String key = convert(name);
1578 if (key != null)
1579 {
1580 parameters.put(key, value);
1581 }
1582 }
1583
1584
1585
1586
1587
1588
1589
1590
1591
1592 protected String [] getParam(final String name)
1593 {
1594 String key = convert(name);
1595 Object value = parameters.get(key);
1596
1597
1598
1599 if(value instanceof String[])
1600 {
1601 return (String []) parameters.get(key);
1602 }
1603 else
1604 {
1605 return null;
1606 }
1607 }
1608
1609
1610
1611
1612
1613
1614
1615 private boolean disposed;
1616
1617
1618
1619
1620
1621
1622 public boolean isDisposed()
1623 {
1624 return disposed;
1625 }
1626
1627
1628
1629
1630
1631
1632
1633
1634 private void logConversionFailure(String paramName,
1635 String value, String type)
1636 {
1637 getLogger().warn("Parameter (" + paramName
1638 + ") with value of ("
1639 + value + ") could not be converted to a " + type);
1640 }
1641
1642
1643
1644
1645
1646
1647
1648
1649
1650 @Override
1651 public String convertAndTrim(String value)
1652 {
1653 return parserService.convertAndTrim(value);
1654 }
1655
1656
1657
1658
1659
1660
1661
1662
1663
1664
1665
1666 @Override
1667 public String convertAndTrim(String value, URLCaseFolding fold)
1668 {
1669 return parserService.convertAndTrim(value, fold);
1670 }
1671
1672
1673
1674
1675
1676
1677 @Override
1678 public URLCaseFolding getUrlFolding()
1679 {
1680 return parserService.getUrlFolding();
1681 }
1682
1683 public boolean isValid()
1684 {
1685 if ( this.parameters.size() == 0 )
1686 {
1687 return true;
1688 }
1689 return false;
1690 }
1691 }